Commit 54e5fcd562171a4e4441eb6eb480c2f5a558835f

Authored by chudinhbka@gmail.com
1 parent c25bb19fce
Exists in master and in 1 other branch development

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
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>