Commit 54e5fcd562171a4e4441eb6eb480c2f5a558835f
1 parent
c25bb19fce
Exists in
master
and in
1 other branch
handle top api
Showing 8 changed files with 291 additions and 266 deletions Inline Diff
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/DateFragment.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/MainActivity.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/SensorFilter.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/StepDetector.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/StepListener.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/TopFragment.java
- app/src/main/res/layout/fragment_top.xml
- app/src/main/res/values/strings.xml
app/src/main/java/com/dinhcv/lifelogpedometer/activity/DateFragment.java
1 | package com.dinhcv.lifelogpedometer.activity; | 1 | package com.dinhcv.lifelogpedometer.activity; |
2 | 2 | ||
3 | import android.app.DatePickerDialog; | 3 | import android.app.DatePickerDialog; |
4 | import android.content.Context; | 4 | import android.content.Context; |
5 | import android.content.Intent; | 5 | import android.content.Intent; |
6 | import android.content.SharedPreferences; | 6 | import android.content.SharedPreferences; |
7 | import android.hardware.Sensor; | ||
8 | import android.hardware.SensorEvent; | ||
9 | import android.hardware.SensorEventListener; | ||
10 | import android.hardware.SensorManager; | ||
7 | import android.os.Bundle; | 11 | import android.os.Bundle; |
8 | import android.support.annotation.Nullable; | 12 | import android.support.annotation.Nullable; |
9 | import android.support.v4.app.Fragment; | 13 | import android.support.v4.app.Fragment; |
10 | import android.view.LayoutInflater; | 14 | import android.view.LayoutInflater; |
11 | import android.view.View; | 15 | import android.view.View; |
12 | import android.view.ViewGroup; | 16 | import android.view.ViewGroup; |
13 | import android.widget.DatePicker; | 17 | import android.widget.DatePicker; |
14 | import android.widget.ImageView; | 18 | import android.widget.ImageView; |
15 | import android.widget.LinearLayout; | 19 | import android.widget.LinearLayout; |
16 | import android.widget.TextView; | 20 | import android.widget.TextView; |
21 | import android.widget.Toast; | ||
17 | 22 | ||
18 | import com.dinhcv.lifelogpedometer.R; | 23 | import com.dinhcv.lifelogpedometer.R; |
19 | import com.dinhcv.lifelogpedometer.adapter.NoticeAdapter; | 24 | import com.dinhcv.lifelogpedometer.adapter.NoticeAdapter; |
20 | import com.dinhcv.lifelogpedometer.customview.ExpandableListCustomView; | 25 | import com.dinhcv.lifelogpedometer.customview.ExpandableListCustomView; |
21 | import com.dinhcv.lifelogpedometer.feature.Database; | 26 | import com.dinhcv.lifelogpedometer.feature.Database; |
22 | import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; | 27 | import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; |
23 | import com.dinhcv.lifelogpedometer.model.structure.history.HistoryInfo; | 28 | import com.dinhcv.lifelogpedometer.model.structure.history.HistoryInfo; |
24 | import com.dinhcv.lifelogpedometer.model.structure.home.NoticeInfo; | 29 | import com.dinhcv.lifelogpedometer.model.structure.home.NoticeInfo; |
25 | import com.dinhcv.lifelogpedometer.model.structure.home.TagetInfo; | 30 | import com.dinhcv.lifelogpedometer.model.structure.home.TagetInfo; |
26 | import com.dinhcv.lifelogpedometer.portal.LLAPIManager; | 31 | import com.dinhcv.lifelogpedometer.portal.LLAPIManager; |
27 | import com.dinhcv.lifelogpedometer.utils.Const; | 32 | import com.dinhcv.lifelogpedometer.utils.Const; |
28 | import com.dinhcv.lifelogpedometer.utils.Debug; | 33 | import com.dinhcv.lifelogpedometer.utils.Debug; |
29 | import com.dinhcv.lifelogpedometer.utils.Utils; | 34 | import com.dinhcv.lifelogpedometer.utils.Utils; |
30 | 35 | ||
31 | import org.json.JSONArray; | 36 | import org.json.JSONArray; |
32 | import org.json.JSONException; | 37 | import org.json.JSONException; |
33 | import org.json.JSONObject; | 38 | import org.json.JSONObject; |
34 | 39 | ||
35 | import java.util.ArrayList; | 40 | import java.util.ArrayList; |
36 | import java.util.Calendar; | 41 | import java.util.Calendar; |
37 | import java.util.Date; | 42 | import java.util.Date; |
38 | import java.util.List; | 43 | import java.util.List; |
39 | 44 | ||
40 | import static com.dinhcv.lifelogpedometer.utils.Utils.getStandarDate; | 45 | import static com.dinhcv.lifelogpedometer.utils.Utils.getStandarDate; |
41 | 46 | ||
42 | public class DateFragment extends FragmentBase implements SettingFragmentPresenter { | 47 | public class DateFragment extends FragmentBase implements SettingFragmentPresenter { |
43 | 48 | ||
44 | private TextView tvDate; | 49 | private TextView tvDate; |
45 | private TextView tvStep; | 50 | private TextView tvStep; |
46 | private TextView tvRemain; | 51 | private TextView tvRemain; |
47 | private TextView tvRateDone; | 52 | private TextView tvRateDone; |
48 | private ImageView ivBack; | 53 | private ImageView ivBack; |
49 | private ImageView ivNext; | 54 | private ImageView ivNext; |
50 | 55 | ||
51 | private LinearLayout llBike; | 56 | private LinearLayout llBike; |
52 | private LinearLayout llWalking; | 57 | private LinearLayout llWalking; |
53 | private LinearLayout llRunning; | 58 | private LinearLayout llRunning; |
54 | 59 | ||
55 | private Date mAnaDate; | 60 | private Date mAnaDate; |
56 | private Calendar mCalendar; | 61 | private Calendar mCalendar; |
57 | 62 | ||
58 | private int mAnaDay; | 63 | private int mAnaDay; |
59 | private int mAnaMonth; | 64 | private int mAnaMonth; |
60 | private int mAnaYear; | 65 | private int mAnaYear; |
61 | private Context mContext; | 66 | private Context mContext; |
62 | 67 | ||
63 | private Const.STEP_TYPE stepType; | 68 | private Const.STEP_TYPE stepType; |
64 | private TagetInfo mTagetInfo = new TagetInfo(); | 69 | private TagetInfo mTagetInfo = new TagetInfo(); |
65 | 70 | ||
66 | private ExpandableListCustomView lvNotice; | 71 | private ExpandableListCustomView lvNotice; |
67 | private NoticeAdapter mNoticeAdapter; | 72 | private NoticeAdapter mNoticeAdapter; |
68 | 73 | ||
69 | @Override | 74 | @Override |
70 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle | 75 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle |
71 | savedInstanceState) { | 76 | savedInstanceState) { |
72 | // Inflate the layout for this fragment | 77 | // Inflate the layout for this fragment |
73 | View rootView = inflater.inflate(R.layout.fragment_date, container, false); | 78 | View rootView = inflater.inflate(R.layout.fragment_date, container, false); |
74 | mContext = getActivity(); | 79 | mContext = getActivity(); |
75 | initView(rootView); | 80 | initView(rootView); |
76 | initData(); | 81 | initData(); |
77 | return rootView; | 82 | return rootView; |
78 | } | 83 | } |
79 | 84 | ||
80 | 85 | ||
81 | private void initView(View rootView) { | 86 | private void initView(View rootView) { |
82 | tvDate = (TextView) rootView.findViewById(R.id.tv_date); | 87 | tvDate = (TextView) rootView.findViewById(R.id.tv_date); |
83 | tvStep = (TextView) rootView.findViewById(R.id.tv_step); | 88 | tvStep = (TextView) rootView.findViewById(R.id.tv_step); |
84 | tvRemain = (TextView) rootView.findViewById(R.id.tv_remainingStep); | 89 | tvRemain = (TextView) rootView.findViewById(R.id.tv_remainingStep); |
85 | tvRateDone = (TextView) rootView.findViewById(R.id.tv_completeRate); | 90 | tvRateDone = (TextView) rootView.findViewById(R.id.tv_completeRate); |
86 | ivBack = (ImageView) rootView.findViewById(R.id.iv_back); | 91 | ivBack = (ImageView) rootView.findViewById(R.id.iv_back); |
87 | ivNext = (ImageView) rootView.findViewById(R.id.iv_next); | 92 | ivNext = (ImageView) rootView.findViewById(R.id.iv_next); |
88 | 93 | ||
89 | llBike = (LinearLayout) rootView.findViewById(R.id.ll_bike); | 94 | llBike = (LinearLayout) rootView.findViewById(R.id.ll_bike); |
90 | llWalking = (LinearLayout) rootView.findViewById(R.id.ll_walking); | 95 | llWalking = (LinearLayout) rootView.findViewById(R.id.ll_walking); |
91 | llRunning = (LinearLayout) rootView.findViewById(R.id.ll_running); | 96 | llRunning = (LinearLayout) rootView.findViewById(R.id.ll_running); |
92 | 97 | ||
93 | lvNotice = (ExpandableListCustomView) rootView.findViewById(R.id.lv_notice); | 98 | lvNotice = (ExpandableListCustomView) rootView.findViewById(R.id.lv_notice); |
94 | 99 | ||
95 | handleEvent(); | 100 | handleEvent(); |
96 | } | 101 | } |
97 | 102 | ||
98 | private void handleEvent(){ | 103 | private void handleEvent(){ |
99 | tvDate.setOnClickListener(new View.OnClickListener() { | 104 | tvDate.setOnClickListener(new View.OnClickListener() { |
100 | @Override | 105 | @Override |
101 | public void onClick(View view) { | 106 | public void onClick(View view) { |
102 | handleAnaDatePicker(); | 107 | handleAnaDatePicker(); |
103 | } | 108 | } |
104 | }); | 109 | }); |
105 | 110 | ||
106 | ivBack.setOnClickListener(new View.OnClickListener() { | 111 | ivBack.setOnClickListener(new View.OnClickListener() { |
107 | @Override | 112 | @Override |
108 | public void onClick(View view) { | 113 | public void onClick(View view) { |
109 | mCalendar = Calendar.getInstance(); | 114 | mCalendar = Calendar.getInstance(); |
110 | mCalendar.setTime(mAnaDate); | 115 | mCalendar.setTime(mAnaDate); |
111 | mCalendar.add(Calendar.DAY_OF_MONTH, -1); | 116 | mCalendar.add(Calendar.DAY_OF_MONTH, -1); |
112 | Date date = mCalendar.getTime(); | 117 | Date date = mCalendar.getTime(); |
113 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 118 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
114 | mAnaDate = date; | 119 | mAnaDate = date; |
115 | getHomePage(mAnaDate, stepType); | 120 | getHomePage(mAnaDate, stepType); |
116 | } | 121 | } |
117 | }); | 122 | }); |
118 | 123 | ||
119 | ivNext.setOnClickListener(new View.OnClickListener() { | 124 | ivNext.setOnClickListener(new View.OnClickListener() { |
120 | @Override | 125 | @Override |
121 | public void onClick(View view) { | 126 | public void onClick(View view) { |
122 | mCalendar = Calendar.getInstance(); | 127 | mCalendar = Calendar.getInstance(); |
123 | mCalendar.setTime(mAnaDate); | 128 | mCalendar.setTime(mAnaDate); |
124 | mCalendar.add(Calendar.DAY_OF_MONTH, +1); | 129 | mCalendar.add(Calendar.DAY_OF_MONTH, +1); |
125 | Date date = mCalendar.getTime(); | 130 | Date date = mCalendar.getTime(); |
126 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 131 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
127 | mAnaDate = date; | 132 | mAnaDate = date; |
128 | getHomePage(mAnaDate, stepType); | 133 | getHomePage(mAnaDate, stepType); |
129 | } | 134 | } |
130 | }); | 135 | }); |
131 | 136 | ||
132 | 137 | ||
133 | llWalking.setOnClickListener(new View.OnClickListener() { | 138 | llWalking.setOnClickListener(new View.OnClickListener() { |
134 | @Override | 139 | @Override |
135 | public void onClick(View view) { | 140 | public void onClick(View view) { |
136 | stepType = Const.STEP_TYPE.WALKING; | 141 | stepType = Const.STEP_TYPE.WALKING; |
137 | updateUiStepType(false, true, false); | 142 | updateUiStepType(false, true, false); |
138 | // add data | 143 | // add data |
139 | getHomePage(mAnaDate, stepType); | 144 | getHomePage(mAnaDate, stepType); |
140 | } | 145 | } |
141 | }); | 146 | }); |
142 | 147 | ||
143 | llRunning.setOnClickListener(new View.OnClickListener() { | 148 | llRunning.setOnClickListener(new View.OnClickListener() { |
144 | @Override | 149 | @Override |
145 | public void onClick(View view) { | 150 | public void onClick(View view) { |
146 | stepType = Const.STEP_TYPE.RUNNING; | 151 | stepType = Const.STEP_TYPE.RUNNING; |
147 | updateUiStepType(false, false, true); | 152 | updateUiStepType(false, false, true); |
148 | // add | 153 | // add |
149 | getHomePage(mAnaDate, stepType); | 154 | getHomePage(mAnaDate, stepType); |
150 | } | 155 | } |
151 | }); | 156 | }); |
152 | 157 | ||
153 | llBike.setOnClickListener(new View.OnClickListener() { | 158 | llBike.setOnClickListener(new View.OnClickListener() { |
154 | @Override | 159 | @Override |
155 | public void onClick(View view) { | 160 | public void onClick(View view) { |
156 | stepType = Const.STEP_TYPE.BIKE; | 161 | stepType = Const.STEP_TYPE.BIKE; |
157 | updateUiStepType(true, false, false); | 162 | updateUiStepType(true, false, false); |
158 | // add data | 163 | // add data |
159 | getHomePage(mAnaDate, stepType); | 164 | getHomePage(mAnaDate, stepType); |
160 | } | 165 | } |
161 | }); | 166 | }); |
162 | 167 | ||
163 | } | 168 | } |
164 | 169 | ||
165 | private void updateUiStepType(boolean b1, boolean b2, boolean b3) { | 170 | private void updateUiStepType(boolean b1, boolean b2, boolean b3) { |
166 | llBike.setSelected(b1); | 171 | llBike.setSelected(b1); |
167 | llWalking.setSelected(b2); | 172 | llWalking.setSelected(b2); |
168 | llRunning.setSelected(b3); | 173 | llRunning.setSelected(b3); |
169 | } | 174 | } |
170 | 175 | ||
171 | /** | 176 | /** |
172 | * Show date picker dialog | 177 | * Show date picker dialog |
173 | */ | 178 | */ |
174 | private void handleAnaDatePicker() { | 179 | private void handleAnaDatePicker() { |
175 | 180 | ||
176 | new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { | 181 | new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { |
177 | @Override | 182 | @Override |
178 | public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { | 183 | public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { |
179 | 184 | ||
180 | mCalendar = Calendar.getInstance(); | 185 | mCalendar = Calendar.getInstance(); |
181 | mCalendar.set(year, monthOfYear, dayOfMonth); | 186 | mCalendar.set(year, monthOfYear, dayOfMonth); |
182 | mAnaYear = year; | 187 | mAnaYear = year; |
183 | mAnaMonth = monthOfYear; | 188 | mAnaMonth = monthOfYear; |
184 | mAnaDay = dayOfMonth; | 189 | mAnaDay = dayOfMonth; |
185 | Date date = mCalendar.getTime(); | 190 | Date date = mCalendar.getTime(); |
186 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 191 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
187 | mAnaDate = date; | 192 | mAnaDate = date; |
188 | 193 | ||
189 | getHomePage(mAnaDate, stepType); | 194 | getHomePage(mAnaDate, stepType); |
190 | } | 195 | } |
191 | }, mAnaYear, mAnaMonth, mAnaDay).show(); | 196 | }, mAnaYear, mAnaMonth, mAnaDay).show(); |
192 | 197 | ||
193 | } | 198 | } |
194 | 199 | ||
195 | 200 | ||
196 | /** | 201 | /** |
197 | * init data for | 202 | * init data for |
198 | */ | 203 | */ |
199 | private void initData() { | 204 | private void initData() { |
200 | mCalendar = Calendar.getInstance(); | 205 | mCalendar = Calendar.getInstance(); |
201 | mCalendar.setTime(new Date()); | 206 | mCalendar.setTime(new Date()); |
202 | mAnaDate = mCalendar.getTime(); | 207 | mAnaDate = mCalendar.getTime(); |
203 | mAnaYear = mCalendar.get(Calendar.YEAR); | 208 | mAnaYear = mCalendar.get(Calendar.YEAR); |
204 | mAnaMonth = mCalendar.get(Calendar.MONTH); | 209 | mAnaMonth = mCalendar.get(Calendar.MONTH); |
205 | mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); | 210 | mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); |
206 | 211 | ||
207 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); | 212 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); |
208 | 213 | ||
209 | stepType = Const.STEP_TYPE.WALKING; | 214 | stepType = Const.STEP_TYPE.WALKING; |
210 | updateUiStepType(false, true, false); | 215 | updateUiStepType(false, true, false); |
211 | getHomePage(mAnaDate, stepType); | 216 | getHomePage(mAnaDate, stepType); |
212 | } | 217 | } |
213 | 218 | ||
214 | 219 | ||
215 | private void getHomePage(Date date, Const.STEP_TYPE stepType){ | 220 | private void getHomePage(Date date, Const.STEP_TYPE stepType){ |
216 | 221 | ||
217 | showDialog(mContext); | 222 | showDialog(mContext); |
218 | LLAPIManager.homePage(date, stepType, new LLAPIManagerListener() { | 223 | LLAPIManager.homePage(date, stepType, new LLAPIManagerListener() { |
219 | @Override | 224 | @Override |
220 | public void onError(Error error) { | 225 | public void onError(Error error) { |
221 | Debug.error("Get data history error"); | 226 | Debug.error("Get data history error"); |
222 | hiddenDialog(); | 227 | hiddenDialog(); |
223 | showDialogNotData(); | 228 | showDialogNotData(); |
224 | } | 229 | } |
225 | 230 | ||
226 | @Override | 231 | @Override |
227 | public void onSuccess(String json) { | 232 | public void onSuccess(String json) { |
228 | Debug.error("Get data history success"); | 233 | Debug.error("Get data history success"); |
229 | hiddenDialog(); | 234 | hiddenDialog(); |
230 | loadDataDone(json); | 235 | loadDataDone(json); |
231 | } | 236 | } |
232 | 237 | ||
233 | @Override | 238 | @Override |
234 | public void onSuccess(JSONObject object) { | 239 | public void onSuccess(JSONObject object) { |
235 | Debug.error("Get data history success"); | 240 | Debug.error("Get data history success"); |
236 | hiddenDialog(); | 241 | hiddenDialog(); |
237 | } | 242 | } |
238 | }); | 243 | }); |
239 | } | 244 | } |
240 | 245 | ||
241 | private void showDialogNotData(){ | 246 | private void showDialogNotData(){ |
242 | showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); | 247 | showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); |
243 | } | 248 | } |
244 | 249 | ||
245 | private void loadDataDone(String jsonString) { | 250 | private void loadDataDone(String jsonString) { |
246 | JSONObject jsonObject = null; | 251 | JSONObject jsonObject = null; |
247 | try { | 252 | try { |
248 | jsonObject = new JSONObject(jsonString); | 253 | jsonObject = new JSONObject(jsonString); |
249 | int status = jsonObject.optInt("status"); | 254 | int status = jsonObject.optInt("status"); |
250 | if (status == 1) { | 255 | if (status == 1) { |
251 | JSONObject jsonObject1 = jsonObject.optJSONObject("result"); | 256 | JSONObject jsonObject1 = jsonObject.optJSONObject("result"); |
252 | JSONObject targetInf = jsonObject1.getJSONObject("targetInf"); | 257 | JSONObject targetInf = jsonObject1.getJSONObject("targetInf"); |
253 | JSONArray listNotice = jsonObject1.getJSONArray("listNotice"); | 258 | JSONArray listNotice = jsonObject1.getJSONArray("listNotice"); |
254 | 259 | ||
255 | if (targetInf != null){ | 260 | if (targetInf != null){ |
256 | String target = targetInf.optString("target_step"); | 261 | String target = targetInf.optString("target_step"); |
257 | Debug.normal("Target: "+ target); | 262 | Debug.normal("Target: "+ target); |
258 | mTagetInfo.setTaget(targetInf.optString("target_step")); | 263 | mTagetInfo.setTaget(targetInf.optString("target_step")); |
259 | mTagetInfo.setSteps(targetInf.optString("num_step")); | 264 | mTagetInfo.setSteps(targetInf.optString("num_step")); |
260 | mTagetInfo.setStepRemain(targetInf.optString("remaining_step")); | 265 | mTagetInfo.setStepRemain(targetInf.optString("remaining_step")); |
261 | mTagetInfo.setCompletePercent(targetInf.optString("complete_percent")); | 266 | mTagetInfo.setCompletePercent(targetInf.optString("complete_percent")); |
262 | } | 267 | } |
263 | 268 | ||
264 | if (listNotice != null && listNotice.length() > 0) { | 269 | if (listNotice != null && listNotice.length() > 0) { |
265 | List<NoticeInfo> infoLists = new ArrayList<>(); | 270 | List<NoticeInfo> infoLists = new ArrayList<>(); |
266 | for (int i = 0; i < listNotice.length(); i++){ | 271 | for (int i = 0; i < listNotice.length(); i++){ |
267 | NoticeInfo noticeInfo = new NoticeInfo(); | 272 | NoticeInfo noticeInfo = new NoticeInfo(); |
268 | JSONObject ob = (JSONObject) listNotice.get(i); | 273 | JSONObject ob = (JSONObject) listNotice.get(i); |
269 | noticeInfo.setId(ob.optInt("id")); | 274 | noticeInfo.setId(ob.optInt("id")); |
270 | noticeInfo.setContent(ob.optString("notice_content")); | 275 | noticeInfo.setContent(ob.optString("notice_content")); |
271 | infoLists.add(noticeInfo); | 276 | infoLists.add(noticeInfo); |
272 | } | 277 | } |
273 | 278 | ||
274 | mTagetInfo.setNoticeList(infoLists); | 279 | mTagetInfo.setNoticeList(infoLists); |
275 | } | 280 | } |
276 | 281 | ||
277 | } | 282 | } |
278 | } catch (JSONException e) { | 283 | } catch (JSONException e) { |
279 | e.printStackTrace(); | 284 | e.printStackTrace(); |
280 | mTagetInfo = new TagetInfo();; | 285 | mTagetInfo = new TagetInfo();; |
281 | } | 286 | } |
282 | 287 | ||
283 | updateUI(); | 288 | loadUI(); |
284 | } | 289 | } |
285 | 290 | ||
286 | 291 | ||
287 | private void updateUI(){ | 292 | private void loadUI(){ |
288 | 293 | tvStep.setText(String.valueOf(mTagetInfo.getSteps())); | |
289 | tvStep.setText(mTagetInfo.getSteps()); | 294 | tvRemain.setText(String.valueOf(mTagetInfo.getStepRemain())); |
290 | tvRemain.setText(mTagetInfo.getStepRemain()); | ||
291 | tvRateDone.setText(getResources().getString(R.string.percent_unit, mTagetInfo.getCompletePercent())); | 295 | tvRateDone.setText(getResources().getString(R.string.percent_unit, mTagetInfo.getCompletePercent())); |
292 | 296 | ||
293 | List<NoticeInfo> infoLists = mTagetInfo.getNoticeList(); | 297 | List<NoticeInfo> infoLists = mTagetInfo.getNoticeList(); |
294 | if (infoLists != null && infoLists.size() >0){ | 298 | if (infoLists != null && infoLists.size() >0){ |
295 | mNoticeAdapter = new NoticeAdapter(mContext, infoLists); | 299 | mNoticeAdapter = new NoticeAdapter(mContext, infoLists); |
296 | lvNotice.setAdapter(mNoticeAdapter); | 300 | lvNotice.setAdapter(mNoticeAdapter); |
297 | lvNotice.setExpanded(true); | 301 | lvNotice.setExpanded(true); |
298 | } | 302 | } |
299 | 303 | ||
300 | } | 304 | } |
301 | 305 | ||
302 | private void addDataToObject(){ | 306 | private void addDataToObject(){ |
303 | 307 | ||
304 | } | 308 | } |
305 | 309 | ||
306 | 310 | ||
307 | @Override | 311 | @Override |
308 | public void onAttach(Context context) { | 312 | public void onAttach(Context context) { |
309 | super.onAttach(context); | 313 | super.onAttach(context); |
310 | 314 | ||
311 | } | 315 | } |
312 | 316 | ||
313 | 317 | ||
314 | @Override | 318 | @Override |
315 | public void onSaveData() { | 319 | public void onSaveData() { |
316 | 320 | ||
317 | } | 321 | } |
318 | 322 | ||
319 | @Override | 323 | @Override |
320 | public void onInvalidate(boolean isInit) { | 324 | public void onInvalidate(boolean isInit) { |
321 | initData(); | 325 | initData(); |
322 | } | 326 | } |
323 | 327 | ||
324 | @Override | 328 | @Override |
325 | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { | 329 | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { |
326 | super.onViewStateRestored(savedInstanceState); | 330 | super.onViewStateRestored(savedInstanceState); |
327 | 331 | ||
328 | initData(); | 332 | initData(); |
329 | } | 333 | } |
330 | 334 | ||
331 | 335 | ||
332 | @Override | 336 | @Override |
333 | public void onActivityResult(int requestCode, int resultCode, Intent data) { | 337 | public void onActivityResult(int requestCode, int resultCode, Intent data) { |
334 | super.onActivityResult(requestCode, resultCode, data); | 338 | super.onActivityResult(requestCode, resultCode, data); |
335 | 339 | ||
336 | } | 340 | } |
341 | |||
337 | } | 342 | } |
app/src/main/java/com/dinhcv/lifelogpedometer/activity/MainActivity.java
1 | package com.dinhcv.lifelogpedometer.activity; | File was deleted | |
2 | |||
3 | import android.hardware.Sensor; | ||
4 | import android.hardware.SensorEvent; | ||
5 | import android.hardware.SensorEventListener; | ||
6 | import android.hardware.SensorManager; | ||
7 | import android.support.v7.app.AppCompatActivity; | ||
8 | import android.os.Bundle; | ||
9 | import android.view.View; | ||
10 | import android.widget.Button; | ||
11 | import android.widget.TextView; | ||
12 | |||
13 | import com.dinhcv.lifelogpedometer.R; | ||
14 | |||
15 | public class MainActivity extends AppCompatActivity implements SensorEventListener, StepListener { | ||
16 | private TextView tvSteps; | ||
17 | private Button btnStart; | ||
18 | private Button btnStop; | ||
19 | private StepDetector simpleStepDetector; | ||
20 | private SensorManager sensorManager; | ||
21 | private Sensor accel; | ||
22 | private static final String TEXT_NUM_STEPS = "Number of Steps: "; | ||
23 | private int numSteps; | ||
24 | |||
25 | @Override | ||
26 | protected void onCreate(Bundle savedInstanceState) { | ||
27 | super.onCreate(savedInstanceState); | ||
28 | setContentView(R.layout.activity_main); | ||
29 | |||
30 | |||
31 | // Get an instance of the SensorManager | ||
32 | sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); | ||
33 | accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); | ||
34 | simpleStepDetector = new StepDetector(); | ||
35 | simpleStepDetector.registerListener(this); | ||
36 | |||
37 | tvSteps = (TextView) findViewById(R.id.tv_steps); | ||
38 | btnStart = (Button) findViewById(R.id.btn_start); | ||
39 | btnStop = (Button) findViewById(R.id.btn_stop); | ||
40 | |||
41 | |||
42 | |||
43 | btnStart.setOnClickListener(new View.OnClickListener() { | ||
44 | |||
45 | @Override | ||
46 | public void onClick(View arg0) { | ||
47 | |||
48 | numSteps = 0; | ||
49 | sensorManager.registerListener(MainActivity.this, accel, SensorManager.SENSOR_DELAY_FASTEST); | ||
50 | |||
51 | } | ||
52 | }); | ||
53 | |||
54 | |||
55 | btnStop.setOnClickListener(new View.OnClickListener() { | ||
56 | |||
57 | @Override | ||
58 | public void onClick(View arg0) { | ||
59 | |||
60 | sensorManager.unregisterListener(MainActivity.this); | ||
61 | |||
62 | } | ||
63 | }); | ||
64 | } | ||
65 | |||
66 | |||
67 | |||
68 | @Override | ||
69 | public void onAccuracyChanged(Sensor sensor, int accuracy) { | ||
70 | } | ||
71 | |||
72 | @Override | ||
73 | public void onSensorChanged(SensorEvent event) { | ||
74 | if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { | ||
75 | simpleStepDetector.updateAccel( | ||
76 | event.timestamp, event.values[0], event.values[1], event.values[2]); | ||
77 | } | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public void step(long timeNs) { | ||
82 | numSteps++; | ||
83 | tvSteps.setText(TEXT_NUM_STEPS + numSteps); | ||
84 | } | ||
85 | |||
86 | } |
app/src/main/java/com/dinhcv/lifelogpedometer/activity/SensorFilter.java
1 | package com.dinhcv.lifelogpedometer.activity; | File was deleted | |
2 | |||
3 | public class SensorFilter { | ||
4 | |||
5 | private SensorFilter() { | ||
6 | } | ||
7 | |||
8 | public static float sum(float[] array) { | ||
9 | float retval = 0; | ||
10 | for (int i = 0; i < array.length; i++) { | ||
11 | retval += array[i]; | ||
12 | } | ||
13 | return retval; | ||
14 | } | ||
15 | |||
16 | public static float[] cross(float[] arrayA, float[] arrayB) { | ||
17 | float[] retArray = new float[3]; | ||
18 | retArray[0] = arrayA[1] * arrayB[2] - arrayA[2] * arrayB[1]; | ||
19 | retArray[1] = arrayA[2] * arrayB[0] - arrayA[0] * arrayB[2]; | ||
20 | retArray[2] = arrayA[0] * arrayB[1] - arrayA[1] * arrayB[0]; | ||
21 | return retArray; | ||
22 | } | ||
23 | |||
24 | public static float norm(float[] array) { | ||
25 | float retval = 0; | ||
26 | for (int i = 0; i < array.length; i++) { | ||
27 | retval += array[i] * array[i]; | ||
28 | } | ||
29 | return (float) Math.sqrt(retval); | ||
30 | } | ||
31 | |||
32 | |||
33 | public static float dot(float[] a, float[] b) { | ||
34 | float retval = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; | ||
35 | return retval; | ||
36 | } | ||
37 | |||
38 | public static float[] normalize(float[] a) { | ||
39 | float[] retval = new float[a.length]; | ||
40 | float norm = norm(a); | ||
41 | for (int i = 0; i < a.length; i++) { | ||
42 | retval[i] = a[i] / norm; | ||
43 | } | ||
44 | return retval; | ||
45 | } | ||
46 | |||
47 | } |
app/src/main/java/com/dinhcv/lifelogpedometer/activity/StepDetector.java
1 | package com.dinhcv.lifelogpedometer.activity; | File was deleted | |
2 | |||
3 | public class StepDetector { | ||
4 | |||
5 | private static final int ACCEL_RING_SIZE = 50; | ||
6 | private static final int VEL_RING_SIZE = 10; | ||
7 | |||
8 | // change this threshold according to your sensitivity preferences | ||
9 | private static final float STEP_THRESHOLD = 50f; | ||
10 | |||
11 | private static final int STEP_DELAY_NS = 250000000; | ||
12 | |||
13 | private int accelRingCounter = 0; | ||
14 | private float[] accelRingX = new float[ACCEL_RING_SIZE]; | ||
15 | private float[] accelRingY = new float[ACCEL_RING_SIZE]; | ||
16 | private float[] accelRingZ = new float[ACCEL_RING_SIZE]; | ||
17 | private int velRingCounter = 0; | ||
18 | private float[] velRing = new float[VEL_RING_SIZE]; | ||
19 | private long lastStepTimeNs = 0; | ||
20 | private float oldVelocityEstimate = 0; | ||
21 | |||
22 | private StepListener listener; | ||
23 | |||
24 | public void registerListener(StepListener listener) { | ||
25 | this.listener = listener; | ||
26 | } | ||
27 | |||
28 | |||
29 | public void updateAccel(long timeNs, float x, float y, float z) { | ||
30 | float[] currentAccel = new float[3]; | ||
31 | currentAccel[0] = x; | ||
32 | currentAccel[1] = y; | ||
33 | currentAccel[2] = z; | ||
34 | |||
35 | // First step is to update our guess of where the global z vector is. | ||
36 | accelRingCounter++; | ||
37 | accelRingX[accelRingCounter % ACCEL_RING_SIZE] = currentAccel[0]; | ||
38 | accelRingY[accelRingCounter % ACCEL_RING_SIZE] = currentAccel[1]; | ||
39 | accelRingZ[accelRingCounter % ACCEL_RING_SIZE] = currentAccel[2]; | ||
40 | |||
41 | float[] worldZ = new float[3]; | ||
42 | worldZ[0] = SensorFilter.sum(accelRingX) / Math.min(accelRingCounter, ACCEL_RING_SIZE); | ||
43 | worldZ[1] = SensorFilter.sum(accelRingY) / Math.min(accelRingCounter, ACCEL_RING_SIZE); | ||
44 | worldZ[2] = SensorFilter.sum(accelRingZ) / Math.min(accelRingCounter, ACCEL_RING_SIZE); | ||
45 | |||
46 | float normalization_factor = SensorFilter.norm(worldZ); | ||
47 | |||
48 | worldZ[0] = worldZ[0] / normalization_factor; | ||
49 | worldZ[1] = worldZ[1] / normalization_factor; | ||
50 | worldZ[2] = worldZ[2] / normalization_factor; | ||
51 | |||
52 | float currentZ = SensorFilter.dot(worldZ, currentAccel) - normalization_factor; | ||
53 | velRingCounter++; | ||
54 | velRing[velRingCounter % VEL_RING_SIZE] = currentZ; | ||
55 | |||
56 | float velocityEstimate = SensorFilter.sum(velRing); | ||
57 | |||
58 | if (velocityEstimate > STEP_THRESHOLD && oldVelocityEstimate <= STEP_THRESHOLD | ||
59 | && (timeNs - lastStepTimeNs > STEP_DELAY_NS)) { | ||
60 | listener.step(timeNs); | ||
61 | lastStepTimeNs = timeNs; | ||
62 | } | ||
63 | oldVelocityEstimate = velocityEstimate; | ||
64 | } | ||
65 | } |
app/src/main/java/com/dinhcv/lifelogpedometer/activity/StepListener.java
1 | package com.dinhcv.lifelogpedometer.activity; | File was deleted | |
2 | |||
3 | public interface StepListener { | ||
4 | |||
5 | public void step(long timeNs); | ||
6 | |||
7 | } |
app/src/main/java/com/dinhcv/lifelogpedometer/activity/TopFragment.java
1 | package com.dinhcv.lifelogpedometer.activity; | 1 | package com.dinhcv.lifelogpedometer.activity; |
2 | 2 | ||
3 | import android.app.DatePickerDialog; | 3 | import android.app.DatePickerDialog; |
4 | import android.content.Context; | 4 | import android.content.Context; |
5 | import android.graphics.Color; | 5 | import android.graphics.Color; |
6 | import android.hardware.Sensor; | ||
7 | import android.hardware.SensorEvent; | ||
8 | import android.hardware.SensorEventListener; | ||
9 | import android.hardware.SensorManager; | ||
6 | import android.os.Bundle; | 10 | import android.os.Bundle; |
7 | import android.support.annotation.Nullable; | 11 | import android.support.annotation.Nullable; |
8 | import android.util.Pair; | 12 | import android.util.Pair; |
9 | import android.view.LayoutInflater; | 13 | import android.view.LayoutInflater; |
10 | import android.view.Menu; | 14 | import android.view.Menu; |
11 | import android.view.MenuInflater; | 15 | import android.view.MenuInflater; |
12 | import android.view.View; | 16 | import android.view.View; |
13 | import android.view.ViewGroup; | 17 | import android.view.ViewGroup; |
14 | import android.widget.DatePicker; | 18 | import android.widget.DatePicker; |
15 | import android.widget.ImageView; | 19 | import android.widget.ImageView; |
20 | import android.widget.LinearLayout; | ||
16 | import android.widget.TextView; | 21 | import android.widget.TextView; |
22 | import android.widget.Toast; | ||
17 | 23 | ||
18 | import com.dinhcv.lifelogpedometer.R; | 24 | import com.dinhcv.lifelogpedometer.R; |
19 | import com.dinhcv.lifelogpedometer.feature.Database; | 25 | import com.dinhcv.lifelogpedometer.feature.Database; |
26 | import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; | ||
20 | import com.dinhcv.lifelogpedometer.model.StepModel; | 27 | import com.dinhcv.lifelogpedometer.model.StepModel; |
28 | import com.dinhcv.lifelogpedometer.portal.LLAPIManager; | ||
21 | import com.dinhcv.lifelogpedometer.utils.Const; | 29 | import com.dinhcv.lifelogpedometer.utils.Const; |
22 | import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter; | 30 | import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter; |
31 | import com.dinhcv.lifelogpedometer.utils.Debug; | ||
23 | import com.dinhcv.lifelogpedometer.utils.Utils; | 32 | import com.dinhcv.lifelogpedometer.utils.Utils; |
24 | import com.github.mikephil.charting.components.XAxis; | 33 | import com.github.mikephil.charting.components.XAxis; |
25 | import com.github.mikephil.charting.components.YAxis; | 34 | import com.github.mikephil.charting.components.YAxis; |
26 | 35 | ||
27 | import com.github.mikephil.charting.charts.BarChart; | 36 | import com.github.mikephil.charting.charts.BarChart; |
28 | import com.github.mikephil.charting.data.BarData; | 37 | import com.github.mikephil.charting.data.BarData; |
29 | import com.github.mikephil.charting.data.BarDataSet; | 38 | import com.github.mikephil.charting.data.BarDataSet; |
30 | import com.github.mikephil.charting.data.BarEntry; | 39 | import com.github.mikephil.charting.data.BarEntry; |
31 | import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; | 40 | import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; |
32 | 41 | ||
33 | import org.eazegraph.lib.charts.PieChart; | 42 | import org.eazegraph.lib.charts.PieChart; |
34 | import org.eazegraph.lib.models.PieModel; | 43 | import org.eazegraph.lib.models.PieModel; |
44 | import org.json.JSONArray; | ||
45 | import org.json.JSONObject; | ||
35 | 46 | ||
36 | import java.text.NumberFormat; | 47 | import java.text.NumberFormat; |
37 | import java.util.ArrayList; | 48 | import java.util.ArrayList; |
38 | import java.util.Calendar; | 49 | import java.util.Calendar; |
39 | import java.util.Date; | 50 | import java.util.Date; |
40 | import java.util.List; | 51 | import java.util.List; |
41 | import java.util.Locale; | 52 | import java.util.Locale; |
42 | 53 | ||
43 | import static com.github.mikephil.charting.utils.ColorTemplate.rgb; | 54 | import static com.github.mikephil.charting.utils.ColorTemplate.rgb; |
44 | 55 | ||
45 | 56 | ||
46 | public class TopFragment extends FragmentBase implements SettingFragmentPresenter { | 57 | public class TopFragment extends FragmentBase implements SettingFragmentPresenter, SensorEventListener { |
47 | 58 | ||
48 | private TextView stepsView; | 59 | private TextView stepsView; |
60 | private TextView tvStepGoal; | ||
49 | private TextView tvDistance; | 61 | private TextView tvDistance; |
50 | private TextView tvStepRemain; | 62 | private TextView tvStepRemain; |
51 | private TextView tvStepRateDone; | 63 | private TextView tvStepRateDone; |
52 | private boolean showSteps = true; | 64 | private boolean showSteps = true; |
53 | private PieModel sliceGoal, sliceCurrent; | 65 | private PieModel sliceGoal, sliceCurrent; |
54 | private PieChart pg; | 66 | private PieChart pg; |
55 | private TextView tvDate; | 67 | private TextView tvDate; |
56 | private ImageView ivBack; | 68 | private ImageView ivBack; |
57 | private ImageView ivNext; | 69 | private ImageView ivNext; |
58 | private ImageView ivPlay; | 70 | private ImageView ivPlay; |
59 | 71 | ||
72 | private LinearLayout llBike; | ||
73 | private LinearLayout llWalking; | ||
74 | private LinearLayout llRunning; | ||
75 | private Const.STEP_TYPE stepType; | ||
60 | 76 | ||
61 | private Date mAnaDate; | 77 | private Date mAnaDate; |
62 | private Calendar mCalendar; | 78 | private Calendar mCalendar; |
63 | 79 | ||
64 | private int mAnaDay; | 80 | private int mAnaDay; |
65 | private int mAnaMonth; | 81 | private int mAnaMonth; |
66 | private int mAnaYear; | 82 | private int mAnaYear; |
67 | 83 | ||
68 | private int todayOffset, total_start, since_boot; | ||
69 | public final static NumberFormat formatter = NumberFormat.getInstance(Locale.getDefault()); | ||
70 | public static int STEP_SIZE = 75; | 84 | public static int STEP_SIZE = 75; |
71 | private StepModel mStepModel; | 85 | private StepModel mStepModel; |
86 | private TextView tvSmallStepGoal; | ||
72 | private TextView tvSmallRemain; | 87 | private TextView tvSmallRemain; |
88 | private Context mContext; | ||
73 | 89 | ||
90 | private SensorManager sensorManager; | ||
91 | private boolean activityRunning; | ||
92 | private int stepTotal = 0; | ||
93 | private int stepRemain = 0; | ||
94 | private int stepCount = 0; | ||
95 | |||
96 | private BarChart mChart; | ||
97 | |||
98 | private List<String> dateList; | ||
99 | private String[] mParties; | ||
100 | private Integer[] mStep; | ||
101 | |||
74 | @Override | 102 | @Override |
75 | public void onCreate(final Bundle savedInstanceState) { | 103 | public void onCreate(final Bundle savedInstanceState) { |
76 | super.onCreate(savedInstanceState); | 104 | super.onCreate(savedInstanceState); |
77 | setHasOptionsMenu(true); | 105 | setHasOptionsMenu(true); |
78 | } | 106 | } |
79 | 107 | ||
80 | @Override | 108 | @Override |
81 | public View onCreateView(final LayoutInflater inflater, final ViewGroup container, | 109 | public View onCreateView(final LayoutInflater inflater, final ViewGroup container, |
82 | final Bundle savedInstanceState) { | 110 | final Bundle savedInstanceState) { |
83 | final View v = inflater.inflate(com.dinhcv.lifelogpedometer.R.layout.fragment_top, null); | 111 | final View v = inflater.inflate(R.layout.fragment_top, null); |
84 | stepsView = (TextView) v.findViewById(R.id.steps); | 112 | mContext = getActivity(); |
85 | tvDistance = (TextView) v.findViewById(R.id.tv_distance); | 113 | sensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); |
86 | tvStepRemain = (TextView) v.findViewById(R.id.tv_stepRemain); | ||
87 | tvStepRateDone = (TextView) v.findViewById(R.id.tv_stepRateDone); | ||
88 | tvSmallRemain = (TextView) v.findViewById(R.id.tv_smallRemain); | ||
89 | tvDate = (TextView) v.findViewById(R.id.tv_date); | ||
90 | ivBack = (ImageView) v.findViewById(R.id.iv_back); | ||
91 | ivNext = (ImageView) v.findViewById(R.id.iv_next); | ||
92 | ivPlay = (ImageView) v.findViewById(R.id.iv_play); | ||
93 | 114 | ||
94 | mChart = (BarChart) v.findViewById(R.id.chart); | 115 | initView(v); |
95 | pg = (PieChart) v.findViewById(R.id.graph); | ||
96 | 116 | ||
97 | // slice for the steps taken today | 117 | // slice for the steps taken today |
98 | sliceCurrent = new PieModel("", 0, Color.parseColor("#6FE7F7")); | 118 | sliceCurrent = new PieModel("", 0, Color.parseColor("#6FE7F7")); |
99 | pg.addPieSlice(sliceCurrent); | 119 | pg.addPieSlice(sliceCurrent); |
100 | 120 | ||
101 | // slice for the "missing" steps until reaching the goal | 121 | // slice for the "missing" steps until reaching the goal |
102 | sliceGoal = new PieModel("", Const.STEP_GOAL, Color.parseColor("#B7B8B6")); | 122 | sliceGoal = new PieModel("", Const.STEP_GOAL, Color.parseColor("#B7B8B6")); |
103 | pg.addPieSlice(sliceGoal); | 123 | pg.addPieSlice(sliceGoal); |
104 | pg.setDrawValueInPie(false); | 124 | pg.setDrawValueInPie(false); |
105 | pg.setUsePieRotation(false); | 125 | pg.setUsePieRotation(false); |
106 | pg.startAnimation(); | 126 | pg.startAnimation(); |
107 | pg.setAutoCenterInSlice(false); | 127 | pg.setAutoCenterInSlice(false); |
108 | 128 | ||
109 | mCalendar = Calendar.getInstance(); | 129 | mCalendar = Calendar.getInstance(); |
110 | mCalendar.setTime(new Date()); | 130 | mCalendar.setTime(new Date()); |
111 | mAnaDate = mCalendar.getTime(); | 131 | mAnaDate = mCalendar.getTime(); |
112 | mAnaYear = mCalendar.get(Calendar.YEAR); | 132 | mAnaYear = mCalendar.get(Calendar.YEAR); |
113 | mAnaMonth = mCalendar.get(Calendar.MONTH); | 133 | mAnaMonth = mCalendar.get(Calendar.MONTH); |
114 | mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); | 134 | mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); |
115 | 135 | ||
116 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); | 136 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); |
117 | 137 | ||
118 | handleEvent(); | 138 | handleEvent(); |
119 | 139 | ||
120 | return v; | 140 | return v; |
121 | } | 141 | } |
122 | 142 | ||
143 | private void initView(View v){ | ||
144 | stepsView = (TextView) v.findViewById(R.id.steps); | ||
145 | tvDistance = (TextView) v.findViewById(R.id.tv_distance); | ||
146 | tvStepGoal = (TextView) v.findViewById(R.id.tv_stepGoal); | ||
147 | tvStepRemain = (TextView) v.findViewById(R.id.tv_stepRemain); | ||
148 | tvStepRateDone = (TextView) v.findViewById(R.id.tv_stepRateDone); | ||
149 | tvSmallStepGoal = (TextView) v.findViewById(R.id.tv_smallStepGoal); | ||
150 | tvSmallRemain = (TextView) v.findViewById(R.id.tv_smallRemain); | ||
151 | tvDate = (TextView) v.findViewById(R.id.tv_date); | ||
152 | ivBack = (ImageView) v.findViewById(R.id.iv_back); | ||
153 | ivNext = (ImageView) v.findViewById(R.id.iv_next); | ||
154 | ivPlay = (ImageView) v.findViewById(R.id.iv_play); | ||
155 | |||
156 | mChart = (BarChart) v.findViewById(R.id.chart); | ||
157 | pg = (PieChart) v.findViewById(R.id.graph); | ||
158 | } | ||
159 | |||
123 | private void stepsDistanceChanged() { | 160 | private void stepsDistanceChanged() { |
124 | updatePie(); | 161 | updatePie(); |
125 | updateBars(); | 162 | updateBars(); |
126 | } | 163 | } |
127 | 164 | ||
128 | 165 | ||
129 | @Override | 166 | @Override |
130 | public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { | 167 | public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { |
131 | inflater.inflate(R.menu.main, menu); | 168 | inflater.inflate(R.menu.main, menu); |
132 | } | 169 | } |
133 | 170 | ||
134 | 171 | ||
135 | private void updatePie() { | 172 | private void updatePie() { |
136 | // todayOffset might still be Integer.MIN_VALUE on first start | 173 | // todayOffset might still be Integer.MIN_VALUE on first start |
137 | int steps_today = Math.max(todayOffset + since_boot, 0); | 174 | int steps_today = Math.max(todayOffset + since_boot, 0); |
138 | sliceCurrent.setValue(steps_today); | 175 | sliceCurrent.setValue(steps_today); |
139 | if (Const.STEP_GOAL - steps_today > 0) { | 176 | if (Const.STEP_GOAL - steps_today > 0) { |
140 | // goal not reached yet | 177 | // goal not reached yet |
141 | if (pg.getData().size() == 1) { | 178 | if (pg.getData().size() == 1) { |
142 | pg.addPieSlice(sliceGoal); | 179 | pg.addPieSlice(sliceGoal); |
143 | } | 180 | } |
144 | sliceGoal.setValue(Const.STEP_GOAL - steps_today); | 181 | sliceGoal.setValue(Const.STEP_GOAL - steps_today); |
145 | } else { | 182 | } else { |
146 | // goal reached | 183 | // goal reached |
147 | pg.clearChart(); | 184 | pg.clearChart(); |
148 | pg.addPieSlice(sliceCurrent); | 185 | pg.addPieSlice(sliceCurrent); |
149 | } | 186 | } |
150 | pg.update(); | 187 | pg.update(); |
151 | 188 | ||
152 | stepsView.setText(formatter.format(steps_today)); | 189 | stepsView.setText(formatter.format(steps_today)); |
153 | int remain = Const.STEP_GOAL - steps_today; | 190 | int remain = Const.STEP_GOAL - steps_today; |
154 | tvStepRemain.setText(String.valueOf(remain)); | 191 | tvStepRemain.setText(String.valueOf(remain)); |
155 | tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(steps_today *100/ Const.STEP_GOAL))); | 192 | tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(steps_today *100/ Const.STEP_GOAL))); |
156 | tvSmallRemain.setText(getResources().getString(R.string.pie_text_content3a, remain)); | 193 | tvSmallRemain.setText(getResources().getString(R.string.pie_text_content3a, remain)); |
157 | 194 | ||
158 | double distance_today = steps_today * STEP_SIZE; | 195 | double distance_today = steps_today * STEP_SIZE; |
159 | distance_today /= 100000; | 196 | distance_today /= 100000; |
160 | tvDistance.setText(Utils.convert2String2Decimal(distance_today)); | 197 | tvDistance.setText(Utils.convert2String2Decimal(distance_today)); |
161 | 198 | ||
162 | } | 199 | } |
163 | 200 | ||
164 | /** | 201 | /** |
165 | * Updates the bar graph to show the steps/distance of the last week. Should | 202 | * Updates the bar graph to show the steps/distance of the last week. Should |
166 | * be called when switching from step count to distance. | 203 | * be called when switching from step count to distance. |
167 | */ | 204 | */ |
168 | private void updateBars() { | 205 | private void updateBars() { |
169 | 206 | ||
170 | dateList = new ArrayList<>(); | 207 | dateList = new ArrayList<>(); |
171 | List<Integer> stepList = new ArrayList<>(); | 208 | List<Integer> stepList = new ArrayList<>(); |
172 | 209 | ||
173 | Database db = Database.getInstance(getActivity()); | 210 | Database db = Database.getInstance(getActivity()); |
174 | List<Pair<Long, Integer>> last = db.getLastEntries(8, mAnaDate); | 211 | List<Pair<Long, Integer>> last = db.getLastEntries(8, mAnaDate); |
175 | db.close(); | 212 | db.close(); |
176 | for (int i = last.size() - 1; i > 0; i--) { | 213 | for (int i = last.size() - 1; i > 0; i--) { |
177 | Pair<Long, Integer> current = last.get(i); | 214 | Pair<Long, Integer> current = last.get(i); |
178 | int step = current.second; | 215 | int step = current.second; |
179 | Date date = new Date(current.first); | 216 | Date date = new Date(current.first); |
180 | stepList.add(step); | 217 | stepList.add(step); |
181 | dateList.add(String.valueOf(Utils.getDay(date))); | 218 | dateList.add(String.valueOf(Utils.getDay(date))); |
182 | } | 219 | } |
183 | 220 | ||
184 | mStep = stepList.toArray(new Integer[0]); | 221 | mStep = stepList.toArray(new Integer[0]); |
185 | mParties = dateList.toArray(new String[0]); | 222 | mParties = dateList.toArray(new String[0]); |
186 | 223 | ||
187 | initGraph(); | 224 | initGraph(); |
188 | } | 225 | } |
189 | 226 | ||
190 | private BarChart mChart; | ||
191 | 227 | ||
192 | private List<String> dateList; | ||
193 | private String[] mParties; | ||
194 | private Integer[] mStep; | ||
195 | |||
196 | private void initGraph(){ | 228 | private void initGraph(){ |
197 | 229 | ||
198 | mChart.setDrawBarShadow(false); | 230 | mChart.setDrawBarShadow(false); |
199 | mChart.setDrawValueAboveBar(true); | 231 | mChart.setDrawValueAboveBar(true); |
200 | 232 | ||
201 | // if more than 60 entries are displayed in the chart, no values will be | 233 | // if more than 60 entries are displayed in the chart, no values will be |
202 | // drawn | 234 | // drawn |
203 | mChart.setMaxVisibleValueCount(60); | 235 | mChart.setMaxVisibleValueCount(60); |
204 | 236 | ||
205 | mChart.getDescription().setEnabled(false); | 237 | mChart.getDescription().setEnabled(false); |
206 | // scaling can now only be done on x- and y-axis separately | 238 | // scaling can now only be done on x- and y-axis separately |
207 | mChart.setPinchZoom(false); | 239 | mChart.setPinchZoom(false); |
208 | 240 | ||
209 | mChart.setDrawGridBackground(false); | 241 | mChart.setDrawGridBackground(false); |
210 | // mChart.setDrawYLabels(false); | 242 | // mChart.setDrawYLabels(false); |
211 | 243 | ||
212 | DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(dateList); | 244 | DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(dateList); |
213 | 245 | ||
214 | XAxis xAxis = mChart.getXAxis(); | 246 | XAxis xAxis = mChart.getXAxis(); |
215 | xAxis.setLabelRotationAngle(0); | 247 | xAxis.setLabelRotationAngle(0); |
216 | xAxis.setPosition(XAxis.XAxisPosition.TOP); | 248 | xAxis.setPosition(XAxis.XAxisPosition.TOP); |
217 | xAxis.setDrawGridLines(true); | 249 | xAxis.setDrawGridLines(true); |
218 | xAxis.setLabelCount(10); | 250 | xAxis.setLabelCount(10); |
219 | xAxis.setTextColor(Color.WHITE); | 251 | xAxis.setTextColor(Color.WHITE); |
220 | xAxis.setValueFormatter(xValueFormatter); | 252 | xAxis.setValueFormatter(xValueFormatter); |
221 | 253 | ||
222 | 254 | ||
223 | YAxis leftAxis = mChart.getAxisLeft(); | 255 | YAxis leftAxis = mChart.getAxisLeft(); |
224 | leftAxis.setDrawLabels(false); | 256 | leftAxis.setDrawLabels(false); |
225 | leftAxis.setDrawGridLines(false); | 257 | leftAxis.setDrawGridLines(false); |
226 | leftAxis.setAxisMinimum(0f); | 258 | leftAxis.setAxisMinimum(0f); |
227 | leftAxis.setAxisMaximum(10000f); | 259 | leftAxis.setAxisMaximum(10000f); |
228 | leftAxis.setDrawZeroLine(false); | 260 | leftAxis.setDrawZeroLine(false); |
229 | 261 | ||
230 | leftAxis.setEnabled(false); | 262 | leftAxis.setEnabled(false); |
231 | mChart.setDrawValueAboveBar(false); | 263 | mChart.setDrawValueAboveBar(false); |
232 | mChart.getAxisRight().setEnabled(false); | 264 | mChart.getAxisRight().setEnabled(false); |
233 | 265 | ||
234 | // set auto scale min max | 266 | // set auto scale min max |
235 | mChart.setAutoScaleMinMaxEnabled(true); | 267 | mChart.setAutoScaleMinMaxEnabled(true); |
236 | mChart.notifyDataSetChanged(); | 268 | mChart.notifyDataSetChanged(); |
237 | 269 | ||
238 | // Set enimate y | 270 | // Set enimate y |
239 | mChart.animateY(2000); | 271 | mChart.animateY(2000); |
240 | 272 | ||
241 | setData(); | 273 | setData(); |
242 | 274 | ||
243 | mChart.getLegend().setEnabled(false); | 275 | mChart.getLegend().setEnabled(false); |
244 | } | 276 | } |
245 | 277 | ||
246 | 278 | ||
247 | private void setData() { | 279 | private void setData() { |
248 | 280 | ||
249 | ArrayList<String> xVals = new ArrayList<>(); | 281 | ArrayList<String> xVals = new ArrayList<>(); |
250 | for (int i = 0; i < mStep.length; i++) { | 282 | for (int i = 0; i < mStep.length; i++) { |
251 | xVals.add(mParties[i % mStep.length]); | 283 | xVals.add(mParties[i % mStep.length]); |
252 | } | 284 | } |
253 | 285 | ||
254 | ArrayList<BarEntry> yVals1 = new ArrayList<>(); | 286 | ArrayList<BarEntry> yVals1 = new ArrayList<>(); |
255 | for (int i = 0; i < mStep.length; i++) { | 287 | for (int i = 0; i < mStep.length; i++) { |
256 | float val = (float) (mStep[i]*1); | 288 | float val = (float) (mStep[i]*1); |
257 | yVals1.add(new BarEntry(i, val)); | 289 | yVals1.add(new BarEntry(i, val)); |
258 | } | 290 | } |
259 | 291 | ||
260 | BarDataSet set1; | 292 | BarDataSet set1; |
261 | 293 | ||
262 | if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { | 294 | if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { |
263 | set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); | 295 | set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); |
264 | set1.setValues(yVals1); | 296 | set1.setValues(yVals1); |
265 | mChart.getData().notifyDataChanged(); | 297 | mChart.getData().notifyDataChanged(); |
266 | mChart.notifyDataSetChanged(); | 298 | mChart.notifyDataSetChanged(); |
267 | } else { | 299 | } else { |
268 | ArrayList<Integer> colors = new ArrayList<>(); | 300 | ArrayList<Integer> colors = new ArrayList<>(); |
269 | 301 | ||
270 | 302 | ||
271 | int[] MATERIAL_COLORS = {rgb("#40CDEF")}; | 303 | int[] MATERIAL_COLORS = {rgb("#40CDEF")}; |
272 | 304 | ||
273 | for (int c : MATERIAL_COLORS) | 305 | for (int c : MATERIAL_COLORS) |
274 | colors.add(c); | 306 | colors.add(c); |
275 | 307 | ||
276 | set1 = new BarDataSet(yVals1, null); | 308 | set1 = new BarDataSet(yVals1, null); |
277 | 309 | ||
278 | set1.setColors(colors); | 310 | set1.setColors(colors); |
279 | 311 | ||
280 | ArrayList<IBarDataSet> dataSets = new ArrayList<>(); | 312 | ArrayList<IBarDataSet> dataSets = new ArrayList<>(); |
281 | dataSets.add(set1); | 313 | dataSets.add(set1); |
282 | 314 | ||
283 | BarData data = new BarData(dataSets); | 315 | BarData data = new BarData(dataSets); |
284 | data.setValueTextSize(10f); | 316 | data.setValueTextSize(10f); |
285 | 317 | ||
286 | mChart.setData(data); | 318 | mChart.setData(data); |
287 | } | 319 | } |
288 | } | 320 | } |
289 | 321 | ||
290 | 322 | ||
291 | 323 | ||
292 | private void handleEvent(){ | 324 | private void handleEvent(){ |
293 | tvDate.setOnClickListener(new View.OnClickListener() { | 325 | tvDate.setOnClickListener(new View.OnClickListener() { |
294 | @Override | 326 | @Override |
295 | public void onClick(View view) { | 327 | public void onClick(View view) { |
296 | handleAnaDatePicker(); | 328 | handleAnaDatePicker(); |
297 | } | 329 | } |
298 | }); | 330 | }); |
299 | 331 | ||
300 | ivBack.setOnClickListener(new View.OnClickListener() { | 332 | ivBack.setOnClickListener(new View.OnClickListener() { |
301 | @Override | 333 | @Override |
302 | public void onClick(View view) { | 334 | public void onClick(View view) { |
303 | mCalendar = Calendar.getInstance(); | 335 | mCalendar = Calendar.getInstance(); |
304 | mCalendar.setTime(mAnaDate); | 336 | mCalendar.setTime(mAnaDate); |
305 | mCalendar.add(Calendar.DAY_OF_MONTH, -1); | 337 | mCalendar.add(Calendar.DAY_OF_MONTH, -1); |
306 | Date date = mCalendar.getTime(); | 338 | Date date = mCalendar.getTime(); |
307 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 339 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
308 | mAnaDate = date; | 340 | mAnaDate = date; |
309 | } | 341 | } |
310 | }); | 342 | }); |
311 | 343 | ||
312 | ivNext.setOnClickListener(new View.OnClickListener() { | 344 | ivNext.setOnClickListener(new View.OnClickListener() { |
313 | @Override | 345 | @Override |
314 | public void onClick(View view) { | 346 | public void onClick(View view) { |
315 | mCalendar = Calendar.getInstance(); | 347 | mCalendar = Calendar.getInstance(); |
316 | mCalendar.setTime(mAnaDate); | 348 | mCalendar.setTime(mAnaDate); |
317 | mCalendar.add(Calendar.DAY_OF_MONTH, +1); | 349 | mCalendar.add(Calendar.DAY_OF_MONTH, +1); |
318 | Date date = mCalendar.getTime(); | 350 | Date date = mCalendar.getTime(); |
319 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 351 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
320 | mAnaDate = date; | 352 | mAnaDate = date; |
321 | } | 353 | } |
322 | }); | 354 | }); |
323 | 355 | ||
356 | llWalking.setOnClickListener(new View.OnClickListener() { | ||
357 | @Override | ||
358 | public void onClick(View view) { | ||
359 | stepType = Const.STEP_TYPE.WALKING; | ||
360 | updateUiStepType(false, true, false); | ||
361 | // add data | ||
362 | getTopData(mAnaDate, stepType); | ||
363 | } | ||
364 | }); | ||
324 | 365 | ||
366 | llRunning.setOnClickListener(new View.OnClickListener() { | ||
367 | @Override | ||
368 | public void onClick(View view) { | ||
369 | stepType = Const.STEP_TYPE.RUNNING; | ||
370 | updateUiStepType(false, false, true); | ||
371 | // add | ||
372 | getTopData(mAnaDate, stepType); | ||
373 | } | ||
374 | }); | ||
375 | |||
376 | llBike.setOnClickListener(new View.OnClickListener() { | ||
377 | @Override | ||
378 | public void onClick(View view) { | ||
379 | stepType = Const.STEP_TYPE.BIKE; | ||
380 | updateUiStepType(true, false, false); | ||
381 | // add data | ||
382 | getTopData(mAnaDate, stepType); | ||
383 | } | ||
384 | }); | ||
385 | |||
386 | |||
325 | } | 387 | } |
326 | 388 | ||
389 | private void updateUiStepType(boolean b1, boolean b2, boolean b3) { | ||
390 | llBike.setSelected(b1); | ||
391 | llWalking.setSelected(b2); | ||
392 | llRunning.setSelected(b3); | ||
393 | } | ||
327 | 394 | ||
395 | |||
328 | /** | 396 | /** |
329 | * Show date picker dialog | 397 | * Show date picker dialog |
330 | */ | 398 | */ |
331 | private void handleAnaDatePicker() { | 399 | private void handleAnaDatePicker() { |
332 | 400 | ||
333 | new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { | 401 | new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { |
334 | @Override | 402 | @Override |
335 | public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { | 403 | public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { |
336 | 404 | ||
337 | mCalendar = Calendar.getInstance(); | 405 | mCalendar = Calendar.getInstance(); |
338 | mCalendar.set(year, monthOfYear, dayOfMonth); | 406 | mCalendar.set(year, monthOfYear, dayOfMonth); |
339 | mAnaYear = year; | 407 | mAnaYear = year; |
340 | mAnaMonth = monthOfYear; | 408 | mAnaMonth = monthOfYear; |
341 | mAnaDay = dayOfMonth; | 409 | mAnaDay = dayOfMonth; |
342 | Date date = mCalendar.getTime(); | 410 | Date date = mCalendar.getTime(); |
343 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 411 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
344 | mAnaDate = date; | 412 | mAnaDate = date; |
345 | } | 413 | } |
346 | }, mAnaYear, mAnaMonth, mAnaDay).show(); | 414 | }, mAnaYear, mAnaMonth, mAnaDay).show(); |
347 | 415 | ||
348 | } | 416 | } |
349 | 417 | ||
418 | private void getTopData(Date date, Const.STEP_TYPE stepType){ | ||
350 | 419 | ||
420 | showDialog(mContext); | ||
421 | LLAPIManager.homePage(date, stepType, new LLAPIManagerListener() { | ||
422 | @Override | ||
423 | public void onError(Error error) { | ||
424 | Debug.error("Get data history error"); | ||
425 | hiddenDialog(); | ||
426 | showDialogNotData(); | ||
427 | } | ||
351 | 428 | ||
429 | @Override | ||
430 | public void onSuccess(String json) { | ||
431 | Debug.error("Get data history success"); | ||
432 | hiddenDialog(); | ||
433 | loadDataDone(json); | ||
434 | } | ||
435 | |||
436 | @Override | ||
437 | public void onSuccess(JSONObject object) { | ||
438 | Debug.error("Get data history success"); | ||
439 | hiddenDialog(); | ||
440 | } | ||
441 | }); | ||
442 | } | ||
443 | |||
444 | private void showDialogNotData(){ | ||
445 | showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); | ||
446 | } | ||
447 | |||
448 | private void loadDataDone(String jsonString) { | ||
449 | JSONObject jsonObject = null; | ||
450 | try { | ||
451 | jsonObject = new JSONObject(jsonString); | ||
452 | int status = jsonObject.optInt("status"); | ||
453 | if (status == 1) { | ||
454 | JSONObject jsonObject1 = jsonObject.optJSONObject("result"); | ||
455 | JSONObject targetInf = jsonObject1.getJSONObject("targetInf"); | ||
456 | JSONArray listNotice = jsonObject1.getJSONArray("listNotice"); | ||
457 | |||
458 | if (targetInf != null){ | ||
459 | String target = targetInf.optString("target_step"); | ||
460 | Debug.normal("Target: "+ target); | ||
461 | mTagetInfo.setTaget(targetInf.optString("target_step")); | ||
462 | mTagetInfo.setSteps(targetInf.optString("num_step")); | ||
463 | mTagetInfo.setStepRemain(targetInf.optString("remaining_step")); | ||
464 | mTagetInfo.setCompletePercent(targetInf.optString("complete_percent")); | ||
465 | } | ||
466 | |||
467 | if (listNotice != null && listNotice.length() > 0) { | ||
468 | List<NoticeInfo> infoLists = new ArrayList<>(); | ||
469 | for (int i = 0; i < listNotice.length(); i++){ | ||
470 | NoticeInfo noticeInfo = new NoticeInfo(); | ||
471 | JSONObject ob = (JSONObject) listNotice.get(i); | ||
472 | noticeInfo.setId(ob.optInt("id")); | ||
473 | noticeInfo.setContent(ob.optString("notice_content")); | ||
474 | infoLists.add(noticeInfo); | ||
475 | } | ||
476 | |||
477 | mTagetInfo.setNoticeList(infoLists); | ||
478 | } | ||
479 | |||
480 | } | ||
481 | } catch (JSONException e) { | ||
482 | e.printStackTrace(); | ||
483 | mTagetInfo = new TagetInfo();; | ||
484 | } | ||
485 | |||
486 | loadUI(); | ||
487 | } | ||
488 | |||
489 | |||
490 | private void loadUI(){ | ||
491 | tvStep.setText(String.valueOf(mTagetInfo.getSteps())); | ||
492 | tvRemain.setText(String.valueOf(mTagetInfo.getStepRemain())); | ||
493 | tvRateDone.setText(getResources().getString(R.string.percent_unit, mTagetInfo.getCompletePercent())); | ||
494 | |||
495 | List<NoticeInfo> infoLists = mTagetInfo.getNoticeList(); | ||
496 | if (infoLists != null && infoLists.size() >0){ | ||
497 | mNoticeAdapter = new NoticeAdapter(mContext, infoLists); | ||
498 | lvNotice.setAdapter(mNoticeAdapter); | ||
499 | lvNotice.setExpanded(true); | ||
500 | } | ||
501 | |||
502 | } | ||
503 | |||
504 | private void updateUI(){ | ||
505 | stepTotal = stepTotal + stepCount; | ||
506 | stepRemain = stepRemain - stepCount; | ||
507 | double percentDone = stepTotal *100.0 / (stepTotal + stepRemain); | ||
508 | tvStep.setText(String.valueOf(stepTotal)); | ||
509 | tvRemain.setText(mTagetInfo.getStepRemain()); | ||
510 | tvRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(percentDone))); | ||
511 | } | ||
512 | |||
352 | @Override | 513 | @Override |
353 | public void onAttach(Context context) { | 514 | public void onAttach(Context context) { |
354 | super.onAttach(context); | 515 | super.onAttach(context); |
355 | 516 | ||
356 | } | 517 | } |
357 | 518 | ||
358 | private void initData() { | 519 | private void initData() { |
359 | 520 | ||
360 | } | 521 | } |
361 | 522 | ||
362 | @Override | 523 | @Override |
363 | public void onSaveData() { | 524 | public void onSaveData() { |
364 | 525 | ||
365 | } | 526 | } |
366 | 527 | ||
367 | @Override | 528 | @Override |
368 | public void onInvalidate(boolean isInit) { | 529 | public void onInvalidate(boolean isInit) { |
369 | initData(); | 530 | initData(); |
370 | } | 531 | } |
371 | 532 | ||
372 | @Override | 533 | @Override |
373 | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { | 534 | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { |
374 | super.onViewStateRestored(savedInstanceState); | 535 | super.onViewStateRestored(savedInstanceState); |
375 | 536 | ||
376 | initData(); | 537 | initData(); |
538 | } | ||
539 | |||
540 | |||
541 | @Override | ||
542 | public void onResume() { | ||
543 | super.onResume(); | ||
544 | activityRunning = true; | ||
545 | Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); | ||
546 | if (countSensor != null) { | ||
547 | sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI); | ||
548 | } else { | ||
549 | Toast.makeText(mContext, getResources().getString(R.string.sensor_available), Toast.LENGTH_SHORT).show(); | ||
550 | } | ||
551 | } | ||
552 | |||
553 | @Override | ||
554 | public void onSensorChanged(SensorEvent event) { | ||
555 | if (activityRunning){ | ||
556 | stepCount = (int) event.values[0]; | ||
557 | // update UI | ||
558 | updateUI(); | ||
559 | } | ||
560 | } | ||
561 | |||
562 | @Override | ||
563 | public void onAccuracyChanged(Sensor sensor, int accuracy) { | ||
564 | |||
565 | } | ||
566 | |||
567 | @Override | ||
568 | public void onPause() { | ||
569 | super.onPause(); | ||
570 | activityRunning = false; | ||
571 | } | ||
572 | |||
573 | @Override | ||
574 | public void onDestroy() { | ||
575 | super.onDestroy(); | ||
576 | |||
577 | |||
578 | } | ||
579 | |||
580 | private void creatLogStep(Date date, Const.STEP_TYPE stepType){ | ||
581 | |||
582 | LLAPIManager.homePage(date, stepType, new LLAPIManagerListener() { | ||
583 | @Override | ||
584 | public void onError(Error error) { | ||
585 | Debug.error("Get data history error"); | ||
586 | } | ||
587 | |||
588 | @Override |
app/src/main/res/layout/fragment_top.xml
1 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | 1 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
2 | xmlns:appNs="http://schemas.android.com/apk/res-auto" | 2 | xmlns:appNs="http://schemas.android.com/apk/res-auto" |
3 | android:layout_width="match_parent" | 3 | android:layout_width="match_parent" |
4 | android:layout_height="match_parent" | 4 | android:layout_height="match_parent" |
5 | android:background="@color/background_main"> | 5 | android:background="@color/background_main"> |
6 | 6 | ||
7 | <ScrollView | 7 | <ScrollView |
8 | android:layout_width="match_parent" | 8 | android:layout_width="match_parent" |
9 | android:layout_height="match_parent" | 9 | android:layout_height="match_parent" |
10 | android:layout_alignParentTop="true" | 10 | android:layout_alignParentTop="true" |
11 | android:layout_alignParentStart="true" | 11 | android:layout_alignParentStart="true" |
12 | android:layout_above="@+id/ll_stepType"> | 12 | android:layout_above="@+id/ll_stepType"> |
13 | 13 | ||
14 | <LinearLayout | 14 | <LinearLayout |
15 | android:layout_width="match_parent" | 15 | android:layout_width="match_parent" |
16 | android:layout_height="wrap_content" | 16 | android:layout_height="wrap_content" |
17 | android:orientation="vertical" | 17 | android:orientation="vertical" |
18 | android:padding="10dp"> | 18 | android:padding="10dp"> |
19 | 19 | ||
20 | 20 | ||
21 | <LinearLayout | 21 | <LinearLayout |
22 | android:layout_width="match_parent" | 22 | android:layout_width="match_parent" |
23 | android:layout_height="wrap_content" | 23 | android:layout_height="wrap_content" |
24 | android:orientation="horizontal" | 24 | android:orientation="horizontal" |
25 | android:paddingTop="10dp"> | 25 | android:paddingTop="10dp"> |
26 | 26 | ||
27 | <ImageView | 27 | <ImageView |
28 | android:id="@+id/iv_back" | 28 | android:id="@+id/iv_back" |
29 | android:layout_width="@dimen/next_date_height" | 29 | android:layout_width="@dimen/next_date_height" |
30 | android:layout_height="@dimen/next_date_height" | 30 | android:layout_height="@dimen/next_date_height" |
31 | android:src="@drawable/back_ic" /> | 31 | android:src="@drawable/back_ic" /> |
32 | 32 | ||
33 | <TextView | 33 | <TextView |
34 | android:id="@+id/tv_date" | 34 | android:id="@+id/tv_date" |
35 | android:layout_width="0dp" | 35 | android:layout_width="0dp" |
36 | android:layout_height="match_parent" | 36 | android:layout_height="match_parent" |
37 | android:layout_weight="1.0" | 37 | android:layout_weight="1.0" |
38 | android:gravity="center" | 38 | android:gravity="center" |
39 | android:text="2017年1月1日" | 39 | android:text="2017年1月1日" |
40 | android:textColor="@color/white" | 40 | android:textColor="@color/white" |
41 | android:textSize="23sp" /> | 41 | android:textSize="23sp" /> |
42 | 42 | ||
43 | <ImageView | 43 | <ImageView |
44 | android:id="@+id/iv_next" | 44 | android:id="@+id/iv_next" |
45 | android:layout_width="@dimen/next_date_height" | 45 | android:layout_width="@dimen/next_date_height" |
46 | android:layout_height="@dimen/next_date_height" | 46 | android:layout_height="@dimen/next_date_height" |
47 | android:src="@drawable/next_ic" /> | 47 | android:src="@drawable/next_ic" /> |
48 | 48 | ||
49 | </LinearLayout> | 49 | </LinearLayout> |
50 | 50 | ||
51 | <LinearLayout | 51 | <LinearLayout |
52 | android:layout_width="match_parent" | 52 | android:layout_width="match_parent" |
53 | android:layout_height="wrap_content" | 53 | android:layout_height="wrap_content" |
54 | android:orientation="horizontal" | 54 | android:orientation="horizontal" |
55 | android:paddingTop="10dp" | 55 | android:paddingTop="10dp" |
56 | android:weightSum="100"> | 56 | android:weightSum="100"> |
57 | 57 | ||
58 | <LinearLayout | 58 | <LinearLayout |
59 | android:layout_width="0dp" | 59 | android:layout_width="0dp" |
60 | android:layout_height="wrap_content" | 60 | android:layout_height="wrap_content" |
61 | android:layout_weight="15" | 61 | android:layout_weight="15" |
62 | android:orientation="vertical"> | 62 | android:orientation="vertical"> |
63 | 63 | ||
64 | <ImageView | 64 | <ImageView |
65 | android:layout_width="match_parent" | 65 | android:layout_width="match_parent" |
66 | android:layout_height="wrap_content" | 66 | android:layout_height="wrap_content" |
67 | android:src="@drawable/goout_ic" | 67 | android:src="@drawable/goout_ic" |
68 | android:adjustViewBounds="true"/> | 68 | android:adjustViewBounds="true"/> |
69 | 69 | ||
70 | <ImageView | 70 | <ImageView |
71 | android:layout_width="match_parent" | 71 | android:layout_width="match_parent" |
72 | android:layout_height="wrap_content" | 72 | android:layout_height="wrap_content" |
73 | android:src="@drawable/ic_face" | 73 | android:src="@drawable/ic_face" |
74 | android:adjustViewBounds="true" | 74 | android:adjustViewBounds="true" |
75 | android:paddingTop="6dp"/> | 75 | android:paddingTop="6dp"/> |
76 | 76 | ||
77 | <ImageView | 77 | <ImageView |
78 | android:layout_width="match_parent" | 78 | android:layout_width="match_parent" |
79 | android:layout_height="wrap_content" | 79 | android:layout_height="wrap_content" |
80 | android:src="@drawable/ic_line" | 80 | android:src="@drawable/ic_line" |
81 | android:adjustViewBounds="true" | 81 | android:adjustViewBounds="true" |
82 | android:paddingTop="10dp"/> | 82 | android:paddingTop="10dp"/> |
83 | 83 | ||
84 | </LinearLayout> | 84 | </LinearLayout> |
85 | 85 | ||
86 | <RelativeLayout | 86 | <RelativeLayout |
87 | android:layout_width="0dp" | 87 | android:layout_width="0dp" |
88 | android:layout_height="wrap_content" | 88 | android:layout_height="wrap_content" |
89 | android:layout_weight="60" | 89 | android:layout_weight="60" |
90 | android:paddingLeft="10dp"> | 90 | android:paddingLeft="10dp"> |
91 | 91 | ||
92 | <org.eazegraph.lib.charts.PieChart | 92 | <org.eazegraph.lib.charts.PieChart |
93 | xmlns:eaze="http://schemas.android.com/apk/res-auto" | 93 | xmlns:eaze="http://schemas.android.com/apk/res-auto" |
94 | android:id="@+id/graph" | 94 | android:id="@+id/graph" |
95 | android:layout_width="match_parent" | 95 | android:layout_width="match_parent" |
96 | android:layout_height="200dp" | 96 | android:layout_height="200dp" |
97 | android:layout_marginTop="10dp" | 97 | android:layout_marginTop="10dp" |
98 | eaze:egLegendHeight="0dp" | 98 | eaze:egLegendHeight="0dp" |
99 | eaze:egInnerPadding="93" | 99 | eaze:egInnerPadding="93" |
100 | eaze:egInnerPaddingColor="@color/background_main" | 100 | eaze:egInnerPaddingColor="@color/background_main" |
101 | eaze:egHighlightStrength="1"/> | 101 | eaze:egHighlightStrength="1"/> |
102 | 102 | ||
103 | <LinearLayout | 103 | <LinearLayout |
104 | android:layout_width="match_parent" | 104 | android:layout_width="match_parent" |
105 | android:layout_height="200dp" | 105 | android:layout_height="200dp" |
106 | android:layout_marginTop="10dp" | 106 | android:layout_marginTop="10dp" |
107 | android:orientation="vertical" | 107 | android:orientation="vertical" |
108 | android:gravity="center_horizontal"> | 108 | android:gravity="center_horizontal"> |
109 | 109 | ||
110 | <ImageView | 110 | <ImageView |
111 | android:layout_width="@dimen/walking_img_height" | 111 | android:layout_width="@dimen/walking_img_height" |
112 | android:layout_height="@dimen/walking_img_height" | 112 | android:layout_height="@dimen/walking_img_height" |
113 | android:layout_marginTop="25dp" | 113 | android:layout_marginTop="25dp" |
114 | android:gravity="center" | 114 | android:gravity="center" |
115 | android:src="@drawable/walking_ic"/> | 115 | android:src="@drawable/walking_ic"/> |
116 | 116 | ||
117 | <TextView | 117 | <TextView |
118 | android:id="@+id/steps" | 118 | android:id="@+id/steps" |
119 | android:layout_width="match_parent" | 119 | android:layout_width="match_parent" |
120 | android:layout_height="wrap_content" | 120 | android:layout_height="wrap_content" |
121 | android:gravity="center" | 121 | android:gravity="center" |
122 | android:textSize="45sp" | 122 | android:textSize="45sp" |
123 | android:text="10.000" | 123 | android:text="10.000" |
124 | android:textColor="@color/white"/> | 124 | android:textColor="@color/white"/> |
125 | 125 | ||
126 | <TextView | 126 | <TextView |
127 | android:id="@+id/tv_smallStepGoal" | ||
127 | android:layout_width="wrap_content" | 128 | android:layout_width="wrap_content" |
128 | android:layout_height="wrap_content" | 129 | android:layout_height="wrap_content" |
129 | android:text="@string/pie_text_content1" | 130 | android:text="@string/pie_text_content1" |
130 | android:textSize="14sp" | 131 | android:textSize="14sp" |
131 | android:padding="4dp" | 132 | android:padding="4dp" |
132 | android:textColor="@color/white"/> | 133 | android:textColor="@color/white"/> |
133 | 134 | ||
134 | <TextView | 135 | <TextView |
135 | android:layout_width="wrap_content" | 136 | android:layout_width="wrap_content" |
136 | android:layout_height="wrap_content" | 137 | android:layout_height="wrap_content" |
137 | android:text="@string/pie_text_content2" | 138 | android:text="@string/pie_text_content2" |
138 | android:textSize="14sp" | 139 | android:textSize="14sp" |
139 | android:textColor="@color/white"/> | 140 | android:textColor="@color/white"/> |
140 | 141 | ||
141 | <TextView | 142 | <TextView |
142 | android:id="@+id/tv_smallRemain" | 143 | android:id="@+id/tv_smallRemain" |
143 | android:layout_width="wrap_content" | 144 | android:layout_width="wrap_content" |
144 | android:layout_height="wrap_content" | 145 | android:layout_height="wrap_content" |
145 | android:layout_below="@+id/steps" | 146 | android:layout_below="@+id/steps" |
146 | android:layout_centerHorizontal="true" | 147 | android:layout_centerHorizontal="true" |
147 | android:text="@string/pie_text_content3" | 148 | android:text="@string/pie_text_content3" |
148 | android:textSize="14sp" | 149 | android:textSize="14sp" |
149 | android:textColor="@color/white"/> | 150 | android:textColor="@color/white"/> |
150 | 151 | ||
151 | </LinearLayout> | 152 | </LinearLayout> |
152 | 153 | ||
153 | </RelativeLayout> | 154 | </RelativeLayout> |
154 | 155 | ||
155 | <LinearLayout | 156 | <LinearLayout |
156 | android:layout_width="0dp" | 157 | android:layout_width="0dp" |
157 | android:layout_height="wrap_content" | 158 | android:layout_height="wrap_content" |
158 | android:layout_weight="25" | 159 | android:layout_weight="25" |
159 | android:gravity="center" | 160 | android:gravity="center" |
160 | android:orientation="vertical"> | 161 | android:orientation="vertical"> |
161 | 162 | ||
162 | <TextView | 163 | <TextView |
163 | android:layout_width="wrap_content" | 164 | android:layout_width="wrap_content" |
164 | android:layout_height="wrap_content" | 165 | android:layout_height="wrap_content" |
165 | android:text="@string/goal_jp" | 166 | android:text="@string/goal_jp" |
166 | android:textColor="@color/white" | 167 | android:textColor="@color/white" |
167 | android:textSize="16sp" /> | 168 | android:textSize="16sp" /> |
168 | 169 | ||
169 | <TextView | 170 | <TextView |
170 | android:id="@+id/tv_stepGoal" | 171 | android:id="@+id/tv_stepGoal" |
171 | android:layout_width="wrap_content" | 172 | android:layout_width="wrap_content" |
172 | android:layout_height="wrap_content" | 173 | android:layout_height="wrap_content" |
173 | android:paddingLeft="10dp" | 174 | android:paddingLeft="10dp" |
174 | android:text="10000歩" | 175 | android:text="10000歩" |
175 | android:textColor="@color/white" | 176 | android:textColor="@color/white" |
176 | android:textSize="16sp" /> | 177 | android:textSize="16sp" /> |
177 | 178 | ||
178 | <TextView | 179 | <TextView |
179 | android:layout_width="wrap_content" | 180 | android:layout_width="wrap_content" |
180 | android:layout_height="wrap_content" | 181 | android:layout_height="wrap_content" |
181 | android:paddingTop="10dp" | 182 | android:paddingTop="10dp" |
182 | android:text="@string/remaining_number_step" | 183 | android:text="@string/remaining_number_step" |
183 | android:textColor="@color/white" | 184 | android:textColor="@color/white" |
184 | android:textSize="16sp" /> | 185 | android:textSize="16sp" /> |
185 | 186 | ||
186 | <TextView | 187 | <TextView |
187 | android:id="@+id/tv_stepRemain" | 188 | android:id="@+id/tv_stepRemain" |
188 | android:layout_width="wrap_content" | 189 | android:layout_width="wrap_content" |
189 | android:layout_height="wrap_content" | 190 | android:layout_height="wrap_content" |
190 | android:paddingLeft="10dp" | 191 | android:paddingLeft="10dp" |
191 | android:text="3000歩" | 192 | android:text="3000歩" |
192 | android:textColor="@color/white" | 193 | android:textColor="@color/white" |
193 | android:textSize="16sp" /> | 194 | android:textSize="16sp" /> |
194 | 195 | ||
195 | <TextView | 196 | <TextView |
196 | android:layout_width="wrap_content" | 197 | android:layout_width="wrap_content" |
197 | android:layout_height="wrap_content" | 198 | android:layout_height="wrap_content" |
198 | android:paddingTop="10dp" | 199 | android:paddingTop="10dp" |
199 | android:text="@string/achiverment_rate" | 200 | android:text="@string/achiverment_rate" |
200 | android:textColor="@color/white" | 201 | android:textColor="@color/white" |
201 | android:textSize="16sp" /> | 202 | android:textSize="16sp" /> |
202 | 203 | ||
203 | <TextView | 204 | <TextView |
204 | android:id="@+id/tv_stepRateDone" | 205 | android:id="@+id/tv_stepRateDone" |
205 | android:layout_width="wrap_content" | 206 | android:layout_width="wrap_content" |
206 | android:layout_height="wrap_content" | 207 | android:layout_height="wrap_content" |
207 | android:paddingLeft="10dp" | 208 | android:paddingLeft="10dp" |
208 | android:text="78%" | 209 | android:text="78%" |
209 | android:textColor="@color/white" | 210 | android:textColor="@color/white" |
210 | android:textSize="16sp" /> | 211 | android:textSize="16sp" /> |
211 | 212 | ||
212 | </LinearLayout> | 213 | </LinearLayout> |
213 | 214 | ||
214 | </LinearLayout> | 215 | </LinearLayout> |
215 | 216 | ||
216 | <LinearLayout | 217 | <LinearLayout |
217 | android:layout_width="match_parent" | 218 | android:layout_width="match_parent" |
218 | android:layout_height="wrap_content" | 219 | android:layout_height="wrap_content" |
219 | android:weightSum="100" | 220 | android:weightSum="100" |
220 | android:paddingTop="20dp" | 221 | android:paddingTop="20dp" |
221 | android:orientation="horizontal"> | 222 | android:orientation="horizontal"> |
222 | 223 | ||
223 | <LinearLayout | 224 | <LinearLayout |
224 | android:layout_width="0dp" | 225 | android:layout_width="0dp" |
225 | android:layout_height="wrap_content" | 226 | android:layout_height="wrap_content" |
226 | android:layout_weight="20" | 227 | android:layout_weight="20" |
227 | android:gravity="center" | 228 | android:gravity="center" |
228 | android:orientation="vertical"> | 229 | android:orientation="vertical"> |
229 | 230 | ||
230 | </LinearLayout> | 231 | </LinearLayout> |
231 | 232 | ||
232 | <LinearLayout | 233 | <LinearLayout |
233 | android:layout_width="0dp" | 234 | android:layout_width="0dp" |
234 | android:layout_height="wrap_content" | 235 | android:layout_height="wrap_content" |
235 | android:layout_weight="20" | 236 | android:layout_weight="20" |
236 | android:gravity="center" | 237 | android:gravity="center" |
237 | android:orientation="vertical"> | 238 | android:orientation="vertical"> |
238 | 239 | ||
239 | <ImageView | 240 | <ImageView |
240 | android:layout_width="wrap_content" | 241 | android:layout_width="wrap_content" |
241 | android:layout_height="wrap_content" | 242 | android:layout_height="wrap_content" |
242 | android:src="@drawable/category" | 243 | android:src="@drawable/category" |
243 | android:adjustViewBounds="true"/> | 244 | android:adjustViewBounds="true"/> |
244 | 245 | ||
245 | </LinearLayout> | 246 | </LinearLayout> |
246 | 247 | ||
247 | <LinearLayout | 248 | <LinearLayout |
248 | android:layout_width="0dp" | 249 | android:layout_width="0dp" |
249 | android:layout_height="wrap_content" | 250 | android:layout_height="wrap_content" |
250 | android:layout_weight="20" | 251 | android:layout_weight="20" |
251 | android:gravity="center" | 252 | android:gravity="center" |
252 | android:orientation="vertical"> | 253 | android:orientation="vertical"> |
253 | 254 | ||
254 | <TextView | 255 | <TextView |
255 | android:id="@+id/tv_distance" | 256 | android:id="@+id/tv_distance" |
256 | android:layout_width="wrap_content" | 257 | android:layout_width="wrap_content" |
257 | android:layout_height="wrap_content" | 258 | android:layout_height="wrap_content" |
258 | android:text="4.9" | 259 | android:text="4.9" |
259 | android:textColor="@color/white" | 260 | android:textColor="@color/white" |
260 | android:textSize="30sp" /> | 261 | android:textSize="30sp" /> |
261 | 262 | ||
262 | </LinearLayout> | 263 | </LinearLayout> |
263 | 264 | ||
264 | <LinearLayout | 265 | <LinearLayout |
265 | android:layout_width="0dp" | 266 | android:layout_width="0dp" |
266 | android:layout_height="wrap_content" | 267 | android:layout_height="wrap_content" |
267 | android:layout_weight="20" | 268 | android:layout_weight="20" |
268 | android:gravity="center" | 269 | android:gravity="center" |
269 | android:orientation="vertical"> | 270 | android:orientation="vertical"> |
270 | 271 | ||
271 | <TextView | 272 | <TextView |
273 | android:id="@+id/tv_time" | ||
272 | android:layout_width="wrap_content" | 274 | android:layout_width="wrap_content" |
273 | android:layout_height="wrap_content" | 275 | android:layout_height="wrap_content" |
274 | android:text="1:09" | 276 | android:text="1:09" |
275 | android:textColor="@color/white" | 277 | android:textColor="@color/white" |
276 | android:textSize="30sp" /> | 278 | android:textSize="30sp" /> |
277 | 279 | ||
278 | </LinearLayout> | 280 | </LinearLayout> |
279 | 281 | ||
280 | <LinearLayout | 282 | <LinearLayout |
281 | android:layout_width="0dp" | 283 | android:layout_width="0dp" |
282 | android:layout_height="wrap_content" | 284 | android:layout_height="wrap_content" |
283 | android:layout_weight="20" | 285 | android:layout_weight="20" |
284 | android:gravity="center" | 286 | android:gravity="center" |
285 | android:orientation="vertical"> | 287 | android:orientation="vertical"> |
286 | 288 | ||
287 | <ImageView | 289 | <ImageView |
288 | android:id="@+id/iv_play" | 290 | android:id="@+id/iv_play" |
289 | android:layout_width="@dimen/next_date_height" | 291 | android:layout_width="@dimen/next_date_height" |
290 | android:layout_height="wrap_content" | 292 | android:layout_height="wrap_content" |
291 | android:src="@drawable/pause" | 293 | android:src="@drawable/pause" |
292 | android:background="@color/white" | 294 | android:background="@color/white" |
293 | android:adjustViewBounds="true" | 295 | android:adjustViewBounds="true" |
294 | android:visibility="gone"/> | 296 | android:visibility="gone"/> |
295 | 297 | ||
296 | </LinearLayout> | 298 | </LinearLayout> |
297 | </LinearLayout> | 299 | </LinearLayout> |
298 | 300 | ||
299 | <LinearLayout | 301 | <LinearLayout |
300 | android:layout_width="match_parent" | 302 | android:layout_width="match_parent" |
301 | android:layout_height="wrap_content" | 303 | android:layout_height="wrap_content" |
302 | android:weightSum="100" | 304 | android:weightSum="100" |
303 | android:orientation="horizontal"> | 305 | android:orientation="horizontal"> |
304 | 306 | ||
305 | <LinearLayout | 307 | <LinearLayout |
306 | android:layout_width="0dp" | 308 | android:layout_width="0dp" |
307 | android:layout_height="wrap_content" | 309 | android:layout_height="wrap_content" |
308 | android:layout_weight="20" | 310 | android:layout_weight="20" |
309 | android:gravity="center" | 311 | android:gravity="center" |
310 | android:orientation="vertical"> | 312 | android:orientation="vertical"> |
311 | 313 | ||
312 | </LinearLayout> | 314 | </LinearLayout> |
313 | 315 | ||
314 | <LinearLayout | 316 | <LinearLayout |
315 | android:layout_width="0dp" | 317 | android:layout_width="0dp" |
316 | android:layout_height="wrap_content" | 318 | android:layout_height="wrap_content" |
317 | android:layout_weight="20" | 319 | android:layout_weight="20" |
318 | android:gravity="center" | 320 | android:gravity="center" |
319 | android:orientation="vertical"> | 321 | android:orientation="vertical"> |
320 | 322 | ||
321 | <TextView | 323 | <TextView |
322 | android:layout_width="wrap_content" | 324 | android:layout_width="wrap_content" |
323 | android:layout_height="wrap_content" | 325 | android:layout_height="wrap_content" |
324 | android:text="@string/carori" | 326 | android:text="@string/carori" |
325 | android:textColor="@color/white" | 327 | android:textColor="@color/white" |
326 | android:textSize="16sp" /> | 328 | android:textSize="16sp" /> |
327 | 329 | ||
328 | </LinearLayout> | 330 | </LinearLayout> |
329 | 331 | ||
330 | <LinearLayout | 332 | <LinearLayout |
331 | android:layout_width="0dp" | 333 | android:layout_width="0dp" |
332 | android:layout_height="wrap_content" | 334 | android:layout_height="wrap_content" |
333 | android:layout_weight="20" | 335 | android:layout_weight="20" |
334 | android:gravity="center" | 336 | android:gravity="center" |
335 | android:orientation="vertical"> | 337 | android:orientation="vertical"> |
336 | 338 | ||
337 | <TextView | 339 | <TextView |
338 | android:id="@+id/tv_remainingStep" | ||
339 | android:layout_width="wrap_content" | 340 | android:layout_width="wrap_content" |
340 | android:layout_height="wrap_content" | 341 | android:layout_height="wrap_content" |
341 | android:text="@string/km" | 342 | android:text="@string/km" |
342 | android:textColor="@color/white" | 343 | android:textColor="@color/white" |
343 | android:textSize="16sp" /> | 344 | android:textSize="16sp" /> |
344 | 345 | ||
345 | </LinearLayout> | 346 | </LinearLayout> |
346 | 347 | ||
347 | <LinearLayout | 348 | <LinearLayout |
348 | android:layout_width="0dp" | 349 | android:layout_width="0dp" |
349 | android:layout_height="wrap_content" | 350 | android:layout_height="wrap_content" |
350 | android:layout_weight="20" | 351 | android:layout_weight="20" |
351 | android:gravity="center" | 352 | android:gravity="center" |
352 | android:orientation="vertical"> | 353 | android:orientation="vertical"> |
353 | 354 | ||
354 | <TextView | 355 | <TextView |
355 | android:id="@+id/tv_time" | ||
356 | android:layout_width="wrap_content" | 356 | android:layout_width="wrap_content" |
357 | android:layout_height="wrap_content" | 357 | android:layout_height="wrap_content" |
358 | android:text="@string/time" | 358 | android:text="@string/time" |
359 | android:textColor="@color/white" | 359 | android:textColor="@color/white" |
360 | android:textSize="16sp" /> | 360 | android:textSize="16sp" /> |
361 | 361 | ||
362 | </LinearLayout> | 362 | </LinearLayout> |
363 | </LinearLayout> | 363 | </LinearLayout> |
364 | 364 | ||
365 | 365 | ||
366 | <LinearLayout | 366 | <LinearLayout |
367 | android:layout_width="match_parent" | 367 | android:layout_width="match_parent" |
368 | android:layout_height="120dp" | 368 | android:layout_height="120dp" |
369 | android:orientation="vertical" | 369 | android:orientation="vertical" |
370 | android:layout_marginTop="10dp"> | 370 | android:layout_marginTop="10dp"> |
371 | 371 | ||
372 | <!--<org.eazegraph.lib.charts.BarChart--> | 372 | <!--<org.eazegraph.lib.charts.BarChart--> |
373 | <!--xmlns:eaze="http://schemas.android.com/apk/res-auto"--> | 373 | <!--xmlns:eaze="http://schemas.android.com/apk/res-auto"--> |
374 | <!--android:id="@+id/bargraph"--> | 374 | <!--android:id="@+id/bargraph"--> |
375 | <!--android:layout_width="match_parent"--> | 375 | <!--android:layout_width="match_parent"--> |
376 | <!--android:layout_height="120dp"--> | 376 | <!--android:layout_height="120dp"--> |
377 | <!--android:layout_below="@+id/averageandtotaltext"--> | 377 | <!--android:layout_below="@+id/averageandtotaltext"--> |
378 | <!--eaze:egLegendHeight="0dp"--> | 378 | <!--eaze:egLegendHeight="0dp"--> |
379 | <!--eaze:egShowValues="false" />--> | 379 | <!--eaze:egShowValues="false" />--> |
380 | <com.github.mikephil.charting.charts.BarChart | 380 | <com.github.mikephil.charting.charts.BarChart |
381 | android:id="@+id/chart" | 381 | android:id="@+id/chart" |
382 | android:layout_width="match_parent" | 382 | android:layout_width="match_parent" |
383 | android:layout_height="match_parent" /> | 383 | android:layout_height="match_parent" /> |
384 | 384 | ||
385 | 385 | ||
386 | </LinearLayout> | 386 | </LinearLayout> |
387 | 387 | ||
388 | 388 | ||
389 | </LinearLayout> | 389 | </LinearLayout> |
390 | </ScrollView> | 390 | </ScrollView> |
391 | 391 | ||
392 | <include layout="@layout/type_step" /> | 392 | <include layout="@layout/type_step" /> |
app/src/main/res/values/strings.xml
1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> | 2 | <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> |
3 | <string name="app_id">de.j4velin.pedometer</string> | 3 | <string name="app_id">de.j4velin.pedometer</string> |
4 | <string name="app_name">Pedometer</string> | 4 | <string name="app_name">Pedometer</string> |
5 | <string name="sns_fragment">コミュニティー</string> | 5 | <string name="sns_fragment">コミュニティー</string> |
6 | <string name="goal">Goal</string> | 6 | <string name="goal">Goal</string> |
7 | <string name="step_size">Step size</string> | 7 | <string name="step_size">Step size</string> |
8 | <string name="about">About</string> | 8 | <string name="about">About</string> |
9 | <string name="account">Account</string> | 9 | <string name="account">Account</string> |
10 | <string name="goal_summary">Current goal: %,d steps</string> | 10 | <string name="goal_summary">Current goal: %,d steps</string> |
11 | <string name="step_size_summary">Current step size: %1$.2f %2$s</string> | 11 | <string name="step_size_summary">Current step size: %1$.2f %2$s</string> |
12 | <string name="sign_in">Sign in with your Google account to use the Achievements and Leaderboards features</string> | 12 | <string name="sign_in">Sign in with your Google account to use the Achievements and Leaderboards features</string> |
13 | <string name="signed_in">Signed in as %s</string> | 13 | <string name="signed_in">Signed in as %s</string> |
14 | <string name="export_summary">Save your data in a .csv file</string> | 14 | <string name="export_summary">Save your data in a .csv file</string> |
15 | <string name="export_title">Export/Backup</string> | 15 | <string name="export_title">Export/Backup</string> |
16 | <string name="import_summary">Imports previously saved data</string> | 16 | <string name="import_summary">Imports previously saved data</string> |
17 | <string name="import_title">Import/Restore</string> | 17 | <string name="import_title">Import/Restore</string> |
18 | <string name="notification">Show notification</string> | 18 | <string name="notification">Show notification</string> |
19 | <string name="set_goal">Set goal</string> | 19 | <string name="set_goal">Set goal</string> |
20 | <string name="set_step_size">Set step size</string> | 20 | <string name="set_step_size">Set step size</string> |
21 | <string name="sign_out">Sign out</string> | 21 | <string name="sign_out">Sign out</string> |
22 | <string name="file_cant_read">Error: %s can not be read</string> | 22 | <string name="file_cant_read">Error: %s can not be read</string> |
23 | <string name="error_file">Error accessing the file: %s</string> | 23 | <string name="error_file">Error accessing the file: %s</string> |
24 | <string name="error_external_storage_not_available">Error: External storage not available</string> | 24 | <string name="error_external_storage_not_available">Error: External storage not available</string> |
25 | <string name="data_saved">Data saved in %s</string> | 25 | <string name="data_saved">Data saved in %s</string> |
26 | <string name="entries_imported">%d entries imported</string> | 26 | <string name="entries_imported">%d entries imported</string> |
27 | <string name="entries_ignored">%d entries were ignored as they did not contain valid data</string> | 27 | <string name="entries_ignored">%d entries were ignored as they did not contain valid data</string> |
28 | <string name="entries_skipped">%d entries were skipped as there already exists data for these days</string> | 28 | <string name="entries_skipped">%d entries were skipped as there already exists data for these days</string> |
29 | <string name="sign_in_necessary">Sign in necessary</string> | 29 | <string name="sign_in_necessary">Sign in necessary</string> |
30 | <string name="please_sign_in_with_your_google_account">Please sign in with your Google+ account to use this feature.</string> | 30 | <string name="please_sign_in_with_your_google_account">Please sign in with your Google+ account to use this feature.</string> |
31 | <string name="steps">steps</string> | 31 | <string name="steps">steps</string> |
32 | <string name="text_color">Text color:</string> | 32 | <string name="text_color">Text color:</string> |
33 | <string name="background_color">Background color:</string> | 33 | <string name="background_color">Background color:</string> |
34 | <string name="settings">Settings</string> | 34 | <string name="settings">Settings</string> |
35 | <string name="achievements">Achievements</string> | 35 | <string name="achievements">Achievements</string> |
36 | <string name="leaderboard">Leaderboard</string> | 36 | <string name="leaderboard">Leaderboard</string> |
37 | <string name="faq">FAQ</string> | 37 | <string name="faq">FAQ</string> |
38 | <string name="goal_reached_notification">Goal reached! %s steps and counting</string> | 38 | <string name="goal_reached_notification">Goal reached! %s steps and counting</string> |
39 | <string name="notification_text">%s steps to go</string> | 39 | <string name="notification_text">%s steps to go</string> |
40 | <string name="total">Total</string> | 40 | <string name="total">Total</string> |
41 | <string name="notification_title">Pedometer is counting</string> | 41 | <string name="notification_title">Pedometer is counting</string> |
42 | <string name="your_progress_will_be_shown_here_soon">Your progress will be shown here soon</string> | 42 | <string name="your_progress_will_be_shown_here_soon">Your progress will be shown here soon</string> |
43 | <string name="average">Average</string> | 43 | <string name="average">Average</string> |
44 | <string name="record">Record</string> | 44 | <string name="record">Record</string> |
45 | <string name="total_last_7_days">Total last 7 days</string> | 45 | <string name="total_last_7_days">Total last 7 days</string> |
46 | <string name="average_last_7_days">Average last 7 days</string> | 46 | <string name="average_last_7_days">Average last 7 days</string> |
47 | <string name="total_this_month">Total this month</string> | 47 | <string name="total_this_month">Total this month</string> |
48 | <string name="average_this_month">Average this month</string> | 48 | <string name="average_this_month">Average this month</string> |
49 | <string name="file_already_exists">File already exists. Are you sure you want to overwrite it?</string> | 49 | <string name="file_already_exists">File already exists. Are you sure you want to overwrite it?</string> |
50 | <string name="about_text_links">This app was created by Thomas Hoffmann (<a href="https://www.j4velin.de">www.j4velin.de</a>) and uses <a href="https://github.com/blackfizz/EazeGraph">EazeGraph</a> by Paul Cech and <a href="https://github.com/attenzione/android-ColorPickerPreference">ColorPickerPreference</a> by Sergey Margaritov.\n\nPedometer is open source! Get the code and the full list of contributors from <a href="https://github.com/j4velin/Pedometer">GitHub</a>.\n\n</string> | 50 | <string name="about_text_links">This app was created by Thomas Hoffmann (<a href="https://www.j4velin.de">www.j4velin.de</a>) and uses <a href="https://github.com/blackfizz/EazeGraph">EazeGraph</a> by Paul Cech and <a href="https://github.com/attenzione/android-ColorPickerPreference">ColorPickerPreference</a> by Sergey Margaritov.\n\nPedometer is open source! Get the code and the full list of contributors from <a href="https://github.com/j4velin/Pedometer">GitHub</a>.\n\n</string> |
51 | <string name="about_app_version">App version: %s</string> | 51 | <string name="about_app_version">App version: %s</string> |
52 | <string name="since">Since %s</string> | 52 | <string name="since">Since %s</string> |
53 | <string name="start">Start</string> | 53 | <string name="start">Start</string> |
54 | <string name="stop">Stop</string> | 54 | <string name="stop">Stop</string> |
55 | <string name="close">close</string> | 55 | <string name="close">close</string> |
56 | <string name="no_split_active">No split counter active. Click start to count the steps from now on</string> | 56 | <string name="no_split_active">No split counter active. Click start to count the steps from now on</string> |
57 | <string name="split_count">Split count</string> | 57 | <string name="split_count">Split count</string> |
58 | <string name="pause">Pause</string> | 58 | <string name="pause">Pause</string> |
59 | <string name="resume">Resume</string> | 59 | <string name="resume">Resume</string> |
60 | <string name="ispaused">Pedometer is paused</string> | 60 | <string name="ispaused">Pedometer is paused</string> |
61 | <string name="pause_on_power_title">Pause while charging</string> | 61 | <string name="pause_on_power_title">Pause while charging</string> |
62 | <string name="pause_on_power_summary">Pause Pedometer while device is charging</string> | 62 | <string name="pause_on_power_summary">Pause Pedometer while device is charging</string> |
63 | <string name="no_sensor">Sensor not found</string> | 63 | <string name="no_sensor">Sensor not found</string> |
64 | <string name="no_sensor_explain">This app requires a dedicated hardware step sensor - which your device does not have. This app won\'t run on your device.</string> | 64 | <string name="no_sensor_explain">This app requires a dedicated hardware step sensor - which your device does not have. This app won\'t run on your device.</string> |
65 | <string name="setting">設定</string> | 65 | <string name="setting">設定</string> |
66 | <string name="profile_change">プロフェイール変更</string> | 66 | <string name="profile_change">プロフェイール変更</string> |
67 | <string name="step">step</string> | 67 | <string name="step">step</string> |
68 | <string name="remaining_number_step">残歩数</string> | 68 | <string name="remaining_number_step">残歩数</string> |
69 | <string name="achiverment_rate">達成率</string> | 69 | <string name="achiverment_rate">達成率</string> |
70 | <string name="notify">お知らせ</string> | 70 | <string name="notify">お知らせ</string> |
71 | <string name="data">●●●●●●●</string> | 71 | <string name="data">●●●●●●●</string> |
72 | <string name="bike">BIKE</string> | 72 | <string name="bike">BIKE</string> |
73 | <string name="walking">WALKING</string> | 73 | <string name="walking">WALKING</string> |
74 | <string name="running">RUNNING</string> | 74 | <string name="running">RUNNING</string> |
75 | <string name="home">HOME</string> | 75 | <string name="home">HOME</string> |
76 | <string name="today">TODAY</string> | 76 | <string name="today">TODAY</string> |
77 | <string name="date">日付</string> | 77 | <string name="date">日付</string> |
78 | <string name="today_jp">今日</string> | 78 | <string name="today_jp">今日</string> |
79 | <string name="history">履歴</string> | 79 | <string name="history">履歴</string> |
80 | <string name="ranking">ランキング</string> | 80 | <string name="ranking">ランキング</string> |
81 | <string name="map">MAP</string> | 81 | <string name="map">MAP</string> |
82 | <string name="sns">SNS</string> | 82 | <string name="sns">SNS</string> |
83 | <string name="step_further">目標まであと %$d 歩です</string> | 83 | <string name="step_further">目標まであと %$d 歩です</string> |
84 | <string name="goal_jp">目標</string> | 84 | <string name="goal_jp">目標</string> |
85 | <string name="step_jp">歩</string> | 85 | <string name="step_jp">歩</string> |
86 | <string name="km">KM</string> | 86 | <string name="km">KM</string> |
87 | <string name="time">時間</string> | 87 | <string name="time">時間</string> |
88 | <string name="carori">カロリー</string> | 88 | <string name="carori">カロリー</string> |
89 | 89 | ||
90 | <string name="pie_text_content1">/10.000</string> | 90 | <string name="pie_text_content1">/10.000</string> |
91 | <string name="pie_text_content2">目標まであと</string> | 91 | <string name="pie_text_content2">目標まであと</string> |
92 | <string name="pie_text_content3">3487歩です</string> | 92 | <string name="pie_text_content3">3487歩です</string> |
93 | <string name="pie_text_content3a">%d歩です</string> | 93 | <string name="pie_text_content3a">%d歩です</string> |
94 | <string name="percent">%s%</string> | 94 | <string name="percent">%s%</string> |
95 | <string name="percent_unit">%s%</string> | 95 | <string name="percent_unit">%s%</string> |
96 | <string name="step_unit">%d step</string> | 96 | <string name="step_unit">%d step</string> |
97 | <string name="step_unit_1">%d stepです</string> | 97 | <string name="step_unit_1">%d stepです</string> |
98 | <string name="kcal_unit">%s kcal</string> | 98 | <string name="kcal_unit">%s kcal</string> |
99 | <string name="distance_unit">%s KM</string> | 99 | <string name="distance_unit">%s KM</string> |
100 | <string name="time_unit">%s 時間</string> | 100 | <string name="time_unit">%s 時間</string> |
101 | 101 | ||
102 | <string name="login">ライフログ</string> | 102 | <string name="login">ライフログ</string> |
103 | <string name="email">メールアドレス</string> | 103 | <string name="email">メールアドレス</string> |
104 | <string name="password">パスワード</string> | 104 | <string name="password">パスワード</string> |
105 | <string name="forget_pass"><u>パスワードをお忘れの方</u></string> | 105 | <string name="forget_pass"><u>パスワードをお忘れの方</u></string> |
106 | <string name="register">登録がまだの方</string> | 106 | <string name="register">登録がまだの方</string> |
107 | <string name="register_button">新規登録</string> | 107 | <string name="register_button">新規登録</string> |
108 | <string name="username">ユーザー名</string> | 108 | <string name="username">ユーザー名</string> |
109 | <string name="name">氏名</string> | 109 | <string name="name">氏名</string> |
110 | <string name="nickname">ニックネーム</string> | 110 | <string name="nickname">ニックネーム</string> |
111 | <string name="confirm_pass">確認用パスワード</string> | 111 | <string name="confirm_pass">確認用パスワード</string> |
112 | <string name="sex">性別</string> | 112 | <string name="sex">性別</string> |
113 | <string name="birthday">生年月日</string> | 113 | <string name="birthday">生年月日</string> |
114 | <string name="height">身長</string> | 114 | <string name="height">身長</string> |
115 | <string name="weight">体重</string> | 115 | <string name="weight">体重</string> |
116 | <string name="level_active">1日の身体活動レベル</string> | 116 | <string name="level_active">1日の身体活動レベル</string> |
117 | <string name="low">低い</string> | 117 | <string name="low">低い</string> |
118 | <string name="usually">普通</string> | 118 | <string name="usually">普通</string> |
119 | <string name="hight">高い</string> | 119 | <string name="hight">高い</string> |
120 | <string name="body_fat_percent">体脂肪率</string> | 120 | <string name="body_fat_percent">体脂肪率</string> |
121 | <string name="address">お住いの地域</string> | 121 | <string name="address">お住いの地域</string> |
122 | <string name="comment">コメント</string> | 122 | <string name="comment">コメント</string> |
123 | <string name="member_registration">会員登録</string> | 123 | <string name="member_registration">会員登録</string> |
124 | <string name="send_push_notify">プッシュ通知を送信します。\nよろしいでしょうか?</string> | 124 | <string name="send_push_notify">プッシュ通知を送信します。\nよろしいでしょうか?</string> |
125 | <string name="not_allowed">許可しない</string> | 125 | <string name="not_allowed">許可しない</string> |
126 | <string name="allowed">許可</string> | 126 | <string name="allowed">許可</string> |
127 | <string name="please_select">選択してください</string> | 127 | <string name="please_select">選択してください</string> |
128 | 128 | ||
129 | <string name="prefecture">都道府県</string> | 129 | <string name="prefecture">都道府県</string> |
130 | 130 | ||
131 | <string name="login_error_title">Login error</string> | 131 | <string name="login_error_title">ログインエラー</string> |
132 | <string name="login_error">Can not login</string> | 132 | <string name="login_error">ログインできません。</string> |
133 | <string name="ok">OK</string> | 133 | <string name="ok">OK</string> |
134 | <string name="error_title">Error</string> | 134 | <string name="error_title">エラー</string> |
135 | <string name="password_is_null">Password is nulll</string> | 135 | <string name="password_is_null">パスワードはnullです。</string> |
136 | <string name="account_is_null">Email is null</string> | 136 | <string name="account_is_null">メールはヌルです。</string> |
137 | <string name="uploading">Uploading</string> | 137 | <string name="uploading">アップロード中</string> |
138 | <string name="register_err">Register error</string> | 138 | <string name="register_err">レジスタエラー</string> |
139 | <string name="err_exception">Error exception</string> | 139 | <string name="err_exception">エラー例外</string> |
140 | <string name="cm">cm</string> | 140 | <string name="cm">cm</string> |
141 | <string name="kg">kg</string> | 141 | <string name="kg">kg</string> |
142 | <string name="percen">%</string> | 142 | <string name="percen">%</string> |
143 | <string name="waite_some_minute">Please waite some minute</string> | 143 | <string name="waite_some_minute">しばらくお待ちください。</string> |
144 | <string name="request_pass_error">Can not sent request get password</string> | 144 | <string name="request_pass_error">要求を送信できないため、パスワードを取得できません。</string> |
145 | <string name="password_not_send">Password have not send, please try it again</string> | 145 | <string name="password_not_send">パスワードが送信されていません。もう一度お試しください。</string> |
146 | <string name="password_have_send">Password have send, please check mail</string> | 146 | <string name="password_have_send">パスワードが送られてきました、メールをチェックしてください。</string> |
147 | <string name="register_success">Register success</string> | 147 | <string name="register_success">登録成功</string> |
148 | 148 | ||
149 | <!-- message error register --> | 149 | <!-- message error register --> |
150 | <string name="username_null">Username is null</string> | 150 | <string name="username_null">ユーザー名はnullです。</string> |
151 | <string name="name_null">Name is null</string> | 151 | <string name="name_null">名前はnullです。</string> |
152 | <string name="nickname_null">Nickname is null</string> | 152 | <string name="nickname_null">ニックネームはnullです。</string> |
153 | <string name="mail_null">Email is null</string> | 153 | <string name="mail_null">メールはヌルです。</string> |
154 | <string name="mail_invalid">Email invalid</string> | 154 | <string name="mail_invalid">電子メールが無効です。</string> |
155 | <string name="password_null">Password is null</string> | 155 | <string name="password_null">パスワードはnullです。</string> |
156 | <string name="confirm_pass_null">Confirm password is null</string> | 156 | <string name="confirm_pass_null">パスワードの確認はnullです。</string> |
157 | <string name="password_less_6">Password length is more than 6 character</string> | 157 | <string name="password_less_6">パスワードの長さは6文字以上です。</string> |
158 | <string name="confirm_pass_wrong">Confirm password is wrong</string> | 158 | <string name="confirm_pass_wrong">パスワードの確認が間違っています。</string> |
159 | <string name="sex_not_select">Sex is not select</string> | 159 | <string name="sex_not_select">性別は選択されていません。</string> |
160 | <string name="birthday_not_select">Birthday is not select</string> | 160 | <string name="birthday_not_select">誕生日は選択されていません。</string> |
161 | <string name="height_null">Hight is null</string> | 161 | <string name="height_null">Hightはnullです。</string> |
162 | <string name="weight_null">Weight is null</string> | 162 | <string name="weight_null">重量はnullです。</string> |
163 | <string name="body_fat_percent_null">Body fat percent is null</string> | 163 | <string name="body_fat_percent_null">体脂肪率はnullです。</string> |
164 | <string name="comment_null">Comment is null</string> | 164 | <string name="comment_null">コメントはnullです。</string> |
165 | <string name="level_not_select">Level is not select</string> | 165 | <string name="level_not_select">レベルは選択されていません。</string> |
166 | <string name="province_not_select">Province is not select</string> | 166 | <string name="province_not_select">州は選択されていません。</string> |
167 | 167 | ||
168 | <string name="please_input_email">Please input email</string> | 168 | <string name="please_input_email">メールを入力してください。</string> |
169 | <string name="please_input_confirm">Please input confirm code</string> | 169 | <string name="please_input_confirm">確認コードを入力してください。</string> |
170 | <string name="send_confirm">Send confirm</string> | 170 | <string name="send_confirm">送信確認</string> |
171 | 171 | ||
172 | <!--string relationship--> | 172 | <!--string relationship--> |
173 | <string name="male">男</string> | 173 | <string name="male">男</string> |
174 | <string name="female">女</string> | 174 | <string name="female">女</string> |
175 | 175 | ||
176 | <!--string host family job --> | 176 | <!--string host family job --> |
177 | <string name="job1">上場会社役員</string> | 177 | <string name="job1">上場会社役員</string> |
178 | <string name="job2">非上場会社役員</string> | 178 | <string name="job2">非上場会社役員</string> |
179 | <string name="job3">上場会社幹部社員</string> | 179 | <string name="job3">上場会社幹部社員</string> |
180 | <string name="job4">上場会社社員</string> | 180 | <string name="job4">上場会社社員</string> |
181 | <string name="job5">非上場会社社員</string> | 181 | <string name="job5">非上場会社社員</string> |
182 | <string name="job6">団体の役員</string> | 182 | <string name="job6">団体の役員</string> |
183 | <string name="job7">団体の職員</string> | 183 | <string name="job7">団体の職員</string> |
184 | <string name="job8">国家公務員</string> | 184 | <string name="job8">国家公務員</string> |
185 | <string name="job9">地方公務員</string> | 185 | <string name="job9">地方公務員</string> |
186 | <string name="job10">農林水産業</string> | 186 | <string name="job10">農林水産業</string> |
187 | <string name="job11">医師その他医療関係</string> | 187 | <string name="job11">医師その他医療関係</string> |
188 | <string name="job12">弁護士・会計士・税理士</string> | 188 | <string name="job12">弁護士・会計士・税理士</string> |
189 | <string name="job13">教職員</string> | 189 | <string name="job13">教職員</string> |
190 | <string name="job14">自営業</string> | 190 | <string name="job14">自営業</string> |
191 | <string name="job15">パート・アルバイト</string> | 191 | <string name="job15">パート・アルバイト</string> |
192 | <string name="job16">主婦</string> | 192 | <string name="job16">主婦</string> |
193 | <string name="job17">学生</string> | 193 | <string name="job17">学生</string> |
194 | <string name="job18">無職</string> | 194 | <string name="job18">無職</string> |
195 | <string name="job19">その他</string> | 195 | <string name="job19">その他</string> |
196 | 196 | ||
197 | 197 | ||
198 | <string name="tokutei_err_m">特定口座の開設有無をお選びください。</string> | 198 | <string name="tokutei_err_m">特定口座の開設有無をお選びください。</string> |
199 | 199 | ||
200 | <!--SNS screen--> | 200 | <!--SNS screen--> |
201 | <string name="error_empty_text">Empty</string> | 201 | <string name="error_empty_text">Empty</string> |
202 | <string name="msg_create_group_title">Create group</string> | 202 | <string name="msg_create_group_title">Create group</string> |
203 | <string name="msg_join_group_title">Join group</string> | 203 | <string name="msg_join_group_title">Join group</string> |
204 | <string name="msg_create_group_success">Success</string> | 204 | <string name="msg_create_group_success">Success</string> |
205 | <string name="msg_create_group_fail">Fail</string> | 205 | <string name="msg_create_group_fail">Fail</string> |
206 | <string name="msg_ok">OK</string> | 206 | <string name="msg_ok">OK</string> |
207 | <string name="sns_btn_view_member_title">メンバーを見る</string> | 207 | <string name="sns_btn_view_member_title">メンバーを見る</string> |
208 | <string name="sns_btn_view_tweet_title">ツイートを見る</string> | 208 | <string name="sns_btn_view_tweet_title">ツイートを見る</string> |
209 | <!-- City list --> | 209 | <!-- City list --> |
210 | <string name="please_search">検索してください</string> | 210 | <string name="please_search">検索してください</string> |
211 | 211 | ||
212 | <string name="city_item_1">北海道</string> | 212 | <string name="city_item_1">北海道</string> |
213 | <string name="city_item_2">青森県</string> | 213 | <string name="city_item_2">青森県</string> |
214 | <string name="city_item_3">岩手県</string> | 214 | <string name="city_item_3">岩手県</string> |
215 | <string name="city_item_4">宮城県</string> | 215 | <string name="city_item_4">宮城県</string> |
216 | <string name="city_item_5">秋田県</string> | 216 | <string name="city_item_5">秋田県</string> |
217 | <string name="city_item_6">山形県</string> | 217 | <string name="city_item_6">山形県</string> |
218 | <string name="city_item_7">福島県</string> | 218 | <string name="city_item_7">福島県</string> |
219 | <string name="city_item_8">茨城県</string> | 219 | <string name="city_item_8">茨城県</string> |
220 | <string name="city_item_9">栃木県</string> | 220 | <string name="city_item_9">栃木県</string> |
221 | <string name="city_item_10">群馬県</string> | 221 | <string name="city_item_10">群馬県</string> |
222 | <string name="city_item_11">埼玉県</string> | 222 | <string name="city_item_11">埼玉県</string> |
223 | <string name="city_item_12">千葉県</string> | 223 | <string name="city_item_12">千葉県</string> |
224 | <string name="city_item_13">東京都</string> | 224 | <string name="city_item_13">東京都</string> |
225 | <string name="city_item_14">神奈川県</string> | 225 | <string name="city_item_14">神奈川県</string> |
226 | <string name="city_item_15">新潟県</string> | 226 | <string name="city_item_15">新潟県</string> |
227 | <string name="city_item_16">富山県</string> | 227 | <string name="city_item_16">富山県</string> |
228 | <string name="city_item_17">石川県</string> | 228 | <string name="city_item_17">石川県</string> |
229 | <string name="city_item_18">福井県</string> | 229 | <string name="city_item_18">福井県</string> |
230 | <string name="city_item_19">山梨県</string> | 230 | <string name="city_item_19">山梨県</string> |
231 | <string name="city_item_20">長野県</string> | 231 | <string name="city_item_20">長野県</string> |
232 | <string name="city_item_21">岐阜県</string> | 232 | <string name="city_item_21">岐阜県</string> |
233 | <string name="city_item_22">静岡県</string> | 233 | <string name="city_item_22">静岡県</string> |
234 | <string name="city_item_23">愛知県</string> | 234 | <string name="city_item_23">愛知県</string> |
235 | <string name="city_item_24">三重県</string> | 235 | <string name="city_item_24">三重県</string> |
236 | <string name="city_item_25">滋賀県</string> | 236 | <string name="city_item_25">滋賀県</string> |
237 | <string name="city_item_26">京都府</string> | 237 | <string name="city_item_26">京都府</string> |
238 | <string name="city_item_27">大阪府</string> | 238 | <string name="city_item_27">大阪府</string> |
239 | <string name="city_item_28">兵庫県</string> | 239 | <string name="city_item_28">兵庫県</string> |
240 | <string name="city_item_29">奈良県</string> | 240 | <string name="city_item_29">奈良県</string> |
241 | <string name="city_item_30">和歌山県</string> | 241 | <string name="city_item_30">和歌山県</string> |
242 | <string name="city_item_31">鳥取県</string> | 242 | <string name="city_item_31">鳥取県</string> |
243 | <string name="city_item_32">島根県</string> | 243 | <string name="city_item_32">島根県</string> |
244 | <string name="city_item_33">岡山県</string> | 244 | <string name="city_item_33">岡山県</string> |
245 | <string name="city_item_34">広島県</string> | 245 | <string name="city_item_34">広島県</string> |
246 | <string name="city_item_35">山口県</string> | 246 | <string name="city_item_35">山口県</string> |
247 | <string name="city_item_36">徳島県</string> | 247 | <string name="city_item_36">徳島県</string> |
248 | <string name="city_item_37">香川県</string> | 248 | <string name="city_item_37">香川県</string> |
249 | <string name="city_item_38">愛媛県</string> | 249 | <string name="city_item_38">愛媛県</string> |
250 | <string name="city_item_39">高知県</string> | 250 | <string name="city_item_39">高知県</string> |
251 | <string name="city_item_40">福岡県</string> | 251 | <string name="city_item_40">福岡県</string> |
252 | <string name="city_item_41">佐賀県</string> | 252 | <string name="city_item_41">佐賀県</string> |
253 | <string name="city_item_42">長崎県</string> | 253 | <string name="city_item_42">長崎県</string> |
254 | <string name="city_item_43">熊本県</string> | 254 | <string name="city_item_43">熊本県</string> |
255 | <string name="city_item_44">大分県</string> | 255 | <string name="city_item_44">大分県</string> |
256 | <string name="city_item_45">宮崎県</string> | 256 | <string name="city_item_45">宮崎県</string> |
257 | <string name="city_item_46">鹿児島県</string> | 257 | <string name="city_item_46">鹿児島県</string> |
258 | <string name="city_item_47">沖縄県</string> | 258 | <string name="city_item_47">沖縄県</string> |
259 | 259 | ||
260 | <string name="one_day">1日</string> | 260 | <string name="one_day">1日</string> |
261 | <string name="one_week">1週間</string> | 261 | <string name="one_week">1週間</string> |
262 | <string name="one_month">1ヶ月</string> | 262 | <string name="one_month">1ヶ月</string> |
263 | <string name="three_month">3ヶ月</string> | 263 | <string name="three_month">3ヶ月</string> |
264 | <string name="six_month">6ヶ月</string> | 264 | <string name="six_month">6ヶ月</string> |
265 | <string name="calo_consume">消費カロリー</string> | 265 | <string name="calo_consume">消費カロリー</string> |
266 | <string name="distance">距離</string> | 266 | <string name="distance">距離</string> |
267 | 267 | ||
268 | <string name="sunday">日曜日</string> | 268 | <string name="sunday">日曜日</string> |
269 | <string name="monday">月曜日</string> | 269 | <string name="monday">月曜日</string> |
270 | <string name="tuesday">火曜日</string> | 270 | <string name="tuesday">火曜日</string> |
271 | <string name="wednesday">水曜日</string> | 271 | <string name="wednesday">水曜日</string> |
272 | <string name="thursday">木曜日</string> | 272 | <string name="thursday">木曜日</string> |
273 | <string name="friday">金曜日</string> | 273 | <string name="friday">金曜日</string> |
274 | <string name="saturday">土曜日</string> | 274 | <string name="saturday">土曜日</string> |
275 | 275 | ||
276 | <string name="facebook">facebook</string> | 276 | <string name="facebook">facebook</string> |
277 | <string name="twitter">twitter</string> | 277 | <string name="twitter">twitter</string> |
278 | <string name="line">line</string> | 278 | <string name="line">line</string> |
279 | <string name="mail">メール</string> | 279 | <string name="mail">メール</string> |
280 | <string name="other">その他</string> | 280 | <string name="other">その他</string> |
281 | <string name="kcal">kcal</string> | 281 | <string name="kcal">kcal</string> |
282 | <string name="favorable">好調</string> | 282 | <string name="favorable">好調</string> |
283 | <string name="little_more">もう少し</string> | 283 | <string name="little_more">もう少し</string> |
284 | 284 | ||
285 | <string name="mon">(月)</string> | 285 | <string name="mon">(月)</string> |
286 | <string name="tues">(火)</string> | 286 | <string name="tues">(火)</string> |
287 | <string name="wed">(水)</string> | 287 | <string name="wed">(水)</string> |
288 | <string name="thus">(木)</string> | 288 | <string name="thus">(木)</string> |
289 | <string name="fir">(金)</string> | 289 | <string name="fir">(金)</string> |
290 | <string name="sat">(土)</string> | 290 | <string name="sat">(土)</string> |
291 | <string name="sun">(日)</string> | 291 | <string name="sun">(日)</string> |
292 | 292 | ||
293 | <string name="weather">天気</string> | 293 | <string name="weather">天気</string> |
294 | 294 | ||
295 | <string name="calo_consumed">消費カロリー</string> | 295 | <string name="calo_consumed">消費カロリー</string> |
296 | <string name="can_not_get_data">Can not get data</string> | 296 | <string name="can_not_get_data">データを取得できません。</string> |
297 | <string name="loading">読み込み中</string> | 297 | <string name="loading">読み込み中</string> |
298 | |||
299 | <string name="sensor_available">カウントセンサーが使用できません。</string> | ||
298 | 300 | ||
299 | </resources> | 301 | </resources> |