Commit 5520a4b27df178a212e405aeaad6b3bbda41cd3d

Authored by Dinh Chu
1 parent 13594f58ae
Exists in master and in 1 other branch development

update

Showing 17 changed files with 401 additions and 88 deletions Inline Diff

1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="EntryPointsManager">
4 <entry_points version="2.0" />
5 </component>
6 <component name="NullableNotNullManager"> 3 <component name="NullableNotNullManager">
7 <option name="myDefaultNullable" value="android.support.annotation.Nullable" /> 4 <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
8 <option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> 5 <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
9 <option name="myNullables"> 6 <option name="myNullables">
10 <value> 7 <value>
11 <list size="4"> 8 <list size="4">
12 <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> 9 <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
13 <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> 10 <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
14 <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> 11 <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
15 <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> 12 <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
16 </list> 13 </list>
17 </value> 14 </value>
18 </option> 15 </option>
19 <option name="myNotNulls"> 16 <option name="myNotNulls">
20 <value> 17 <value>
21 <list size="4"> 18 <list size="4">
22 <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> 19 <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
23 <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> 20 <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
24 <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> 21 <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
25 <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> 22 <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
26 </list> 23 </list>
27 </value> 24 </value>
28 </option> 25 </option>
29 </component> 26 </component>
30 <component name="ProjectLevelVcsManager" settingsEditedManually="false"> 27 <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
31 <OptionsSetting value="true" id="Add" />
32 <OptionsSetting value="true" id="Remove" />
33 <OptionsSetting value="true" id="Checkout" />
34 <OptionsSetting value="true" id="Update" />
35 <OptionsSetting value="true" id="Status" />
36 <OptionsSetting value="true" id="Edit" />
37 <ConfirmationsSetting value="0" id="Add" />
38 <ConfirmationsSetting value="0" id="Remove" />
39 </component>
40 <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
41 <output url="file://$PROJECT_DIR$/build/classes" /> 28 <output url="file://$PROJECT_DIR$/build/classes" />
42 </component> 29 </component>
43 <component name="ProjectType"> 30 <component name="ProjectType">
44 <option name="id" value="Android" /> 31 <option name="id" value="Android" />
45 </component> 32 </component>
46 </project> 33 </project>
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="ProjectModuleManager"> 3 <component name="ProjectModuleManager">
4 <modules> 4 <modules>
5 <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> 5 <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
6 <module fileurl="file://$PROJECT_DIR$/lifelog_android.iml" filepath="$PROJECT_DIR$/lifelog_android.iml" /> 6 <module fileurl="file://$PROJECT_DIR$/lifelog_android.iml" filepath="$PROJECT_DIR$/lifelog_android.iml" />
7 <module fileurl="file://$PROJECT_DIR$/lifelogpedometer.iml" filepath="$PROJECT_DIR$/lifelogpedometer.iml" /> 7 <module fileurl="file://D:\Project\Git\lifelog_android\lifelogpedometer.iml" filepath="D:\Project\Git\lifelog_android\lifelogpedometer.iml" />
8 </modules> 8 </modules>
9 </component> 9 </component>
10 </project> 10 </project>
1 apply plugin: 'com.android.application' 1 apply plugin: 'com.android.application'
2 2
3 android { 3 android {
4 compileSdkVersion 25 4 compileSdkVersion 25
5 buildToolsVersion "25.0.3" 5 buildToolsVersion '26.0.2'
6 defaultConfig { 6 defaultConfig {
7 applicationId "com.dinhcv.lifelogpedometer" 7 applicationId "com.dinhcv.lifelogpedometer"
8 minSdkVersion 19 8 minSdkVersion 19
9 targetSdkVersion 25 9 targetSdkVersion 25
10 versionCode 1 10 versionCode 1
11 versionName "1.0" 11 versionName "1.0"
12 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13 // Enabling multidex support. 13 // Enabling multidex support.
14 multiDexEnabled true 14 multiDexEnabled true
15 } 15 }
16
17 flavorDimensions "default"
18
16 buildTypes { 19 buildTypes {
17 release { 20 release {
18 minifyEnabled false 21 minifyEnabled false
19 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
20 } 23 }
21 } 24 }
22 25
23 signingConfigs { 26 signingConfigs {
24 dev { 27 dev {
25 storeFile file("../keystores/...") 28 storeFile file("../keystores/...")
26 storePassword 'android' 29 storePassword 'android'
27 keyAlias 'androiddebugkey' 30 keyAlias 'androiddebugkey'
28 keyPassword 'android' 31 keyPassword 'android'
29 } 32 }
30 33
31 product { 34 product {
32 storeFile file("..keystores/...") 35 storeFile file("..keystores/...")
33 storePassword 'android' 36 storePassword 'android'
34 keyAlias 'androiddebugkey' 37 keyAlias 'androiddebugkey'
35 keyPassword 'android' 38 keyPassword 'android'
36 } 39 }
37 } 40 }
38 41
39 productFlavors { 42 productFlavors {
40 43
41 dev { 44 dev {
42 applicationId "com.dinhcv.lifelogpedometer" 45 applicationId "com.dinhcv.lifelogpedometer"
43 applicationIdSuffix "dev" 46 applicationIdSuffix "dev"
44 minSdkVersion 19 47 minSdkVersion 19
45 buildConfigField 'String', 'BASE_URL', '"http://clover.timesfun.jp:9001/"' 48 buildConfigField 'String', 'BASE_URL', '"http://clover.timesfun.jp:9001/"'
46 } 49 }
47 50
48 product { 51 product {
49 applicationId "com.dinhcv.lifelogpedometer" 52 applicationId "com.dinhcv.lifelogpedometer"
50 minSdkVersion 19 53 minSdkVersion 19
51 buildConfigField 'String', 'BASE_URL', '"http://clover.timesfun.jp:9001/"' 54 buildConfigField 'String', 'BASE_URL', '"http://clover.timesfun.jp:9001/"'
52 } 55 }
53 } 56 }
54 } 57 }
55 58
56 dependencies { 59 dependencies {
57 compile fileTree(include: ['*.jar'], dir: 'libs') 60 compile fileTree(include: ['*.jar'], dir: 'libs')
58 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 61 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
59 exclude group: 'com.android.support', module: 'support-annotations' 62 exclude group: 'com.android.support', module: 'support-annotations'
60 }) 63 })
61 64
62 // Retrofit 65 // Retrofit
63 // JSON Parsing 66 // JSON Parsing
64 compile 'com.squareup.retrofit2:converter-gson:2.1.0' 67 compile 'com.squareup.retrofit2:converter-gson:2.1.0'
65 compile 'com.android.support:appcompat-v7:25.3.1' 68 compile 'com.android.support:appcompat-v7:25.3.1'
66 compile 'com.github.j4velin.colorpicker:colorpicker:1.2.3' 69 compile 'com.github.j4velin.colorpicker:colorpicker:1.2.3'
67 compile 'com.github.j4velin.EazeGraph:EazeGraph:1.0.2' 70 compile 'com.github.j4velin.EazeGraph:EazeGraph:1.0.2'
68 compile 'com.google.android.apps.dashclock:dashclock-api:2.0.0' 71 compile 'com.google.android.apps.dashclock:dashclock-api:2.0.0'
69 compile 'com.android.support:design:25.3.1' 72 compile 'com.android.support:design:25.3.1'
70 compile 'com.github.PhilJay:MPAndroidChart:v3.0.2' 73 compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
71 compile 'com.google.android.gms:play-services:11.0.4' 74 compile 'com.google.android.gms:play-services:11.0.4'
72 compile 'com.google.code.gson:gson:2.7' 75 compile 'com.google.code.gson:gson:2.7'
73 compile 'com.squareup.retrofit2:converter-gson:2.1.0' 76 compile 'com.squareup.retrofit2:converter-gson:2.1.0'
74 compile 'de.hdodenhof:circleimageview:2.1.0' 77 compile 'de.hdodenhof:circleimageview:2.1.0'
75 compile 'com.jakewharton:butterknife:8.6.0' 78 compile 'com.jakewharton:butterknife:8.6.0'
76 testCompile 'junit:junit:4.12' 79 testCompile 'junit:junit:4.12'
77 // Retrofit 80 // Retrofit
78 compile 'com.squareup.retrofit2:retrofit:2.1.0' 81 compile 'com.squareup.retrofit2:retrofit:2.1.0'
79 compile 'com.squareup.picasso:picasso:2.5.2' 82 compile 'com.squareup.picasso:picasso:2.5.2'
80 compile 'de.hdodenhof:circleimageview:2.1.0' 83 compile 'de.hdodenhof:circleimageview:2.1.0'
81 compile 'com.jakewharton:butterknife:8.6.0' 84 compile 'com.jakewharton:butterknife:8.6.0'
82 compile 'com.squareup.retrofit2:retrofit:2.1.0' 85 compile 'com.squareup.retrofit2:retrofit:2.1.0'
83 compile 'com.squareup.picasso:picasso:2.5.2' 86 compile 'com.squareup.picasso:picasso:2.5.2'
84 compile 'com.android.support:support-v4:25.3.1' 87 compile 'com.android.support:support-v4:25.3.1'
85 testCompile 'junit:junit:4.12' 88 testCompile 'junit:junit:4.12'
86 89
87 compile 'com.android.support:multidex:1.0.1' 90 compile 'com.android.support:multidex:1.0.1'
88 91
89 annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0' 92 annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
90 } 93 }
91 94
app/src/main/java/com/dinhcv/lifelogpedometer/activity/HistoryContentFragment.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.graphics.Color; 6 import android.graphics.Color;
7 import android.os.Bundle; 7 import android.os.Bundle;
8 import android.view.LayoutInflater; 8 import android.view.LayoutInflater;
9 import android.view.View; 9 import android.view.View;
10 import android.view.ViewGroup; 10 import android.view.ViewGroup;
11 import android.widget.Button; 11 import android.widget.Button;
12 import android.widget.DatePicker; 12 import android.widget.DatePicker;
13 import android.widget.ImageButton; 13 import android.widget.ImageButton;
14 import android.widget.LinearLayout; 14 import android.widget.LinearLayout;
15 import android.widget.TextView; 15 import android.widget.TextView;
16 16
17 import com.dinhcv.lifelogpedometer.R; 17 import com.dinhcv.lifelogpedometer.R;
18 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 18 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
19 import com.dinhcv.lifelogpedometer.model.structure.history.HistoryInfo; 19 import com.dinhcv.lifelogpedometer.model.structure.history.HistoryInfo;
20 import com.dinhcv.lifelogpedometer.portal.ApiServices;
20 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 21 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
21 import com.dinhcv.lifelogpedometer.utils.Const; 22 import com.dinhcv.lifelogpedometer.utils.Const;
22 import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter; 23 import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter;
23 import com.dinhcv.lifelogpedometer.utils.Debug; 24 import com.dinhcv.lifelogpedometer.utils.Debug;
24 import com.dinhcv.lifelogpedometer.utils.Utils; 25 import com.dinhcv.lifelogpedometer.utils.Utils;
25 import com.github.mikephil.charting.charts.BarChart; 26 import com.github.mikephil.charting.charts.BarChart;
26 import com.github.mikephil.charting.components.XAxis; 27 import com.github.mikephil.charting.components.XAxis;
27 import com.github.mikephil.charting.components.YAxis; 28 import com.github.mikephil.charting.components.YAxis;
28 import com.github.mikephil.charting.data.BarData; 29 import com.github.mikephil.charting.data.BarData;
29 import com.github.mikephil.charting.data.BarDataSet; 30 import com.github.mikephil.charting.data.BarDataSet;
30 import com.github.mikephil.charting.data.BarEntry; 31 import com.github.mikephil.charting.data.BarEntry;
31 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; 32 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
32 33
33 import org.json.JSONException; 34 import org.json.JSONException;
34 import org.json.JSONObject; 35 import org.json.JSONObject;
35 36
36 import java.util.ArrayList; 37 import java.util.ArrayList;
37 import java.util.Calendar; 38 import java.util.Calendar;
38 import java.util.Date; 39 import java.util.Date;
39 import java.util.List; 40 import java.util.List;
40 41
41 import butterknife.BindView; 42 import butterknife.BindView;
42 import butterknife.ButterKnife; 43 import butterknife.ButterKnife;
43 import butterknife.OnClick; 44 import butterknife.OnClick;
44 45
45 import static com.github.mikephil.charting.utils.ColorTemplate.rgb; 46 import static com.github.mikephil.charting.utils.ColorTemplate.rgb;
46 47
47 public class HistoryContentFragment extends FragmentBase { 48 public class HistoryContentFragment extends FragmentBase {
48 49
49 @BindView(R.id.btn_left_date) 50 @BindView(R.id.btn_left_date)
50 ImageButton btnLeftDate; 51 ImageButton btnLeftDate;
51 @BindView(R.id.btn_right_date) 52 @BindView(R.id.btn_right_date)
52 ImageButton btnRightDate; 53 ImageButton btnRightDate;
53 @BindView(R.id.tv_date) 54 @BindView(R.id.tv_date)
54 TextView tvDate; 55 TextView tvDate;
55 @BindView(R.id.tv_week_day) 56 @BindView(R.id.tv_week_day)
56 TextView tvWeekDay; 57 TextView tvWeekDay;
57 private Button btnFace; 58 private Button btnFace;
58 private Button btnTwitter; 59 private Button btnTwitter;
59 private Button btnLine; 60 private Button btnLine;
60 private Button btnEmail; 61 private Button btnEmail;
61 private Button btnOther; 62 private Button btnOther;
62 @BindView(R.id.tv_steps) 63 @BindView(R.id.tv_steps)
63 TextView tvStep; 64 TextView tvStep;
64 @BindView(R.id.tv_remainingStep) 65 @BindView(R.id.tv_remainingStep)
65 TextView tvRemain; 66 TextView tvRemain;
66 @BindView(R.id.tv_stepRateDone) 67 @BindView(R.id.tv_stepRateDone)
67 TextView tvRateDone; 68 TextView tvRateDone;
68 @BindView(R.id.tv_smallRemain) 69 @BindView(R.id.tv_smallRemain)
69 TextView tvSmallRemain; 70 TextView tvSmallRemain;
70 @BindView(R.id.tv_stepGoal) 71 @BindView(R.id.tv_stepGoal)
71 TextView tvGoal; 72 TextView tvGoal;
72 73
73 @BindView(R.id.tv_caloConsumned) 74 @BindView(R.id.tv_caloConsumned)
74 TextView tvCaloConsumned; 75 TextView tvCaloConsumned;
75 @BindView(R.id.tv_distance) 76 @BindView(R.id.tv_distance)
76 TextView tvDistance; 77 TextView tvDistance;
77 @BindView(R.id.tv_time) 78 @BindView(R.id.tv_time)
78 TextView tvTime; 79 TextView tvTime;
79 80
80 @BindView(R.id.ll_bike) 81 @BindView(R.id.ll_bike)
81 LinearLayout llBike; 82 LinearLayout llBike;
82 @BindView(R.id.ll_walking) 83 @BindView(R.id.ll_walking)
83 LinearLayout llWalking; 84 LinearLayout llWalking;
84 @BindView(R.id.ll_running) 85 @BindView(R.id.ll_running)
85 LinearLayout llRunning; 86 LinearLayout llRunning;
86 @BindView(R.id.btn_oneDay) 87 @BindView(R.id.btn_oneDay)
87 Button btnOneDay; 88 Button btnOneDay;
88 @BindView(R.id.btn_oneWeek) 89 @BindView(R.id.btn_oneWeek)
89 Button btnOneWeek; 90 Button btnOneWeek;
90 @BindView(R.id.btn_oneMonth) 91 @BindView(R.id.btn_oneMonth)
91 Button btnOneMonth; 92 Button btnOneMonth;
92 @BindView(R.id.btn_threeMonth) 93 @BindView(R.id.btn_threeMonth)
93 Button btnThreeMonth; 94 Button btnThreeMonth;
94 @BindView(R.id.btn_sixMonth) 95 @BindView(R.id.btn_sixMonth)
95 Button btnSixMonth; 96 Button btnSixMonth;
96 97
97 // bar chart 98 // bar chart
98 private BarChart mBarChart; 99 private BarChart mBarChart;
99 private List<String> dateList; 100 private List<String> dateList;
100 private String[] mParties; 101 private String[] mParties;
101 private Integer[] mStep; 102 private Integer[] mStep;
102 103
103 private Date mAnaDate; 104 private Date mAnaDate;
104 private Calendar mCalendar; 105 private Calendar mCalendar;
105 106
106 private int mAnaDay; 107 private int mAnaDay;
107 private int mAnaMonth; 108 private int mAnaMonth;
108 private int mAnaYear; 109 private int mAnaYear;
109 110
110 private HistoryInfo mDataModWalking = new HistoryInfo(); 111 private HistoryInfo mDataModWalking = new HistoryInfo();
111 private HistoryInfo mDataModRunning = new HistoryInfo(); 112 private HistoryInfo mDataModRunning = new HistoryInfo();
112 private HistoryInfo mDataModBike = new HistoryInfo(); 113 private HistoryInfo mDataModBike = new HistoryInfo();
113 private HistoryInfo mDataCurrent = new HistoryInfo(); 114 private HistoryInfo mDataCurrent = new HistoryInfo();
114 115
115 private Const.DATA_TYPE dataType; 116 private Const.DATA_TYPE dataType;
116 private Const.STEP_TYPE stepType; 117 private Const.STEP_TYPE stepType;
117 118
118 private Context mContext; 119 private Context mContext;
119 private View mRootView; 120 private View mRootView;
120 121
121 private HistoryFragment mHistoryFragment; 122 private HistoryFragment mHistoryFragment;
122 123
123 public void setRootFragment(HistoryFragment frag) { 124 public void setRootFragment(HistoryFragment frag) {
124 this.mHistoryFragment = frag; 125 this.mHistoryFragment = frag;
125 } 126 }
126 127
127 @Override 128 @Override
128 public View onCreateView(final LayoutInflater inflater, final ViewGroup container, 129 public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
129 final Bundle savedInstanceState) { 130 final Bundle savedInstanceState) {
130 mRootView = inflater.inflate(R.layout.fragment_history_content, null); 131 mRootView = inflater.inflate(R.layout.fragment_history_content, null);
131 ButterKnife.bind(this, mRootView); 132 ButterKnife.bind(this, mRootView);
132 mContext = getActivity(); 133 mContext = getActivity();
133 initView(mRootView); 134 initView(mRootView);
134 initData(); 135 initData();
135 136
136 return mRootView; 137 return mRootView;
137 } 138 }
138 139
139 140
140 private void initView(View view) { 141 private void initView(View view) {
141 btnFace = (Button) view.findViewById(R.id.btn_face); 142 btnFace = (Button) view.findViewById(R.id.btn_face);
142 btnTwitter = (Button) view.findViewById(R.id.btn_twitter); 143 btnTwitter = (Button) view.findViewById(R.id.btn_twitter);
143 btnLine = (Button) view.findViewById(R.id.btn_line); 144 btnLine = (Button) view.findViewById(R.id.btn_line);
144 btnEmail = (Button) view.findViewById(R.id.btn_email); 145 btnEmail = (Button) view.findViewById(R.id.btn_email);
145 btnOther = (Button) view.findViewById(R.id.btn_other); 146 btnOther = (Button) view.findViewById(R.id.btn_other);
146 147
147 mBarChart = (BarChart) view.findViewById(R.id.chart); 148 mBarChart = (BarChart) view.findViewById(R.id.chart);
148 } 149 }
149 150
150 151
151 /** 152 /**
152 * Show date picker dialog 153 * Show date picker dialog
153 */ 154 */
154 private void handleAnaDatePicker() { 155 private void handleAnaDatePicker() {
155 156
156 new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() { 157 new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {
157 @Override 158 @Override
158 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 159 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
159 160
160 mCalendar = Calendar.getInstance(); 161 mCalendar = Calendar.getInstance();
161 mCalendar.set(year, monthOfYear, dayOfMonth); 162 mCalendar.set(year, monthOfYear, dayOfMonth);
162 mAnaYear = year; 163 mAnaYear = year;
163 mAnaMonth = monthOfYear; 164 mAnaMonth = monthOfYear;
164 mAnaDay = dayOfMonth; 165 mAnaDay = dayOfMonth;
165 Date date = mCalendar.getTime(); 166 Date date = mCalendar.getTime();
166 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 167 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
167 tvWeekDay.setText(Utils.getWeekdayFromDate(date)); 168 tvWeekDay.setText(Utils.getWeekdayFromDate(date));
168 mAnaDate = date; 169 mAnaDate = date;
169 getHistoryData(dataType, mAnaDate); 170 getHistoryData(dataType, mAnaDate);
170 } 171 }
171 }, mAnaYear, mAnaMonth, mAnaDay).show(); 172 }, mAnaYear, mAnaMonth, mAnaDay).show();
172 173
173 } 174 }
174 175
175 176
176 /** 177 /**
177 * init data for 178 * init data for
178 */ 179 */
179 private void initData() { 180 private void initData() {
180 mCalendar = Calendar.getInstance(); 181 mCalendar = Calendar.getInstance();
181 mCalendar.setTime(new Date()); 182 mCalendar.setTime(new Date());
182 mAnaDate = mCalendar.getTime(); 183 mAnaDate = mCalendar.getTime();
183 mAnaYear = mCalendar.get(Calendar.YEAR); 184 mAnaYear = mCalendar.get(Calendar.YEAR);
184 mAnaMonth = mCalendar.get(Calendar.MONTH); 185 mAnaMonth = mCalendar.get(Calendar.MONTH);
185 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); 186 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH);
186 187
187 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); 188 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate));
188 tvWeekDay.setText(Utils.getWeekdayFromDate(mAnaDate)); 189 tvWeekDay.setText(Utils.getWeekdayFromDate(mAnaDate));
189 190
190 dataType = Const.DATA_TYPE.ONE_DAY; 191 dataType = Const.DATA_TYPE.ONE_DAY;
191 stepType = Const.STEP_TYPE.WALKING; 192 stepType = Const.STEP_TYPE.WALKING;
192 updateUiType(); 193 updateUiType();
193 updateUiStepType(false, true, false); 194 updateUiStepType(false, true, false);
194 195
195 getHistoryData(dataType, mAnaDate); 196 getHistoryData(dataType, mAnaDate);
196 } 197 }
197 198
198 private void updateUiType() { 199 private void updateUiType() {
199 if (dataType == Const.DATA_TYPE.ONE_DAY) { 200 if (dataType == Const.DATA_TYPE.ONE_DAY) {
200 setButtonSelected(true, false, false, false, false); 201 setButtonSelected(true, false, false, false, false);
201 } else if (dataType == Const.DATA_TYPE.ONE_WEEK) { 202 } else if (dataType == Const.DATA_TYPE.ONE_WEEK) {
202 setButtonSelected(false, true, false, false, false); 203 setButtonSelected(false, true, false, false, false);
203 } else if (dataType == Const.DATA_TYPE.ONE_MONTH) { 204 } else if (dataType == Const.DATA_TYPE.ONE_MONTH) {
204 setButtonSelected(false, false, true, false, false); 205 setButtonSelected(false, false, true, false, false);
205 } else if (dataType == Const.DATA_TYPE.THREE_MONTH){ 206 } else if (dataType == Const.DATA_TYPE.THREE_MONTH){
206 setButtonSelected(false, false, false, true, false); 207 setButtonSelected(false, false, false, true, false);
207 } else if (dataType == Const.DATA_TYPE.SIX_MONTH){ 208 } else if (dataType == Const.DATA_TYPE.SIX_MONTH){
208 setButtonSelected(false, false, false, false, true); 209 setButtonSelected(false, false, false, false, true);
209 } 210 }
210 } 211 }
211 212
212 private void setButtonSelected(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5 ) { 213 private void setButtonSelected(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5 ) {
213 btnOneDay.setSelected(b1); 214 btnOneDay.setSelected(b1);
214 btnOneWeek.setSelected(b2); 215 btnOneWeek.setSelected(b2);
215 btnOneMonth.setSelected(b3); 216 btnOneMonth.setSelected(b3);
216 btnThreeMonth.setSelected(b4); 217 btnThreeMonth.setSelected(b4);
217 btnSixMonth.setSelected(b5); 218 btnSixMonth.setSelected(b5);
218 } 219 }
219 220
220 private void updateUiStepType(boolean b1, boolean b2, boolean b3) { 221 private void updateUiStepType(boolean b1, boolean b2, boolean b3) {
221 llBike.setSelected(b1); 222 llBike.setSelected(b1);
222 llWalking.setSelected(b2); 223 llWalking.setSelected(b2);
223 llRunning.setSelected(b3); 224 llRunning.setSelected(b3);
224 } 225 }
225 226
226 private void getHistoryData(Const.DATA_TYPE dataType, Date toDate){ 227 private void getHistoryData(Const.DATA_TYPE dataType, Date toDate){
227 228
228 Date fromDate = Utils.getFromDate(mAnaDate, dataType); 229 Date fromDate = Utils.getFromDate(mAnaDate, dataType);
229 230
230 showDialog(mContext); 231 showDialog(mContext);
231 LLAPIManager.history(fromDate, toDate, new LLAPIManagerListener() { 232 ApiServices.history(fromDate, toDate, new LLAPIManagerListener() {
232 @Override 233 @Override
233 public void onError(Error error) { 234 public void onError(Error error) {
234 Debug.error("Get data history error"); 235 Debug.error("Get data history error");
235 hiddenDialog(); 236 hiddenDialog();
236 showDialogNotData(); 237 showDialogNotData();
237 } 238 }
238 239
239 @Override 240 @Override
240 public void onSuccess(String json) { 241 public void onSuccess(String json) {
241 Debug.error("Get data history success"); 242 Debug.error("Get data history success");
242 hiddenDialog(); 243 hiddenDialog();
243 loadDataDone(json); 244 loadDataDone(json);
244 } 245 }
245 246
246 @Override 247 @Override
247 public void onSuccess(JSONObject object) { 248 public void onSuccess(JSONObject object) {
248 Debug.error("Get data history success"); 249 Debug.error("Get data history success");
249 hiddenDialog(); 250 hiddenDialog();
250 } 251 }
251 }); 252 });
252 } 253 }
253 254
254 private void showDialogNotData(){ 255 private void showDialogNotData(){
255 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); 256 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data));
256 } 257 }
257 258
258 private void loadDataDone(String jsonString) { 259 private void loadDataDone(String jsonString) {
259 JSONObject jsonObject = null; 260 JSONObject jsonObject = null;
260 try { 261 try {
261 jsonObject = new JSONObject(jsonString); 262 jsonObject = new JSONObject(jsonString);
262 int status = jsonObject.optInt("status"); 263 int status = jsonObject.optInt("status");
263 if (status == 1) { 264 if (status == 1) {
264 JSONObject jsonObject1 = jsonObject.optJSONObject("result"); 265 JSONObject jsonObject1 = jsonObject.optJSONObject("result");
265 JSONObject jsonMod1 = jsonObject1.getJSONObject("mode_1"); 266 JSONObject jsonMod1 = jsonObject1.getJSONObject("mode_1");
266 JSONObject jsonMod2 = jsonObject1.getJSONObject("mode_2"); 267 JSONObject jsonMod2 = jsonObject1.getJSONObject("mode_2");
267 JSONObject jsonMod3 = jsonObject1.getJSONObject("mode_3"); 268 JSONObject jsonMod3 = jsonObject1.getJSONObject("mode_3");
268 addDataModWalking(jsonMod1); 269 addDataModWalking(jsonMod1);
269 addDataModRunning(jsonMod2); 270 addDataModRunning(jsonMod2);
270 addDataModBike(jsonMod3); 271 addDataModBike(jsonMod3);
271 272
272 } 273 }
273 } catch (JSONException e) { 274 } catch (JSONException e) {
274 e.printStackTrace(); 275 e.printStackTrace();
275 mDataModWalking = new HistoryInfo(); 276 mDataModWalking = new HistoryInfo();
276 mDataModRunning = new HistoryInfo();; 277 mDataModRunning = new HistoryInfo();;
277 mDataModBike = new HistoryInfo();; 278 mDataModBike = new HistoryInfo();;
278 } 279 }
279 280
280 if (stepType == Const.STEP_TYPE.WALKING){ 281 if (stepType == Const.STEP_TYPE.WALKING){
281 mDataCurrent = mDataModWalking; 282 mDataCurrent = mDataModWalking;
282 }else if (stepType == Const.STEP_TYPE.RUNNING){ 283 }else if (stepType == Const.STEP_TYPE.RUNNING){
283 mDataCurrent = mDataModRunning; 284 mDataCurrent = mDataModRunning;
284 }else { 285 }else {
285 mDataCurrent = mDataModBike; 286 mDataCurrent = mDataModBike;
286 } 287 }
287 288
288 updateUI(); 289 updateUI();
289 } 290 }
290 291
291 private void updateUI(){ 292 private void updateUI(){
292 // get data server 293 // get data server
293 tvGoal.setText(getResources().getString(R.string.step_unit, mDataCurrent.getTaget())); 294 tvGoal.setText(getResources().getString(R.string.step_unit, mDataCurrent.getTaget()));
294 tvStep.setText(getResources().getString(R.string.step_unit, mDataCurrent.getSteps())); 295 tvStep.setText(getResources().getString(R.string.step_unit, mDataCurrent.getSteps()));
295 tvSmallRemain.setText(getResources().getString(R.string.step_unit_1, mDataCurrent.getStepRemain())); 296 tvSmallRemain.setText(getResources().getString(R.string.step_unit_1, mDataCurrent.getStepRemain()));
296 tvRemain.setText(getResources().getString(R.string.step_unit, mDataCurrent.getStepRemain())); 297 tvRemain.setText(getResources().getString(R.string.step_unit, mDataCurrent.getStepRemain()));
297 tvRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(mDataCurrent.getCompletePercent()))); 298 tvRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(mDataCurrent.getCompletePercent())));
298 tvCaloConsumned.setText(getResources().getString(R.string.kcal_unit, Utils.convert2String2Decimal(mDataCurrent.getKcal()))); 299 tvCaloConsumned.setText(getResources().getString(R.string.kcal_unit, Utils.convert2String2Decimal(mDataCurrent.getKcal())));
299 tvDistance.setText(getResources().getString(R.string.distance_unit, Utils.convert2String2Decimal(mDataCurrent.getDistance()))); 300 tvDistance.setText(getResources().getString(R.string.distance_unit, Utils.convert2String2Decimal(mDataCurrent.getDistance())));
300 tvTime.setText(getResources().getString(R.string.time_unit, Utils.convertTimeStringFromString(mDataCurrent.getTime()))); 301 tvTime.setText(getResources().getString(R.string.time_unit, Utils.convertTimeStringFromString(mDataCurrent.getTime())));
301 302
302 // update bar 303 // update bar
303 if (mDataCurrent.getDataChart() != null && mDataCurrent.getDataChart().size() == 24) { 304 if (mDataCurrent.getDataChart() != null && mDataCurrent.getDataChart().size() == 24) {
304 updateBars(); 305 updateBars();
305 } 306 }
306 307
307 } 308 }
308 309
309 private void updateBars() { 310 private void updateBars() {
310 dateList = new ArrayList<>(); 311 dateList = new ArrayList<>();
311 List<Integer> stepList = new ArrayList<>(); 312 List<Integer> stepList = new ArrayList<>();
312 313
313 stepList = mDataCurrent.getDataChart(); 314 stepList = mDataCurrent.getDataChart();
314 for (int i = 0; i < 24; i++){ 315 for (int i = 0; i < 24; i++){
315 dateList.add(String.valueOf(i)); 316 dateList.add(String.valueOf(i));
316 } 317 }
317 318
318 mStep = stepList.toArray(new Integer[0]); 319 mStep = stepList.toArray(new Integer[0]);
319 mParties = dateList.toArray(new String[0]); 320 mParties = dateList.toArray(new String[0]);
320 321
321 initGraph(); 322 initGraph();
322 } 323 }
323 324
324 private void initGraph(){ 325 private void initGraph(){
325 326
326 mBarChart.setDrawBarShadow(false); 327 mBarChart.setDrawBarShadow(false);
327 mBarChart.setDrawValueAboveBar(true); 328 mBarChart.setDrawValueAboveBar(true);
328 329
329 // if more than 60 entries are displayed in the chart, no values will be 330 // if more than 60 entries are displayed in the chart, no values will be
330 // drawn 331 // drawn
331 mBarChart.setMaxVisibleValueCount(60); 332 mBarChart.setMaxVisibleValueCount(60);
332 333
333 mBarChart.getDescription().setEnabled(false); 334 mBarChart.getDescription().setEnabled(false);
334 // scaling can now only be done on x- and y-axis separately 335 // scaling can now only be done on x- and y-axis separately
335 mBarChart.setPinchZoom(false); 336 mBarChart.setPinchZoom(false);
336 337
337 mBarChart.setDrawGridBackground(false); 338 mBarChart.setDrawGridBackground(false);
338 // mChart.setDrawYLabels(false); 339 // mChart.setDrawYLabels(false);
339 340
340 DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(dateList); 341 DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(dateList);
341 342
342 XAxis xAxis = mBarChart.getXAxis(); 343 XAxis xAxis = mBarChart.getXAxis();
343 xAxis.setLabelRotationAngle(0); 344 xAxis.setLabelRotationAngle(0);
344 xAxis.setPosition(XAxis.XAxisPosition.TOP); 345 xAxis.setPosition(XAxis.XAxisPosition.TOP);
345 xAxis.setDrawGridLines(true); 346 xAxis.setDrawGridLines(true);
346 xAxis.setLabelCount(10); 347 xAxis.setLabelCount(10);
347 xAxis.setTextColor(Color.WHITE); 348 xAxis.setTextColor(Color.WHITE);
348 xAxis.setValueFormatter(xValueFormatter); 349 xAxis.setValueFormatter(xValueFormatter);
349 350
350 351
351 YAxis leftAxis = mBarChart.getAxisLeft(); 352 YAxis leftAxis = mBarChart.getAxisLeft();
352 leftAxis.setDrawLabels(false); 353 leftAxis.setDrawLabels(false);
353 leftAxis.setDrawGridLines(false); 354 leftAxis.setDrawGridLines(false);
354 leftAxis.setAxisMinimum(0f); 355 leftAxis.setAxisMinimum(0f);
355 leftAxis.setAxisMaximum(10000f); 356 leftAxis.setAxisMaximum(10000f);
356 leftAxis.setDrawZeroLine(false); 357 leftAxis.setDrawZeroLine(false);
357 358
358 leftAxis.setEnabled(false); 359 leftAxis.setEnabled(false);
359 mBarChart.setDrawValueAboveBar(false); 360 mBarChart.setDrawValueAboveBar(false);
360 mBarChart.getAxisRight().setEnabled(false); 361 mBarChart.getAxisRight().setEnabled(false);
361 362
362 // set auto scale min max 363 // set auto scale min max
363 mBarChart.setAutoScaleMinMaxEnabled(true); 364 mBarChart.setAutoScaleMinMaxEnabled(true);
364 mBarChart.notifyDataSetChanged(); 365 mBarChart.notifyDataSetChanged();
365 366
366 // Set enimate y 367 // Set enimate y
367 mBarChart.animateY(2000); 368 mBarChart.animateY(2000);
368 369
369 setData(); 370 setData();
370 371
371 mBarChart.getLegend().setEnabled(false); 372 mBarChart.getLegend().setEnabled(false);
372 } 373 }
373 374
374 375
375 private void setData() { 376 private void setData() {
376 377
377 ArrayList<String> xVals = new ArrayList<>(); 378 ArrayList<String> xVals = new ArrayList<>();
378 for (int i = 0; i < mStep.length; i++) { 379 for (int i = 0; i < mStep.length; i++) {
379 xVals.add(mParties[i % mStep.length]); 380 xVals.add(mParties[i % mStep.length]);
380 } 381 }
381 382
382 ArrayList<BarEntry> yVals1 = new ArrayList<>(); 383 ArrayList<BarEntry> yVals1 = new ArrayList<>();
383 for (int i = 0; i < mStep.length; i++) { 384 for (int i = 0; i < mStep.length; i++) {
384 float val = (float) (mStep[i]*1); 385 float val = (float) (mStep[i]*1);
385 yVals1.add(new BarEntry(i, val)); 386 yVals1.add(new BarEntry(i, val));
386 } 387 }
387 388
388 BarDataSet set1; 389 BarDataSet set1;
389 390
390 if (mBarChart.getData() != null && mBarChart.getData().getDataSetCount() > 0) { 391 if (mBarChart.getData() != null && mBarChart.getData().getDataSetCount() > 0) {
391 set1 = (BarDataSet)mBarChart.getData().getDataSetByIndex(0); 392 set1 = (BarDataSet)mBarChart.getData().getDataSetByIndex(0);
392 set1.setValues(yVals1); 393 set1.setValues(yVals1);
393 mBarChart.getData().notifyDataChanged(); 394 mBarChart.getData().notifyDataChanged();
394 mBarChart.notifyDataSetChanged(); 395 mBarChart.notifyDataSetChanged();
395 } else { 396 } else {
396 ArrayList<Integer> colors = new ArrayList<>(); 397 ArrayList<Integer> colors = new ArrayList<>();
397 398
398 399
399 int[] MATERIAL_COLORS = {rgb("#40CDEF")}; 400 int[] MATERIAL_COLORS = {rgb("#40CDEF")};
400 401
401 for (int c : MATERIAL_COLORS) 402 for (int c : MATERIAL_COLORS)
402 colors.add(c); 403 colors.add(c);
403 404
404 set1 = new BarDataSet(yVals1, null); 405 set1 = new BarDataSet(yVals1, null);
405 406
406 set1.setColors(colors); 407 set1.setColors(colors);
407 408
408 ArrayList<IBarDataSet> dataSets = new ArrayList<>(); 409 ArrayList<IBarDataSet> dataSets = new ArrayList<>();
409 dataSets.add(set1); 410 dataSets.add(set1);
410 411
411 BarData data = new BarData(dataSets); 412 BarData data = new BarData(dataSets);
412 data.setValueTextSize(10f); 413 data.setValueTextSize(10f);
413 414
414 mBarChart.setData(data); 415 mBarChart.setData(data);
415 } 416 }
416 } 417 }
417 418
418 private void addDataModWalking(JSONObject jsonObject){ 419 private void addDataModWalking(JSONObject jsonObject){
419 if (jsonObject == null) return; 420 if (jsonObject == null) return;
420 mDataModWalking.setTaget(jsonObject.optInt("target")); 421 mDataModWalking.setTaget(jsonObject.optInt("target"));
421 mDataModWalking.setSteps(jsonObject.optInt("steps")); 422 mDataModWalking.setSteps(jsonObject.optInt("steps"));
422 mDataModWalking.setStepRemain(jsonObject.optInt("step_remain")); 423 mDataModWalking.setStepRemain(jsonObject.optInt("step_remain"));
423 mDataModWalking.setCompletePercent(jsonObject.optDouble("complete_percent")); 424 mDataModWalking.setCompletePercent(jsonObject.optDouble("complete_percent"));
424 mDataModWalking.setTime(jsonObject.optInt("time")); 425 mDataModWalking.setTime(jsonObject.optInt("time"));
425 mDataModWalking.setDistance(jsonObject.optInt("distance")); 426 mDataModWalking.setDistance(jsonObject.optInt("distance"));
426 mDataModWalking.setKcal(jsonObject.optInt("kcal")); 427 mDataModWalking.setKcal(jsonObject.optInt("kcal"));
427 428
428 JSONObject dataChart = jsonObject.optJSONObject("data_chart"); 429 JSONObject dataChart = jsonObject.optJSONObject("data_chart");
429 ArrayList<Integer> dataChartList = new ArrayList<>(); 430 ArrayList<Integer> dataChartList = new ArrayList<>();
430 dataChartList.add(dataChart.optInt("0")); 431 dataChartList.add(dataChart.optInt("0"));
431 dataChartList.add(dataChart.optInt("1")); 432 dataChartList.add(dataChart.optInt("1"));
432 dataChartList.add(dataChart.optInt("2")); 433 dataChartList.add(dataChart.optInt("2"));
433 dataChartList.add(dataChart.optInt("3")); 434 dataChartList.add(dataChart.optInt("3"));
434 dataChartList.add(dataChart.optInt("4")); 435 dataChartList.add(dataChart.optInt("4"));
435 dataChartList.add(dataChart.optInt("5")); 436 dataChartList.add(dataChart.optInt("5"));
436 dataChartList.add(dataChart.optInt("6")); 437 dataChartList.add(dataChart.optInt("6"));
437 dataChartList.add(dataChart.optInt("7")); 438 dataChartList.add(dataChart.optInt("7"));
438 dataChartList.add(dataChart.optInt("8")); 439 dataChartList.add(dataChart.optInt("8"));
439 dataChartList.add(dataChart.optInt("9")); 440 dataChartList.add(dataChart.optInt("9"));
440 dataChartList.add(dataChart.optInt("10")); 441 dataChartList.add(dataChart.optInt("10"));
441 dataChartList.add(dataChart.optInt("11")); 442 dataChartList.add(dataChart.optInt("11"));
442 dataChartList.add(dataChart.optInt("12")); 443 dataChartList.add(dataChart.optInt("12"));
443 dataChartList.add(dataChart.optInt("13")); 444 dataChartList.add(dataChart.optInt("13"));
444 dataChartList.add(dataChart.optInt("14")); 445 dataChartList.add(dataChart.optInt("14"));
445 dataChartList.add(dataChart.optInt("15")); 446 dataChartList.add(dataChart.optInt("15"));
446 dataChartList.add(dataChart.optInt("16")); 447 dataChartList.add(dataChart.optInt("16"));
447 dataChartList.add(dataChart.optInt("17")); 448 dataChartList.add(dataChart.optInt("17"));
448 dataChartList.add(dataChart.optInt("18")); 449 dataChartList.add(dataChart.optInt("18"));
449 dataChartList.add(dataChart.optInt("19")); 450 dataChartList.add(dataChart.optInt("19"));
450 dataChartList.add(dataChart.optInt("20")); 451 dataChartList.add(dataChart.optInt("20"));
451 dataChartList.add(dataChart.optInt("21")); 452 dataChartList.add(dataChart.optInt("21"));
452 dataChartList.add(dataChart.optInt("22")); 453 dataChartList.add(dataChart.optInt("22"));
453 dataChartList.add(dataChart.optInt("23")); 454 dataChartList.add(dataChart.optInt("23"));
454 455
455 mDataModWalking.setDataChart(dataChartList); 456 mDataModWalking.setDataChart(dataChartList);
456 } 457 }
457 458
458 private void addDataModRunning(JSONObject jsonObject){ 459 private void addDataModRunning(JSONObject jsonObject){
459 if (jsonObject == null) return; 460 if (jsonObject == null) return;
460 mDataModRunning.setTaget(jsonObject.optInt("target")); 461 mDataModRunning.setTaget(jsonObject.optInt("target"));
461 mDataModRunning.setSteps(jsonObject.optInt("steps")); 462 mDataModRunning.setSteps(jsonObject.optInt("steps"));
462 mDataModRunning.setStepRemain(jsonObject.optInt("step_remain")); 463 mDataModRunning.setStepRemain(jsonObject.optInt("step_remain"));
463 mDataModRunning.setCompletePercent(jsonObject.optDouble("complete_percent")); 464 mDataModRunning.setCompletePercent(jsonObject.optDouble("complete_percent"));
464 mDataModRunning.setTime(jsonObject.optInt("time")); 465 mDataModRunning.setTime(jsonObject.optInt("time"));
465 mDataModRunning.setDistance(jsonObject.optInt("distance")); 466 mDataModRunning.setDistance(jsonObject.optInt("distance"));
466 mDataModRunning.setKcal(jsonObject.optInt("kcal")); 467 mDataModRunning.setKcal(jsonObject.optInt("kcal"));
467 468
468 JSONObject dataChart = jsonObject.optJSONObject("data_chart"); 469 JSONObject dataChart = jsonObject.optJSONObject("data_chart");
469 ArrayList<Integer> dataChartList = new ArrayList<>(); 470 ArrayList<Integer> dataChartList = new ArrayList<>();
470 dataChartList.add(dataChart.optInt("0")); 471 dataChartList.add(dataChart.optInt("0"));
471 dataChartList.add(dataChart.optInt("1")); 472 dataChartList.add(dataChart.optInt("1"));
472 dataChartList.add(dataChart.optInt("2")); 473 dataChartList.add(dataChart.optInt("2"));
473 dataChartList.add(dataChart.optInt("3")); 474 dataChartList.add(dataChart.optInt("3"));
474 dataChartList.add(dataChart.optInt("4")); 475 dataChartList.add(dataChart.optInt("4"));
475 dataChartList.add(dataChart.optInt("5")); 476 dataChartList.add(dataChart.optInt("5"));
476 dataChartList.add(dataChart.optInt("6")); 477 dataChartList.add(dataChart.optInt("6"));
477 dataChartList.add(dataChart.optInt("7")); 478 dataChartList.add(dataChart.optInt("7"));
478 dataChartList.add(dataChart.optInt("8")); 479 dataChartList.add(dataChart.optInt("8"));
479 dataChartList.add(dataChart.optInt("9")); 480 dataChartList.add(dataChart.optInt("9"));
480 dataChartList.add(dataChart.optInt("10")); 481 dataChartList.add(dataChart.optInt("10"));
481 dataChartList.add(dataChart.optInt("11")); 482 dataChartList.add(dataChart.optInt("11"));
482 dataChartList.add(dataChart.optInt("12")); 483 dataChartList.add(dataChart.optInt("12"));
483 dataChartList.add(dataChart.optInt("13")); 484 dataChartList.add(dataChart.optInt("13"));
484 dataChartList.add(dataChart.optInt("14")); 485 dataChartList.add(dataChart.optInt("14"));
485 dataChartList.add(dataChart.optInt("15")); 486 dataChartList.add(dataChart.optInt("15"));
486 dataChartList.add(dataChart.optInt("16")); 487 dataChartList.add(dataChart.optInt("16"));
487 dataChartList.add(dataChart.optInt("17")); 488 dataChartList.add(dataChart.optInt("17"));
488 dataChartList.add(dataChart.optInt("18")); 489 dataChartList.add(dataChart.optInt("18"));
489 dataChartList.add(dataChart.optInt("19")); 490 dataChartList.add(dataChart.optInt("19"));
490 dataChartList.add(dataChart.optInt("20")); 491 dataChartList.add(dataChart.optInt("20"));
491 dataChartList.add(dataChart.optInt("21")); 492 dataChartList.add(dataChart.optInt("21"));
492 dataChartList.add(dataChart.optInt("22")); 493 dataChartList.add(dataChart.optInt("22"));
493 dataChartList.add(dataChart.optInt("23")); 494 dataChartList.add(dataChart.optInt("23"));
494 495
495 mDataModRunning.setDataChart(dataChartList); 496 mDataModRunning.setDataChart(dataChartList);
496 } 497 }
497 498
498 private void addDataModBike(JSONObject jsonObject){ 499 private void addDataModBike(JSONObject jsonObject){
499 if (jsonObject == null) return; 500 if (jsonObject == null) return;
500 mDataModBike.setTaget(jsonObject.optInt("target")); 501 mDataModBike.setTaget(jsonObject.optInt("target"));
501 mDataModBike.setSteps(jsonObject.optInt("steps")); 502 mDataModBike.setSteps(jsonObject.optInt("steps"));
502 mDataModBike.setStepRemain(jsonObject.optInt("step_remain")); 503 mDataModBike.setStepRemain(jsonObject.optInt("step_remain"));
503 mDataModBike.setCompletePercent(jsonObject.optDouble("complete_percent")); 504 mDataModBike.setCompletePercent(jsonObject.optDouble("complete_percent"));
504 mDataModBike.setTime(jsonObject.optInt("time")); 505 mDataModBike.setTime(jsonObject.optInt("time"));
505 mDataModBike.setDistance(jsonObject.optInt("distance")); 506 mDataModBike.setDistance(jsonObject.optInt("distance"));
506 mDataModBike.setKcal(jsonObject.optInt("kcal")); 507 mDataModBike.setKcal(jsonObject.optInt("kcal"));
507 508
508 JSONObject dataChart = jsonObject.optJSONObject("data_chart"); 509 JSONObject dataChart = jsonObject.optJSONObject("data_chart");
509 ArrayList<Integer> dataChartList = new ArrayList<>(); 510 ArrayList<Integer> dataChartList = new ArrayList<>();
510 dataChartList.add(dataChart.optInt("0")); 511 dataChartList.add(dataChart.optInt("0"));
511 dataChartList.add(dataChart.optInt("1")); 512 dataChartList.add(dataChart.optInt("1"));
512 dataChartList.add(dataChart.optInt("2")); 513 dataChartList.add(dataChart.optInt("2"));
513 dataChartList.add(dataChart.optInt("3")); 514 dataChartList.add(dataChart.optInt("3"));
514 dataChartList.add(dataChart.optInt("4")); 515 dataChartList.add(dataChart.optInt("4"));
515 dataChartList.add(dataChart.optInt("5")); 516 dataChartList.add(dataChart.optInt("5"));
516 dataChartList.add(dataChart.optInt("6")); 517 dataChartList.add(dataChart.optInt("6"));
517 dataChartList.add(dataChart.optInt("7")); 518 dataChartList.add(dataChart.optInt("7"));
518 dataChartList.add(dataChart.optInt("8")); 519 dataChartList.add(dataChart.optInt("8"));
519 dataChartList.add(dataChart.optInt("9")); 520 dataChartList.add(dataChart.optInt("9"));
520 dataChartList.add(dataChart.optInt("10")); 521 dataChartList.add(dataChart.optInt("10"));
521 dataChartList.add(dataChart.optInt("11")); 522 dataChartList.add(dataChart.optInt("11"));
522 dataChartList.add(dataChart.optInt("12")); 523 dataChartList.add(dataChart.optInt("12"));
523 dataChartList.add(dataChart.optInt("13")); 524 dataChartList.add(dataChart.optInt("13"));
524 dataChartList.add(dataChart.optInt("14")); 525 dataChartList.add(dataChart.optInt("14"));
525 dataChartList.add(dataChart.optInt("15")); 526 dataChartList.add(dataChart.optInt("15"));
526 dataChartList.add(dataChart.optInt("16")); 527 dataChartList.add(dataChart.optInt("16"));
527 dataChartList.add(dataChart.optInt("17")); 528 dataChartList.add(dataChart.optInt("17"));
528 dataChartList.add(dataChart.optInt("18")); 529 dataChartList.add(dataChart.optInt("18"));
529 dataChartList.add(dataChart.optInt("19")); 530 dataChartList.add(dataChart.optInt("19"));
530 dataChartList.add(dataChart.optInt("20")); 531 dataChartList.add(dataChart.optInt("20"));
531 dataChartList.add(dataChart.optInt("21")); 532 dataChartList.add(dataChart.optInt("21"));
532 dataChartList.add(dataChart.optInt("22")); 533 dataChartList.add(dataChart.optInt("22"));
533 dataChartList.add(dataChart.optInt("23")); 534 dataChartList.add(dataChart.optInt("23"));
534 535
535 mDataModBike.setDataChart(dataChartList); 536 mDataModBike.setDataChart(dataChartList);
536 } 537 }
537 538
538 @OnClick({R.id.btn_oneDay, R.id.btn_oneWeek, R.id.btn_oneMonth, R.id.btn_threeMonth, 539 @OnClick({R.id.btn_oneDay, R.id.btn_oneWeek, R.id.btn_oneMonth, R.id.btn_threeMonth,
539 R.id.btn_sixMonth, R.id.btn_left_date, R.id.btn_right_date, R.id.ll_bike, 540 R.id.btn_sixMonth, R.id.btn_left_date, R.id.btn_right_date, R.id.ll_bike,
540 R.id.ll_walking, R.id.ll_running, R.id.rl_stepView}) 541 R.id.ll_walking, R.id.ll_running, R.id.rl_stepView})
541 public void onClick(View v){ 542 public void onClick(View v){
542 switch (v.getId()){ 543 switch (v.getId()){
543 case R.id.btn_left_date: 544 case R.id.btn_left_date:
544 mCalendar = Calendar.getInstance(); 545 mCalendar = Calendar.getInstance();
545 mCalendar.setTime(mAnaDate); 546 mCalendar.setTime(mAnaDate);
546 mCalendar.add(Calendar.DAY_OF_MONTH, -1); 547 mCalendar.add(Calendar.DAY_OF_MONTH, -1);
547 Date date = mCalendar.getTime(); 548 Date date = mCalendar.getTime();
548 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 549 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
549 tvWeekDay.setText(Utils.getWeekdayFromDate(date)); 550 tvWeekDay.setText(Utils.getWeekdayFromDate(date));
550 mAnaDate = date; 551 mAnaDate = date;
551 getHistoryData(dataType, mAnaDate); 552 getHistoryData(dataType, mAnaDate);
552 break; 553 break;
553 554
554 case R.id.btn_right_date: 555 case R.id.btn_right_date:
555 mCalendar = Calendar.getInstance(); 556 mCalendar = Calendar.getInstance();
556 mCalendar.setTime(mAnaDate); 557 mCalendar.setTime(mAnaDate);
557 mCalendar.add(Calendar.DAY_OF_MONTH, +1); 558 mCalendar.add(Calendar.DAY_OF_MONTH, +1);
558 Date date1 = mCalendar.getTime(); 559 Date date1 = mCalendar.getTime();
559 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date1)); 560 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date1));
560 tvWeekDay.setText(Utils.getWeekdayFromDate(date1)); 561 tvWeekDay.setText(Utils.getWeekdayFromDate(date1));
561 mAnaDate = date1; 562 mAnaDate = date1;
562 getHistoryData(dataType, mAnaDate); 563 getHistoryData(dataType, mAnaDate);
563 break; 564 break;
564 565
565 case R.id.btn_oneDay: 566 case R.id.btn_oneDay:
566 dataType = Const.DATA_TYPE.ONE_DAY; 567 dataType = Const.DATA_TYPE.ONE_DAY;
567 updateUiType(); 568 updateUiType();
568 getHistoryData(dataType, mAnaDate); 569 getHistoryData(dataType, mAnaDate);
569 break; 570 break;
570 571
571 case R.id.btn_oneWeek: 572 case R.id.btn_oneWeek:
572 dataType = Const.DATA_TYPE.ONE_WEEK; 573 dataType = Const.DATA_TYPE.ONE_WEEK;
573 updateUiType(); 574 updateUiType();
574 getHistoryData(dataType, mAnaDate); 575 getHistoryData(dataType, mAnaDate);
575 break; 576 break;
576 577
577 case R.id.btn_oneMonth: 578 case R.id.btn_oneMonth:
578 dataType = Const.DATA_TYPE.ONE_MONTH; 579 dataType = Const.DATA_TYPE.ONE_MONTH;
579 updateUiType(); 580 updateUiType();
580 getHistoryData(dataType, mAnaDate); 581 getHistoryData(dataType, mAnaDate);
581 break; 582 break;
582 583
583 case R.id.btn_threeMonth: 584 case R.id.btn_threeMonth:
584 dataType = Const.DATA_TYPE.THREE_MONTH; 585 dataType = Const.DATA_TYPE.THREE_MONTH;
585 updateUiType(); 586 updateUiType();
586 getHistoryData(dataType, mAnaDate); 587 getHistoryData(dataType, mAnaDate);
587 break; 588 break;
588 589
589 case R.id.btn_sixMonth: 590 case R.id.btn_sixMonth:
590 dataType = Const.DATA_TYPE.SIX_MONTH; 591 dataType = Const.DATA_TYPE.SIX_MONTH;
591 updateUiType(); 592 updateUiType();
592 getHistoryData(dataType, mAnaDate); 593 getHistoryData(dataType, mAnaDate);
593 break; 594 break;
594 595
595 case R.id.tv_date: 596 case R.id.tv_date:
596 handleAnaDatePicker(); 597 handleAnaDatePicker();
597 break; 598 break;
598 599
599 case R.id.ll_bike: 600 case R.id.ll_bike:
600 stepType = Const.STEP_TYPE.BIKE; 601 stepType = Const.STEP_TYPE.BIKE;
601 updateUiStepType(true, false, false); 602 updateUiStepType(true, false, false);
602 // add data 603 // add data
603 mDataCurrent = mDataModBike; 604 mDataCurrent = mDataModBike;
604 updateUI(); 605 updateUI();
605 break; 606 break;
606 607
607 case R.id.ll_walking: 608 case R.id.ll_walking:
608 stepType = Const.STEP_TYPE.WALKING; 609 stepType = Const.STEP_TYPE.WALKING;
609 updateUiStepType(false, true, false); 610 updateUiStepType(false, true, false);
610 // add data 611 // add data
611 mDataCurrent = mDataModWalking; 612 mDataCurrent = mDataModWalking;
612 updateUI(); 613 updateUI();
613 break; 614 break;
614 615
615 case R.id.ll_running: 616 case R.id.ll_running:
616 stepType = Const.STEP_TYPE.RUNNING; 617 stepType = Const.STEP_TYPE.RUNNING;
617 updateUiStepType(false, false, true); 618 updateUiStepType(false, false, true);
618 // add 619 // add
619 mDataCurrent = mDataModRunning; 620 mDataCurrent = mDataModRunning;
620 updateUI(); 621 updateUI();
621 break; 622 break;
622 623
623 case R.id.rl_stepView: 624 case R.id.rl_stepView:
624 mHistoryFragment.showDetailFragment(); 625 mHistoryFragment.showDetailFragment();
625 break; 626 break;
626 627
627 default: 628 default:
628 break; 629 break;
629 } 630 }
630 } 631 }
631 632
632 @Override 633 @Override
633 public void onActivityResult(int requestCode, int resultCode, Intent data) { 634 public void onActivityResult(int requestCode, int resultCode, Intent data) {
634 super.onActivityResult(requestCode, resultCode, data); 635 super.onActivityResult(requestCode, resultCode, data);
635 636
636 } 637 }
637 } 638 }
638 639
app/src/main/java/com/dinhcv/lifelogpedometer/activity/HistoryDetailFragment.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.os.Bundle; 5 import android.os.Bundle;
6 import android.view.LayoutInflater; 6 import android.view.LayoutInflater;
7 import android.view.View; 7 import android.view.View;
8 import android.view.ViewGroup; 8 import android.view.ViewGroup;
9 import android.widget.Button; 9 import android.widget.Button;
10 import android.widget.DatePicker; 10 import android.widget.DatePicker;
11 import android.widget.EditText; 11 import android.widget.EditText;
12 import android.widget.ImageButton; 12 import android.widget.ImageButton;
13 import android.widget.LinearLayout; 13 import android.widget.LinearLayout;
14 import android.widget.ProgressBar; 14 import android.widget.ProgressBar;
15 import android.widget.TextView; 15 import android.widget.TextView;
16 16
17 import com.dinhcv.lifelogpedometer.R; 17 import com.dinhcv.lifelogpedometer.R;
18 import com.dinhcv.lifelogpedometer.adapter.HistoryAdapter; 18 import com.dinhcv.lifelogpedometer.adapter.HistoryAdapter;
19 import com.dinhcv.lifelogpedometer.customview.ExpandableListCustomView; 19 import com.dinhcv.lifelogpedometer.customview.ExpandableListCustomView;
20 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 20 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
21 import com.dinhcv.lifelogpedometer.model.structure.history.HistoryInfo; 21 import com.dinhcv.lifelogpedometer.model.structure.history.HistoryInfo;
22 import com.dinhcv.lifelogpedometer.model.structure.history.HistoryItemInfo; 22 import com.dinhcv.lifelogpedometer.model.structure.history.HistoryItemInfo;
23 import com.dinhcv.lifelogpedometer.portal.ApiServices;
23 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 24 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
24 import com.dinhcv.lifelogpedometer.utils.Const; 25 import com.dinhcv.lifelogpedometer.utils.Const;
25 import com.dinhcv.lifelogpedometer.utils.Debug; 26 import com.dinhcv.lifelogpedometer.utils.Debug;
26 import com.dinhcv.lifelogpedometer.utils.Utils; 27 import com.dinhcv.lifelogpedometer.utils.Utils;
27 28
28 import org.json.JSONException; 29 import org.json.JSONException;
29 import org.json.JSONObject; 30 import org.json.JSONObject;
30 31
31 import java.util.ArrayList; 32 import java.util.ArrayList;
32 import java.util.Calendar; 33 import java.util.Calendar;
33 import java.util.Date; 34 import java.util.Date;
34 import java.util.HashMap; 35 import java.util.HashMap;
35 import java.util.List; 36 import java.util.List;
36 import java.util.Map; 37 import java.util.Map;
37 38
38 import butterknife.BindView; 39 import butterknife.BindView;
39 import butterknife.ButterKnife; 40 import butterknife.ButterKnife;
40 import butterknife.OnClick; 41 import butterknife.OnClick;
41 import retrofit2.Callback; 42 import retrofit2.Callback;
42 43
43 44
44 public class HistoryDetailFragment extends FragmentBase { 45 public class HistoryDetailFragment extends FragmentBase {
45 private View mRootView; 46 private View mRootView;
46 47
47 @BindView(R.id.btn_left_date) 48 @BindView(R.id.btn_left_date)
48 ImageButton btnLeftDate; 49 ImageButton btnLeftDate;
49 @BindView(R.id.btn_right_date) 50 @BindView(R.id.btn_right_date)
50 ImageButton btnRightDate; 51 ImageButton btnRightDate;
51 @BindView(R.id.tv_date) 52 @BindView(R.id.tv_date)
52 TextView tvDate; 53 TextView tvDate;
53 @BindView(R.id.tv_week_day) 54 @BindView(R.id.tv_week_day)
54 TextView tvWeekDay; 55 TextView tvWeekDay;
55 @BindView(R.id.ll_bike) 56 @BindView(R.id.ll_bike)
56 LinearLayout llBike; 57 LinearLayout llBike;
57 @BindView(R.id.ll_walking) 58 @BindView(R.id.ll_walking)
58 LinearLayout llWalking; 59 LinearLayout llWalking;
59 @BindView(R.id.ll_running) 60 @BindView(R.id.ll_running)
60 LinearLayout llRunning; 61 LinearLayout llRunning;
61 @BindView(R.id.lv_history) 62 @BindView(R.id.lv_history)
62 ExpandableListCustomView lvHistory; 63 ExpandableListCustomView lvHistory;
63 private HistoryAdapter mHistoreAdapter; 64 private HistoryAdapter mHistoreAdapter;
64 65
65 66
66 @BindView(R.id.btn_sixMonth) 67 @BindView(R.id.btn_sixMonth)
67 Button btnSixMonth; 68 Button btnSixMonth;
68 @BindView(R.id.btn_oneDay) 69 @BindView(R.id.btn_oneDay)
69 Button btnOneDay; 70 Button btnOneDay;
70 @BindView(R.id.btn_oneWeek) 71 @BindView(R.id.btn_oneWeek)
71 Button btnOneWeek; 72 Button btnOneWeek;
72 @BindView(R.id.btn_oneMonth) 73 @BindView(R.id.btn_oneMonth)
73 Button btnOneMonth; 74 Button btnOneMonth;
74 @BindView(R.id.btn_threeMonth) 75 @BindView(R.id.btn_threeMonth)
75 Button btnThreeMonth; 76 Button btnThreeMonth;
76 77
77 private Date mAnaDate; 78 private Date mAnaDate;
78 private Calendar mCalendar; 79 private Calendar mCalendar;
79 80
80 private int mAnaDay; 81 private int mAnaDay;
81 private int mAnaMonth; 82 private int mAnaMonth;
82 private int mAnaYear; 83 private int mAnaYear;
83 private Context mContext; 84 private Context mContext;
84 private Const.DATA_TYPE dataType; 85 private Const.DATA_TYPE dataType;
85 private Const.STEP_TYPE stepType; 86 private Const.STEP_TYPE stepType;
86 87
87 private List<HistoryItemInfo> mDataModWalking = new ArrayList<>(); 88 private List<HistoryItemInfo> mDataModWalking = new ArrayList<>();
88 private List<HistoryItemInfo> mDataModRunning = new ArrayList<>(); 89 private List<HistoryItemInfo> mDataModRunning = new ArrayList<>();
89 private List<HistoryItemInfo> mDataModBike = new ArrayList<>(); 90 private List<HistoryItemInfo> mDataModBike = new ArrayList<>();
90 private List<HistoryItemInfo> mDataCurrent = new ArrayList<>(); 91 private List<HistoryItemInfo> mDataCurrent = new ArrayList<>();
91 92
92 private HistoryFragment mHistoryFragment; 93 private HistoryFragment mHistoryFragment;
93 94
94 public void setRootFragment(HistoryFragment frag) { 95 public void setRootFragment(HistoryFragment frag) {
95 this.mHistoryFragment = frag; 96 this.mHistoryFragment = frag;
96 } 97 }
97 98
98 @Override 99 @Override
99 public View onCreateView(final LayoutInflater inflater,final ViewGroup container, 100 public View onCreateView(final LayoutInflater inflater,final ViewGroup container,
100 final Bundle savedInstanceState) { 101 final Bundle savedInstanceState) {
101 // Inflate the layout for this fragment 102 // Inflate the layout for this fragment
102 mRootView = inflater.inflate(R.layout.fragment_history_detail, null); 103 mRootView = inflater.inflate(R.layout.fragment_history_detail, null);
103 ButterKnife.bind(this, mRootView); 104 ButterKnife.bind(this, mRootView);
104 mContext = getActivity(); 105 mContext = getActivity();
105 initView(); 106 initView();
106 initData(); 107 initData();
107 108
108 return mRootView; 109 return mRootView;
109 } 110 }
110 111
111 private void initView() { 112 private void initView() {
112 113
113 } 114 }
114 115
115 /** 116 /**
116 * init data for 117 * init data for
117 */ 118 */
118 private void initData() { 119 private void initData() {
119 mCalendar = Calendar.getInstance(); 120 mCalendar = Calendar.getInstance();
120 mCalendar.setTime(new Date()); 121 mCalendar.setTime(new Date());
121 mAnaDate = mCalendar.getTime(); 122 mAnaDate = mCalendar.getTime();
122 mAnaYear = mCalendar.get(Calendar.YEAR); 123 mAnaYear = mCalendar.get(Calendar.YEAR);
123 mAnaMonth = mCalendar.get(Calendar.MONTH); 124 mAnaMonth = mCalendar.get(Calendar.MONTH);
124 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); 125 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH);
125 126
126 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); 127 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate));
127 tvWeekDay.setText(Utils.getWeekdayFromDate(mAnaDate)); 128 tvWeekDay.setText(Utils.getWeekdayFromDate(mAnaDate));
128 129
129 dataType = Const.DATA_TYPE.ONE_DAY; 130 dataType = Const.DATA_TYPE.ONE_DAY;
130 stepType = Const.STEP_TYPE.WALKING; 131 stepType = Const.STEP_TYPE.WALKING;
131 updateUiType(); 132 updateUiType();
132 updateUiStepType(false, true, false); 133 updateUiStepType(false, true, false);
133 134
134 getHistoryDetail(dataType, mAnaDate); 135 getHistoryDetail(dataType, mAnaDate);
135 } 136 }
136 137
137 138
138 /** 139 /**
139 * Show date picker dialog 140 * Show date picker dialog
140 */ 141 */
141 private void handleAnaDatePicker() { 142 private void handleAnaDatePicker() {
142 143
143 new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() { 144 new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {
144 @Override 145 @Override
145 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 146 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
146 147
147 mCalendar = Calendar.getInstance(); 148 mCalendar = Calendar.getInstance();
148 mCalendar.set(year, monthOfYear, dayOfMonth); 149 mCalendar.set(year, monthOfYear, dayOfMonth);
149 mAnaYear = year; 150 mAnaYear = year;
150 mAnaMonth = monthOfYear; 151 mAnaMonth = monthOfYear;
151 mAnaDay = dayOfMonth; 152 mAnaDay = dayOfMonth;
152 Date date = mCalendar.getTime(); 153 Date date = mCalendar.getTime();
153 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 154 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
154 tvWeekDay.setText(Utils.getWeekdayFromDate(date)); 155 tvWeekDay.setText(Utils.getWeekdayFromDate(date));
155 mAnaDate = date; 156 mAnaDate = date;
156 getHistoryDetail(dataType, mAnaDate); 157 getHistoryDetail(dataType, mAnaDate);
157 } 158 }
158 }, mAnaYear, mAnaMonth, mAnaDay).show(); 159 }, mAnaYear, mAnaMonth, mAnaDay).show();
159 160
160 } 161 }
161 162
162 private void updateUiType() { 163 private void updateUiType() {
163 if (dataType == Const.DATA_TYPE.ONE_DAY) { 164 if (dataType == Const.DATA_TYPE.ONE_DAY) {
164 setButtonSelected(true, false, false, false, false); 165 setButtonSelected(true, false, false, false, false);
165 } else if (dataType == Const.DATA_TYPE.ONE_WEEK) { 166 } else if (dataType == Const.DATA_TYPE.ONE_WEEK) {
166 setButtonSelected(false, true, false, false, false); 167 setButtonSelected(false, true, false, false, false);
167 } else if (dataType == Const.DATA_TYPE.ONE_MONTH) { 168 } else if (dataType == Const.DATA_TYPE.ONE_MONTH) {
168 setButtonSelected(false, false, true, false, false); 169 setButtonSelected(false, false, true, false, false);
169 } else if (dataType == Const.DATA_TYPE.THREE_MONTH){ 170 } else if (dataType == Const.DATA_TYPE.THREE_MONTH){
170 setButtonSelected(false, false, false, true, false); 171 setButtonSelected(false, false, false, true, false);
171 } else if (dataType == Const.DATA_TYPE.SIX_MONTH){ 172 } else if (dataType == Const.DATA_TYPE.SIX_MONTH){
172 setButtonSelected(false, false, false, false, true); 173 setButtonSelected(false, false, false, false, true);
173 } 174 }
174 } 175 }
175 176
176 private void setButtonSelected(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5 ) { 177 private void setButtonSelected(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5 ) {
177 btnOneDay.setSelected(b1); 178 btnOneDay.setSelected(b1);
178 btnOneWeek.setSelected(b2); 179 btnOneWeek.setSelected(b2);
179 btnOneMonth.setSelected(b3); 180 btnOneMonth.setSelected(b3);
180 btnThreeMonth.setSelected(b4); 181 btnThreeMonth.setSelected(b4);
181 btnSixMonth.setSelected(b5); 182 btnSixMonth.setSelected(b5);
182 } 183 }
183 184
184 private void updateUiStepType(boolean b1, boolean b2, boolean b3) { 185 private void updateUiStepType(boolean b1, boolean b2, boolean b3) {
185 llBike.setSelected(b1); 186 llBike.setSelected(b1);
186 llWalking.setSelected(b2); 187 llWalking.setSelected(b2);
187 llRunning.setSelected(b3); 188 llRunning.setSelected(b3);
188 } 189 }
189 190
190 private void updateUI(){ 191 private void updateUI(){
191 // get data server 192 // get data server
192 if (mDataCurrent != null && mDataCurrent.size() >0){ 193 if (mDataCurrent != null && mDataCurrent.size() >0){
193 mHistoreAdapter = new HistoryAdapter(mContext, mDataCurrent); 194 mHistoreAdapter = new HistoryAdapter(mContext, mDataCurrent);
194 lvHistory.setAdapter(mHistoreAdapter); 195 lvHistory.setAdapter(mHistoreAdapter);
195 lvHistory.setExpanded(true); 196 lvHistory.setExpanded(true);
196 } 197 }
197 } 198 }
198 199
199 private void getHistoryDetail(Const.DATA_TYPE dataType, Date toDate){ 200 private void getHistoryDetail(Const.DATA_TYPE dataType, Date toDate){
200 Date fromDate = Utils.getFromDate(mAnaDate, dataType); 201 Date fromDate = Utils.getFromDate(mAnaDate, dataType);
201 202
202 showDialog(mContext); 203 showDialog(mContext);
203 LLAPIManager.historyDetail(fromDate, toDate, new LLAPIManagerListener() { 204 ApiServices.historyDetail(fromDate, toDate, new LLAPIManagerListener() {
204 @Override 205 @Override
205 public void onError(Error error) { 206 public void onError(Error error) {
206 Debug.error("Get data history error"); 207 Debug.error("Get data history error");
207 hiddenDialog(); 208 hiddenDialog();
208 showDialogNotData(); 209 showDialogNotData();
209 } 210 }
210 211
211 @Override 212 @Override
212 public void onSuccess(String json) { 213 public void onSuccess(String json) {
213 Debug.error("Get data history success"); 214 Debug.error("Get data history success");
214 hiddenDialog(); 215 hiddenDialog();
215 loadDataDone(json); 216 loadDataDone(json);
216 } 217 }
217 218
218 @Override 219 @Override
219 public void onSuccess(JSONObject object) { 220 public void onSuccess(JSONObject object) {
220 Debug.error("Get data history success"); 221 Debug.error("Get data history success");
221 hiddenDialog(); 222 hiddenDialog();
222 } 223 }
223 }); 224 });
224 } 225 }
225 226
226 private void showDialogNotData(){ 227 private void showDialogNotData(){
227 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); 228 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data));
228 } 229 }
229 230
230 private void loadDataDone(String jsonString) { 231 private void loadDataDone(String jsonString) {
231 JSONObject jsonObject = null; 232 JSONObject jsonObject = null;
232 try { 233 try {
233 jsonObject = new JSONObject(jsonString); 234 jsonObject = new JSONObject(jsonString);
234 int status = jsonObject.optInt("status"); 235 int status = jsonObject.optInt("status");
235 if (status == 1) { 236 if (status == 1) {
236 JSONObject jsonObject1 = jsonObject.optJSONObject("result"); 237 JSONObject jsonObject1 = jsonObject.optJSONObject("result");
237 JSONObject jsonMod1 = jsonObject1.getJSONObject("mode_1"); 238 JSONObject jsonMod1 = jsonObject1.getJSONObject("mode_1");
238 JSONObject jsonMod2 = jsonObject1.getJSONObject("mode_2"); 239 JSONObject jsonMod2 = jsonObject1.getJSONObject("mode_2");
239 JSONObject jsonMod3 = jsonObject1.getJSONObject("mode_3"); 240 JSONObject jsonMod3 = jsonObject1.getJSONObject("mode_3");
240 //addDataModWalking(jsonMod1); 241 //addDataModWalking(jsonMod1);
241 //addDataModRunning(jsonMod2); 242 //addDataModRunning(jsonMod2);
242 //addDataModBike(jsonMod3); 243 //addDataModBike(jsonMod3);
243 244
244 } 245 }
245 } catch (JSONException e) { 246 } catch (JSONException e) {
246 e.printStackTrace(); 247 e.printStackTrace();
247 mDataModWalking.clear(); 248 mDataModWalking.clear();
248 mDataModRunning.clear();; 249 mDataModRunning.clear();;
249 mDataModBike.clear();; 250 mDataModBike.clear();;
250 } 251 }
251 252
252 if (stepType == Const.STEP_TYPE.WALKING){ 253 if (stepType == Const.STEP_TYPE.WALKING){
253 mDataCurrent = mDataModWalking; 254 mDataCurrent = mDataModWalking;
254 }else if (stepType == Const.STEP_TYPE.RUNNING){ 255 }else if (stepType == Const.STEP_TYPE.RUNNING){
255 mDataCurrent = mDataModRunning; 256 mDataCurrent = mDataModRunning;
256 }else { 257 }else {
257 mDataCurrent = mDataModBike; 258 mDataCurrent = mDataModBike;
258 } 259 }
259 260
260 updateUI(); 261 updateUI();
261 } 262 }
262 263
263 @OnClick({R.id.tv_date, R.id.btn_left_date, R.id.btn_right_date, R.id.btn_oneDay, R.id.btn_oneWeek, 264 @OnClick({R.id.tv_date, R.id.btn_left_date, R.id.btn_right_date, R.id.btn_oneDay, R.id.btn_oneWeek,
264 R.id.btn_oneMonth, R.id.btn_threeMonth, R.id.btn_sixMonth, R.id.ll_walking, R.id.ll_bike, 265 R.id.btn_oneMonth, R.id.btn_threeMonth, R.id.btn_sixMonth, R.id.ll_walking, R.id.ll_bike,
265 R.id.ll_running}) 266 R.id.ll_running})
266 public void onClick(View view){ 267 public void onClick(View view){
267 Date date; 268 Date date;
268 switch (view.getId()){ 269 switch (view.getId()){
269 case R.id.tv_date: 270 case R.id.tv_date:
270 handleAnaDatePicker(); 271 handleAnaDatePicker();
271 break; 272 break;
272 case R.id.btn_left_date: 273 case R.id.btn_left_date:
273 mCalendar = Calendar.getInstance(); 274 mCalendar = Calendar.getInstance();
274 mCalendar.setTime(mAnaDate); 275 mCalendar.setTime(mAnaDate);
275 mCalendar.add(Calendar.DAY_OF_MONTH, -1); 276 mCalendar.add(Calendar.DAY_OF_MONTH, -1);
276 date = mCalendar.getTime(); 277 date = mCalendar.getTime();
277 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 278 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
278 tvWeekDay.setText(Utils.getWeekdayFromDate(date)); 279 tvWeekDay.setText(Utils.getWeekdayFromDate(date));
279 mAnaDate = date; 280 mAnaDate = date;
280 getHistoryDetail(dataType, mAnaDate); 281 getHistoryDetail(dataType, mAnaDate);
281 break; 282 break;
282 283
283 case R.id.btn_right_date: 284 case R.id.btn_right_date:
284 mCalendar = Calendar.getInstance(); 285 mCalendar = Calendar.getInstance();
285 mCalendar.setTime(mAnaDate); 286 mCalendar.setTime(mAnaDate);
286 mCalendar.add(Calendar.DAY_OF_MONTH, +1); 287 mCalendar.add(Calendar.DAY_OF_MONTH, +1);
287 date = mCalendar.getTime(); 288 date = mCalendar.getTime();
288 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 289 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
289 tvWeekDay.setText(Utils.getWeekdayFromDate(date)); 290 tvWeekDay.setText(Utils.getWeekdayFromDate(date));
290 mAnaDate = date; 291 mAnaDate = date;
291 getHistoryDetail(dataType, mAnaDate); 292 getHistoryDetail(dataType, mAnaDate);
292 break; 293 break;
293 294
294 case R.id.btn_oneDay: 295 case R.id.btn_oneDay:
295 dataType = Const.DATA_TYPE.ONE_DAY; 296 dataType = Const.DATA_TYPE.ONE_DAY;
296 updateUiType(); 297 updateUiType();
297 getHistoryDetail(dataType, mAnaDate); 298 getHistoryDetail(dataType, mAnaDate);
298 break; 299 break;
299 300
300 case R.id.btn_oneWeek: 301 case R.id.btn_oneWeek:
301 dataType = Const.DATA_TYPE.ONE_WEEK; 302 dataType = Const.DATA_TYPE.ONE_WEEK;
302 updateUiType(); 303 updateUiType();
303 getHistoryDetail(dataType, mAnaDate); 304 getHistoryDetail(dataType, mAnaDate);
304 break; 305 break;
305 306
306 case R.id.btn_oneMonth: 307 case R.id.btn_oneMonth:
307 dataType = Const.DATA_TYPE.ONE_MONTH; 308 dataType = Const.DATA_TYPE.ONE_MONTH;
308 updateUiType(); 309 updateUiType();
309 getHistoryDetail(dataType, mAnaDate); 310 getHistoryDetail(dataType, mAnaDate);
310 break; 311 break;
311 312
312 case R.id.btn_threeMonth: 313 case R.id.btn_threeMonth:
313 dataType = Const.DATA_TYPE.THREE_MONTH; 314 dataType = Const.DATA_TYPE.THREE_MONTH;
314 updateUiType(); 315 updateUiType();
315 getHistoryDetail(dataType, mAnaDate); 316 getHistoryDetail(dataType, mAnaDate);
316 break; 317 break;
317 318
318 case R.id.btn_sixMonth: 319 case R.id.btn_sixMonth:
319 dataType = Const.DATA_TYPE.SIX_MONTH; 320 dataType = Const.DATA_TYPE.SIX_MONTH;
320 updateUiType(); 321 updateUiType();
321 getHistoryDetail(dataType, mAnaDate); 322 getHistoryDetail(dataType, mAnaDate);
322 break; 323 break;
323 324
324 case R.id.ll_walking: 325 case R.id.ll_walking:
325 stepType = Const.STEP_TYPE.WALKING; 326 stepType = Const.STEP_TYPE.WALKING;
326 updateUiStepType(false, true, false); 327 updateUiStepType(false, true, false);
327 // add data 328 // add data
328 mDataCurrent = mDataModWalking; 329 mDataCurrent = mDataModWalking;
329 updateUI(); 330 updateUI();
330 break; 331 break;
331 332
332 case R.id.ll_running: 333 case R.id.ll_running:
333 stepType = Const.STEP_TYPE.RUNNING; 334 stepType = Const.STEP_TYPE.RUNNING;
334 updateUiStepType(false, false, true); 335 updateUiStepType(false, false, true);
335 // add 336 // add
336 mDataCurrent = mDataModRunning; 337 mDataCurrent = mDataModRunning;
337 updateUI(); 338 updateUI();
338 break; 339 break;
339 340
340 case R.id.ll_bike: 341 case R.id.ll_bike:
341 stepType = Const.STEP_TYPE.BIKE; 342 stepType = Const.STEP_TYPE.BIKE;
342 updateUiStepType(true, false, false); 343 updateUiStepType(true, false, false);
343 // add data 344 // add data
344 mDataCurrent = mDataModBike; 345 mDataCurrent = mDataModBike;
345 updateUI(); 346 updateUI();
346 break; 347 break;
347 348
348 default: 349 default:
349 break; 350 break;
350 351
351 } 352 }
352 } 353 }
353 354
354 355
355 } 356 }
356 357
app/src/main/java/com/dinhcv/lifelogpedometer/activity/InputConfirmCodeActivity.java
1 package com.dinhcv.lifelogpedometer.activity; 1 package com.dinhcv.lifelogpedometer.activity;
2 2
3 import android.app.AlertDialog; 3 import android.app.AlertDialog;
4 import android.app.ProgressDialog; 4 import android.app.ProgressDialog;
5 import android.content.DialogInterface; 5 import android.content.DialogInterface;
6 import android.content.Intent; 6 import android.content.Intent;
7 import android.os.Bundle; 7 import android.os.Bundle;
8 import android.view.View; 8 import android.view.View;
9 import android.view.WindowManager; 9 import android.view.WindowManager;
10 import android.widget.Button; 10 import android.widget.Button;
11 import android.widget.TextView; 11 import android.widget.TextView;
12 12
13 import com.dinhcv.lifelogpedometer.R; 13 import com.dinhcv.lifelogpedometer.R;
14 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 14 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
15 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; 15 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
16 import com.dinhcv.lifelogpedometer.portal.ApiServices;
16 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 17 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
17 import com.dinhcv.lifelogpedometer.utils.Const; 18 import com.dinhcv.lifelogpedometer.utils.Const;
18 import com.dinhcv.lifelogpedometer.utils.Debug; 19 import com.dinhcv.lifelogpedometer.utils.Debug;
19 20
20 import org.json.JSONObject; 21 import org.json.JSONObject;
21 22
22 import butterknife.BindView; 23 import butterknife.BindView;
23 import butterknife.ButterKnife; 24 import butterknife.ButterKnife;
24 import butterknife.OnClick; 25 import butterknife.OnClick;
25 26
26 public class InputConfirmCodeActivity extends ActivityBase { 27 public class InputConfirmCodeActivity extends ActivityBase {
27 28
28 @BindView(R.id.edt_confirmCode) 29 @BindView(R.id.edt_confirmCode)
29 TextView edtConfirmCode; 30 TextView edtConfirmCode;
30 @BindView(R.id.btn_confirm) 31 @BindView(R.id.btn_confirm)
31 Button btnConfirm; 32 Button btnConfirm;
32 33
33 private ProgressDialog progressDialog; 34 private ProgressDialog progressDialog;
34 private String mEmail; 35 private String mEmail;
35 36
36 @Override 37 @Override
37 protected void onCreate(Bundle savedInstanceState) { 38 protected void onCreate(Bundle savedInstanceState) {
38 super.onCreate(savedInstanceState); 39 super.onCreate(savedInstanceState);
39 setContentView(R.layout.activity_input_confirm_code); 40 setContentView(R.layout.activity_input_confirm_code);
40 ButterKnife.bind(this); 41 ButterKnife.bind(this);
41 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 42 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
42 Intent intent = getIntent(); 43 Intent intent = getIntent();
43 if (intent != null) { 44 if (intent != null) {
44 mEmail = intent.getStringExtra(Const.EMAIL); 45 mEmail = intent.getStringExtra(Const.EMAIL);
45 Debug.normal("Email request: "+mEmail); 46 Debug.normal("Email request: "+mEmail);
46 if(mEmail == null){ 47 if(mEmail == null){
47 Debug.error("Email is null"); 48 Debug.error("Email is null");
48 return; 49 return;
49 } 50 }
50 }else { 51 }else {
51 Debug.error("Email is null"); 52 Debug.error("Email is null");
52 return; 53 return;
53 } 54 }
54 55
55 } 56 }
56 57
57 private void handleGetNewPass(String code){ 58 private void handleGetNewPass(String code){
58 progressDialog = new ProgressDialog(InputConfirmCodeActivity.this); 59 progressDialog = new ProgressDialog(InputConfirmCodeActivity.this);
59 progressDialog.setMessage(getResources().getString(R.string.waite_some_minute)); 60 progressDialog.setMessage(getResources().getString(R.string.waite_some_minute));
60 progressDialog.setCancelable(false); 61 progressDialog.setCancelable(false);
61 progressDialog.show(); 62 progressDialog.show();
62 63
63 LLAPIManager.forgetPassConfirm(mEmail, code, new LLAPIManagerListener() { 64 ApiServices.forgetPassConfirm(mEmail, code, new LLAPIManagerListener() {
64 @Override 65 @Override
65 public void onError(Error error) { 66 public void onError(Error error) {
66 progressDialog.dismiss(); 67 progressDialog.dismiss();
67 Debug.error("Send confirm JSON result: ERROR " + error); 68 Debug.error("Send confirm JSON result: ERROR " + error);
68 String err = getResources().getString(R.string.request_pass_error); 69 String err = getResources().getString(R.string.request_pass_error);
69 notifyErr(err); 70 notifyErr(err);
70 } 71 }
71 72
72 @Override 73 @Override
73 public void onSuccess(String json) { 74 public void onSuccess(String json) {
74 Debug.warn("Send confirm JSON result: " + json.toString()); 75 Debug.warn("Send confirm JSON result: " + json.toString());
75 progressDialog.dismiss(); 76 progressDialog.dismiss();
76 77
77 confirmDone(); 78 confirmDone();
78 } 79 }
79 80
80 @Override 81 @Override
81 public void onSuccess(JSONObject object) { 82 public void onSuccess(JSONObject object) {
82 Debug.warn("Send confirm JSON object result: Success"); 83 Debug.warn("Send confirm JSON object result: Success");
83 progressDialog.dismiss(); 84 progressDialog.dismiss();
84 } 85 }
85 }); 86 });
86 } 87 }
87 88
88 private void confirmDone(){ 89 private void confirmDone(){
89 AlertDialog.Builder alertDialog = new AlertDialog.Builder(InputConfirmCodeActivity.this); 90 AlertDialog.Builder alertDialog = new AlertDialog.Builder(InputConfirmCodeActivity.this);
90 alertDialog.setMessage(getResources().getString(R.string.password_have_send)); 91 alertDialog.setMessage(getResources().getString(R.string.password_have_send));
91 alertDialog.setCancelable(false); 92 alertDialog.setCancelable(false);
92 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 93 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
93 @Override 94 @Override
94 public void onClick(DialogInterface dialog, int which) { 95 public void onClick(DialogInterface dialog, int which) {
95 finish(); 96 finish();
96 } 97 }
97 }); 98 });
98 alertDialog.show(); 99 alertDialog.show();
99 } 100 }
100 101
101 private void notifyErr(String err) { 102 private void notifyErr(String err) {
102 AlertDialog.Builder alertDialog = new AlertDialog.Builder(InputConfirmCodeActivity.this); 103 AlertDialog.Builder alertDialog = new AlertDialog.Builder(InputConfirmCodeActivity.this);
103 alertDialog.setMessage(err); 104 alertDialog.setMessage(err);
104 alertDialog.setCancelable(false); 105 alertDialog.setCancelable(false);
105 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 106 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
106 @Override 107 @Override
107 public void onClick(DialogInterface dialog, int which) { 108 public void onClick(DialogInterface dialog, int which) {
108 finish(); 109 finish();
109 } 110 }
110 }); 111 });
111 alertDialog.show(); 112 alertDialog.show();
112 } 113 }
113 114
114 @OnClick({R.id.btn_confirm}) 115 @OnClick({R.id.btn_confirm})
115 public void onClick(View v) { 116 public void onClick(View v) {
116 switch (v.getId()) { 117 switch (v.getId()) {
117 case R.id.btn_confirm: 118 case R.id.btn_confirm:
118 // handle login 119 // handle login
119 String code = edtConfirmCode.getText().toString(); 120 String code = edtConfirmCode.getText().toString();
120 if (code.isEmpty()){ 121 if (code.isEmpty()){
121 showAlerDialog(InputConfirmCodeActivity.this, getResources().getString(R.string.please_input_confirm)); 122 showAlerDialog(InputConfirmCodeActivity.this, getResources().getString(R.string.please_input_confirm));
122 return; 123 return;
123 } 124 }
124 125
125 handleGetNewPass(code); 126 handleGetNewPass(code);
126 break; 127 break;
127 128
128 default: 129 default:
129 break; 130 break;
130 } 131 }
131 } 132 }
132 } 133 }
133 134
app/src/main/java/com/dinhcv/lifelogpedometer/activity/LoginActivity.java
1 package com.dinhcv.lifelogpedometer.activity; 1 package com.dinhcv.lifelogpedometer.activity;
2 2
3 import android.app.AlertDialog; 3 import android.app.AlertDialog;
4 import android.app.ProgressDialog; 4 import android.app.ProgressDialog;
5 import android.content.DialogInterface; 5 import android.content.DialogInterface;
6 import android.content.Intent; 6 import android.content.Intent;
7 import android.os.Bundle; 7 import android.os.Bundle;
8 import android.view.View; 8 import android.view.View;
9 import android.view.WindowManager; 9 import android.view.WindowManager;
10 import android.widget.Button; 10 import android.widget.Button;
11 import android.widget.TextView; 11 import android.widget.TextView;
12 12
13 import com.dinhcv.lifelogpedometer.R; 13 import com.dinhcv.lifelogpedometer.R;
14 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 14 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
15 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; 15 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
16 import com.dinhcv.lifelogpedometer.portal.ApiServices;
16 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 17 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
17 import com.dinhcv.lifelogpedometer.utils.Const; 18 import com.dinhcv.lifelogpedometer.utils.Const;
18 import com.dinhcv.lifelogpedometer.utils.Debug; 19 import com.dinhcv.lifelogpedometer.utils.Debug;
19 20
20 import org.json.JSONObject; 21 import org.json.JSONObject;
21 22
22 import butterknife.BindView; 23 import butterknife.BindView;
23 import butterknife.ButterKnife; 24 import butterknife.ButterKnife;
24 import butterknife.OnClick; 25 import butterknife.OnClick;
25 26
26 public class LoginActivity extends ActivityBase { 27 public class LoginActivity extends ActivityBase {
27 28
28 @BindView(R.id.edt_user) 29 @BindView(R.id.edt_user)
29 TextView edtUser; 30 TextView edtUser;
30 @BindView(R.id.edt_password) 31 @BindView(R.id.edt_password)
31 TextView edtPassword; 32 TextView edtPassword;
32 @BindView(R.id.btn_login) 33 @BindView(R.id.btn_login)
33 Button btnLogin; 34 Button btnLogin;
34 @BindView(R.id.btn_register) 35 @BindView(R.id.btn_register)
35 Button btnRegister; 36 Button btnRegister;
36 @BindView(R.id.tv_forgetPass) 37 @BindView(R.id.tv_forgetPass)
37 TextView tvForgetPass; 38 TextView tvForgetPass;
38 39
39 40
40 private ProgressDialog progressDialog; 41 private ProgressDialog progressDialog;
41 42
42 @Override 43 @Override
43 protected void onCreate(Bundle savedInstanceState) { 44 protected void onCreate(Bundle savedInstanceState) {
44 super.onCreate(savedInstanceState); 45 super.onCreate(savedInstanceState);
45 setContentView(R.layout.activity_login); 46 setContentView(R.layout.activity_login);
46 ButterKnife.bind(this); 47 ButterKnife.bind(this);
47 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 48 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
48 49
49 initData(); 50 initData();
50 51
51 } 52 }
52 53
53 54
54 private void initData() { 55 private void initData() {
55 56
56 } 57 }
57 58
58 private boolean verifyData(String user, String pass) { 59 private boolean verifyData(String user, String pass) {
59 if (user.isEmpty()) { 60 if (user.isEmpty()) {
60 showAlerDialog(LoginActivity.this, getResources().getString(R.string.account_is_null)); 61 showAlerDialog(LoginActivity.this, getResources().getString(R.string.account_is_null));
61 return false; 62 return false;
62 } 63 }
63 64
64 if (pass.isEmpty()) { 65 if (pass.isEmpty()) {
65 showAlerDialog(LoginActivity.this, getResources().getString(R.string.password_is_null)); 66 showAlerDialog(LoginActivity.this, getResources().getString(R.string.password_is_null));
66 return false; 67 return false;
67 } 68 }
68 69
69 return true; 70 return true;
70 } 71 }
71 72
72 private void handleLogin() { 73 private void handleLogin() {
73 final String user = edtUser.getText().toString(); 74 final String user = edtUser.getText().toString();
74 String pass = edtPassword.getText().toString(); 75 String pass = edtPassword.getText().toString();
75 76
76 // verify 77 // verify
77 boolean isOk = verifyData(user, pass); 78 boolean isOk = verifyData(user, pass);
78 if (!isOk) { 79 if (!isOk) {
79 return; 80 return;
80 } 81 }
81 82
82 progressDialog = new ProgressDialog(LoginActivity.this); 83 progressDialog = new ProgressDialog(LoginActivity.this);
83 progressDialog.setMessage(getResources().getString(R.string.waite_some_minute)); 84 progressDialog.setMessage(getResources().getString(R.string.waite_some_minute));
84 progressDialog.setCancelable(false); 85 progressDialog.setCancelable(false);
85 progressDialog.show(); 86 progressDialog.show();
86 87
87 LLAPIManager.login(LoginActivity.this, user, pass, new LLAPIManagerListener() { 88 ApiServices.login(LoginActivity.this, user, pass, new LLAPIManagerListener() {
88 @Override 89 @Override
89 public void onError(Error error) { 90 public void onError(Error error) {
90 progressDialog.dismiss(); 91 progressDialog.dismiss();
91 Debug.error("Version JSON result: ERROR " + error); 92 Debug.error("Version JSON result: ERROR " + error);
92 String err = getResources().getString(R.string.login_error); 93 String err = getResources().getString(R.string.login_error);
93 notifyErr(err); 94 notifyErr(err);
94 } 95 }
95 96
96 @Override 97 @Override
97 public void onSuccess(String json) { 98 public void onSuccess(String json) {
98 Debug.warn("Version JSON result: " + json.toString()); 99 Debug.warn("Version JSON result: " + json.toString());
99 progressDialog.dismiss(); 100 progressDialog.dismiss();
100 } 101 }
101 102
102 @Override 103 @Override
103 public void onSuccess(JSONObject object) { 104 public void onSuccess(JSONObject object) {
104 Debug.warn("Version JSON object result: Success"); 105 Debug.warn("Version JSON object result: Success");
105 progressDialog.dismiss(); 106 progressDialog.dismiss();
106 107
107 String email = object.optString("email"); 108 String email = object.optString("email");
108 String username = object.optString("username"); 109 String username = object.optString("username");
109 String pass = object.optString("password"); 110 String pass = object.optString("password");
110 int id = object.optInt("id"); 111 int id = object.optInt("id");
111 Debug.normal("Email: "+email +"\n"+ "Username: "+username); 112 Debug.normal("Email: "+email +"\n"+ "Username: "+username);
112 // save data 113 // save data
113 Setting.setUserIdSharepre(LoginActivity.this, id); 114 Setting.setUserIdSharepre(LoginActivity.this, id);
114 Setting.setUserDataSharepre(LoginActivity.this, Setting.EMAIL_SHAREPRE, email); 115 Setting.setUserDataSharepre(LoginActivity.this, Setting.EMAIL_SHAREPRE, email);
115 Setting.setUserDataSharepre(LoginActivity.this, Setting.USER_SHAREPRE, username); 116 Setting.setUserDataSharepre(LoginActivity.this, Setting.USER_SHAREPRE, username);
116 Setting.setUserDataSharepre(LoginActivity.this, Setting.PASS_SHAREPRE, pass); 117 Setting.setUserDataSharepre(LoginActivity.this, Setting.PASS_SHAREPRE, pass);
117 loginDone(); 118 loginDone();
118 } 119 }
119 }); 120 });
120 } 121 }
121 122
122 private void loginDone(){ 123 private void loginDone(){
123 Intent intent = new Intent(LoginActivity.this, PedometerActivity.class); 124 Intent intent = new Intent(LoginActivity.this, PedometerActivity.class);
124 startActivity(intent); 125 startActivity(intent);
125 } 126 }
126 127
127 private void handleSendConfirm(final String email){ 128 private void handleSendConfirm(final String email){
128 progressDialog = new ProgressDialog(LoginActivity.this); 129 progressDialog = new ProgressDialog(LoginActivity.this);
129 progressDialog.setMessage(getResources().getString(R.string.waite_some_minute)); 130 progressDialog.setMessage(getResources().getString(R.string.waite_some_minute));
130 progressDialog.setCancelable(false); 131 progressDialog.setCancelable(false);
131 progressDialog.show(); 132 progressDialog.show();
132 133
133 LLAPIManager.forgetPass(email, new LLAPIManagerListener() { 134 ApiServices.forgetPass(email, new LLAPIManagerListener() {
134 @Override 135 @Override
135 public void onError(Error error) { 136 public void onError(Error error) {
136 progressDialog.dismiss(); 137 progressDialog.dismiss();
137 Debug.error("Send confirm JSON result: ERROR " + error); 138 Debug.error("Send confirm JSON result: ERROR " + error);
138 String err = getResources().getString(R.string.request_pass_error); 139 String err = getResources().getString(R.string.request_pass_error);
139 notifyErr(err); 140 notifyErr(err);
140 } 141 }
141 142
142 @Override 143 @Override
143 public void onSuccess(String json) { 144 public void onSuccess(String json) {
144 Debug.warn("Send confirm JSON result: " + json.toString()); 145 Debug.warn("Send confirm JSON result: " + json.toString());
145 progressDialog.dismiss(); 146 progressDialog.dismiss();
146 147
147 confirmDone(email); 148 confirmDone(email);
148 } 149 }
149 150
150 @Override 151 @Override
151 public void onSuccess(JSONObject object) { 152 public void onSuccess(JSONObject object) {
152 Debug.warn("Send confirm JSON object result: Success"); 153 Debug.warn("Send confirm JSON object result: Success");
153 progressDialog.dismiss(); 154 progressDialog.dismiss();
154 } 155 }
155 }); 156 });
156 } 157 }
157 158
158 private void confirmDone(String email){ 159 private void confirmDone(String email){
159 Intent intent = new Intent(LoginActivity.this, InputConfirmCodeActivity.class); 160 Intent intent = new Intent(LoginActivity.this, InputConfirmCodeActivity.class);
160 intent.putExtra(Const.EMAIL, email ); 161 intent.putExtra(Const.EMAIL, email );
161 startActivity(intent); 162 startActivity(intent);
162 } 163 }
163 164
164 private void notifyErr(String err) { 165 private void notifyErr(String err) {
165 AlertDialog.Builder alertDialog = new AlertDialog.Builder(LoginActivity.this); 166 AlertDialog.Builder alertDialog = new AlertDialog.Builder(LoginActivity.this);
166 alertDialog.setMessage(err); 167 alertDialog.setMessage(err);
167 alertDialog.setCancelable(false); 168 alertDialog.setCancelable(false);
168 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 169 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
169 @Override 170 @Override
170 public void onClick(DialogInterface dialog, int which) { 171 public void onClick(DialogInterface dialog, int which) {
171 //finish(); 172 //finish();
172 edtUser.setText(""); 173 edtUser.setText("");
173 edtPassword.setText(""); 174 edtPassword.setText("");
174 } 175 }
175 }); 176 });
176 alertDialog.show(); 177 alertDialog.show();
177 } 178 }
178 179
179 @OnClick({R.id.btn_login, R.id.btn_register, R.id.tv_forgetPass}) 180 @OnClick({R.id.btn_login, R.id.btn_register, R.id.tv_forgetPass})
180 public void onClick(View v) { 181 public void onClick(View v) {
181 switch (v.getId()) { 182 switch (v.getId()) {
182 case R.id.btn_login: 183 case R.id.btn_login:
183 // handle login 184 // handle login
184 handleLogin(); 185 handleLogin();
185 break; 186 break;
186 case R.id.btn_register: 187 case R.id.btn_register:
187 // hanle register 188 // hanle register
188 Intent intent = new Intent(LoginActivity.this, RegisterActivity.class); 189 Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
189 startActivity(intent); 190 startActivity(intent);
190 break; 191 break;
191 192
192 case R.id.tv_forgetPass: 193 case R.id.tv_forgetPass:
193 // hanle register 194 // hanle register
194 String email = edtUser.getText().toString(); 195 String email = edtUser.getText().toString();
195 if (email.isEmpty()){ 196 if (email.isEmpty()){
196 showAlerDialog(LoginActivity.this, getResources().getString(R.string.please_input_email)); 197 showAlerDialog(LoginActivity.this, getResources().getString(R.string.please_input_email));
197 return; 198 return;
198 } 199 }
199 200
200 handleSendConfirm(email); 201 handleSendConfirm(email);
201 202
202 break; 203 break;
203 204
204 default: 205 default:
205 break; 206 break;
206 } 207 }
207 } 208 }
208 } 209 }
209 210
app/src/main/java/com/dinhcv/lifelogpedometer/activity/RegisterActivity.java
1 package com.dinhcv.lifelogpedometer.activity; 1 package com.dinhcv.lifelogpedometer.activity;
2 2
3 import android.app.AlertDialog; 3 import android.app.AlertDialog;
4 import android.app.DatePickerDialog; 4 import android.app.DatePickerDialog;
5 import android.app.ProgressDialog; 5 import android.app.ProgressDialog;
6 import android.content.DialogInterface; 6 import android.content.DialogInterface;
7 import android.content.Intent; 7 import android.content.Intent;
8 import android.graphics.Bitmap; 8 import android.graphics.Bitmap;
9 import android.graphics.BitmapFactory; 9 import android.graphics.BitmapFactory;
10 import android.net.Uri; 10 import android.net.Uri;
11 import android.os.AsyncTask; 11 import android.os.AsyncTask;
12 import android.os.Bundle; 12 import android.os.Bundle;
13 import android.view.View; 13 import android.view.View;
14 import android.view.WindowManager; 14 import android.view.WindowManager;
15 import android.widget.DatePicker; 15 import android.widget.DatePicker;
16 import android.widget.EditText; 16 import android.widget.EditText;
17 import android.widget.LinearLayout; 17 import android.widget.LinearLayout;
18 import android.widget.TextView; 18 import android.widget.TextView;
19 import android.widget.Toast; 19 import android.widget.Toast;
20 20
21 import com.dinhcv.lifelogpedometer.LifeLogApplication; 21 import com.dinhcv.lifelogpedometer.LifeLogApplication;
22 import com.dinhcv.lifelogpedometer.R; 22 import com.dinhcv.lifelogpedometer.R;
23 import com.dinhcv.lifelogpedometer.customview.SimpleSelectBoxDialogBuilder; 23 import com.dinhcv.lifelogpedometer.customview.SimpleSelectBoxDialogBuilder;
24 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 24 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
25 import com.dinhcv.lifelogpedometer.interfaces.OnSelectResultListener; 25 import com.dinhcv.lifelogpedometer.interfaces.OnSelectResultListener;
26 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; 26 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
27 import com.dinhcv.lifelogpedometer.model.structure.RegisterInfo; 27 import com.dinhcv.lifelogpedometer.model.structure.RegisterInfo;
28 import com.dinhcv.lifelogpedometer.model.structure.SelectItemInfo; 28 import com.dinhcv.lifelogpedometer.model.structure.SelectItemInfo;
29 import com.dinhcv.lifelogpedometer.portal.ApiServices;
29 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 30 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
30 import com.dinhcv.lifelogpedometer.utils.Debug; 31 import com.dinhcv.lifelogpedometer.utils.Debug;
31 import com.dinhcv.lifelogpedometer.utils.Utils; 32 import com.dinhcv.lifelogpedometer.utils.Utils;
32 33
33 import org.json.JSONArray; 34 import org.json.JSONArray;
34 import org.json.JSONObject; 35 import org.json.JSONObject;
35 36
36 import java.io.FileNotFoundException; 37 import java.io.FileNotFoundException;
37 import java.io.InputStream; 38 import java.io.InputStream;
38 import java.util.Calendar; 39 import java.util.Calendar;
39 import java.util.Date; 40 import java.util.Date;
40 import java.util.List; 41 import java.util.List;
41 42
42 import butterknife.BindView; 43 import butterknife.BindView;
43 import butterknife.ButterKnife; 44 import butterknife.ButterKnife;
44 import butterknife.OnClick; 45 import butterknife.OnClick;
45 import de.hdodenhof.circleimageview.CircleImageView; 46 import de.hdodenhof.circleimageview.CircleImageView;
46 47
47 public class RegisterActivity extends ActivityBase { 48 public class RegisterActivity extends ActivityBase {
48 49
49 @BindView(R.id.edt_user) 50 @BindView(R.id.edt_user)
50 EditText edtUsername; 51 EditText edtUsername;
51 @BindView(R.id.edt_name) 52 @BindView(R.id.edt_name)
52 EditText edtName; 53 EditText edtName;
53 @BindView(R.id.edt_nickName) 54 @BindView(R.id.edt_nickName)
54 EditText edtNickName; 55 EditText edtNickName;
55 @BindView(R.id.edt_email) 56 @BindView(R.id.edt_email)
56 EditText edtEmail; 57 EditText edtEmail;
57 @BindView(R.id.edt_password) 58 @BindView(R.id.edt_password)
58 EditText edtPassword; 59 EditText edtPassword;
59 @BindView(R.id.edt_confirmPass) 60 @BindView(R.id.edt_confirmPass)
60 EditText edtConfirmPass; 61 EditText edtConfirmPass;
61 @BindView(R.id.tv_sex) 62 @BindView(R.id.tv_sex)
62 TextView tvSex; 63 TextView tvSex;
63 @BindView(R.id.tv_birthday) 64 @BindView(R.id.tv_birthday)
64 TextView tvBirthday; 65 TextView tvBirthday;
65 @BindView(R.id.edt_height) 66 @BindView(R.id.edt_height)
66 EditText edtHeight; 67 EditText edtHeight;
67 @BindView(R.id.edt_weight) 68 @BindView(R.id.edt_weight)
68 EditText edtWeight; 69 EditText edtWeight;
69 @BindView(R.id.edt_bodyFat) 70 @BindView(R.id.edt_bodyFat)
70 EditText edtBodyFat; 71 EditText edtBodyFat;
71 @BindView(R.id.tv_address) 72 @BindView(R.id.tv_address)
72 TextView tvAddress; 73 TextView tvAddress;
73 @BindView(R.id.edt_comment) 74 @BindView(R.id.edt_comment)
74 EditText edtComment; 75 EditText edtComment;
75 76
76 @BindView(R.id.ll_low) 77 @BindView(R.id.ll_low)
77 LinearLayout llLow; 78 LinearLayout llLow;
78 @BindView(R.id.tv_low) 79 @BindView(R.id.tv_low)
79 TextView tvLow; 80 TextView tvLow;
80 @BindView(R.id.ll_mid) 81 @BindView(R.id.ll_mid)
81 LinearLayout llMid; 82 LinearLayout llMid;
82 @BindView(R.id.tv_mid) 83 @BindView(R.id.tv_mid)
83 TextView tvMid; 84 TextView tvMid;
84 @BindView(R.id.ll_hight) 85 @BindView(R.id.ll_hight)
85 LinearLayout llHight; 86 LinearLayout llHight;
86 @BindView(R.id.tv_hight) 87 @BindView(R.id.tv_hight)
87 TextView tvHight; 88 TextView tvHight;
88 @BindView(R.id.profile_image) 89 @BindView(R.id.profile_image)
89 CircleImageView profileImage; 90 CircleImageView profileImage;
90 91
91 private List<SelectItemInfo> sexList; 92 private List<SelectItemInfo> sexList;
92 private List<SelectItemInfo> provinceList; 93 private List<SelectItemInfo> provinceList;
93 private LifeLogApplication mLifeLogApplication; 94 private LifeLogApplication mLifeLogApplication;
94 private SelectItemInfo sexInfo; 95 private SelectItemInfo sexInfo;
95 private SelectItemInfo provinceInfo; 96 private SelectItemInfo provinceInfo;
96 97
97 private Calendar mCalendar; 98 private Calendar mCalendar;
98 private int mDay; 99 private int mDay;
99 private int mMonth; 100 private int mMonth;
100 private int mYear; 101 private int mYear;
101 private Date mBirthDay; 102 private Date mBirthDay;
102 103
103 private int level = 0; 104 private int level = 0;
104 private static final int RESULT_LOAD_IMG = 99; 105 private static final int RESULT_LOAD_IMG = 99;
105 private RegisterInfo mRegisterInfo; 106 private RegisterInfo mRegisterInfo;
106 private String profileImagePath; 107 private String profileImagePath;
107 private ProgressDialog progressDialog; 108 private ProgressDialog progressDialog;
108 109
109 @Override 110 @Override
110 protected void onCreate(Bundle savedInstanceState) { 111 protected void onCreate(Bundle savedInstanceState) {
111 super.onCreate(savedInstanceState); 112 super.onCreate(savedInstanceState);
112 setContentView(R.layout.activity_register); 113 setContentView(R.layout.activity_register);
113 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 114 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
114 115
115 ButterKnife.bind(this); 116 ButterKnife.bind(this);
116 mLifeLogApplication = (LifeLogApplication) getApplication(); 117 mLifeLogApplication = (LifeLogApplication) getApplication();
117 118
118 initData(); 119 initData();
119 120
120 initView(); 121 initView();
121 122
122 } 123 }
123 124
124 private void initData() { 125 private void initData() {
125 sexList = mLifeLogApplication.getSexList(); 126 sexList = mLifeLogApplication.getSexList();
126 provinceList = mLifeLogApplication.getProvinceList(); 127 provinceList = mLifeLogApplication.getProvinceList();
127 128
128 mCalendar = Calendar.getInstance(); 129 mCalendar = Calendar.getInstance();
129 mDay = mCalendar.get(Calendar.DAY_OF_MONTH); 130 mDay = mCalendar.get(Calendar.DAY_OF_MONTH);
130 mMonth = mCalendar.get(Calendar.MONTH); 131 mMonth = mCalendar.get(Calendar.MONTH);
131 mYear = mCalendar.get(Calendar.YEAR); 132 mYear = mCalendar.get(Calendar.YEAR);
132 } 133 }
133 134
134 135
135 private void initView() { 136 private void initView() {
136 137
137 138
138 } 139 }
139 140
140 private boolean checkData() { 141 private boolean checkData() {
141 String userName = edtUsername.getText().toString(); 142 String userName = edtUsername.getText().toString();
142 String name = edtName.getText().toString(); 143 String name = edtName.getText().toString();
143 String nickName = edtNickName.getText().toString(); 144 String nickName = edtNickName.getText().toString();
144 String email = edtEmail.getText().toString(); 145 String email = edtEmail.getText().toString();
145 String pass = edtPassword.getText().toString(); 146 String pass = edtPassword.getText().toString();
146 String confirmPass = edtConfirmPass.getText().toString(); 147 String confirmPass = edtConfirmPass.getText().toString();
147 //sexInfo 148 //sexInfo
148 //birthday 149 //birthday
149 String height = edtHeight.getText().toString(); 150 String height = edtHeight.getText().toString();
150 String weight = edtWeight.getText().toString(); 151 String weight = edtWeight.getText().toString();
151 String bodyFat = edtBodyFat.getText().toString(); 152 String bodyFat = edtBodyFat.getText().toString();
152 // address 153 // address
153 String comment = edtComment.getText().toString(); 154 String comment = edtComment.getText().toString();
154 155
155 156
156 if (userName.isEmpty()) { 157 if (userName.isEmpty()) {
157 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.username_null)); 158 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.username_null));
158 return false; 159 return false;
159 } 160 }
160 161
161 if (name.isEmpty()) { 162 if (name.isEmpty()) {
162 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.name_null)); 163 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.name_null));
163 return false; 164 return false;
164 } 165 }
165 166
166 if (nickName.isEmpty()) { 167 if (nickName.isEmpty()) {
167 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.nickname_null)); 168 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.nickname_null));
168 return false; 169 return false;
169 } 170 }
170 171
171 if (email.isEmpty()) { 172 if (email.isEmpty()) {
172 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.mail_null)); 173 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.mail_null));
173 return false; 174 return false;
174 } else { 175 } else {
175 if (!Utils.checkMailFormat(email)) { 176 if (!Utils.checkMailFormat(email)) {
176 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.mail_invalid)); 177 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.mail_invalid));
177 return false; 178 return false;
178 } 179 }
179 } 180 }
180 181
181 if (pass.isEmpty()) { 182 if (pass.isEmpty()) {
182 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.password_null)); 183 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.password_null));
183 return false; 184 return false;
184 }else { 185 }else {
185 if (pass.length() < 6) { 186 if (pass.length() < 6) {
186 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.password_less_6)); 187 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.password_less_6));
187 return false; 188 return false;
188 } 189 }
189 } 190 }
190 191
191 if (confirmPass.isEmpty()) { 192 if (confirmPass.isEmpty()) {
192 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.confirm_pass_null)); 193 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.confirm_pass_null));
193 return false; 194 return false;
194 } 195 }
195 196
196 if (!pass.equals(confirmPass)) { 197 if (!pass.equals(confirmPass)) {
197 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.confirm_pass_wrong)); 198 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.confirm_pass_wrong));
198 return false; 199 return false;
199 } 200 }
200 201
201 if (sexInfo == null) { 202 if (sexInfo == null) {
202 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.sex_not_select)); 203 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.sex_not_select));
203 return false; 204 return false;
204 } 205 }
205 206
206 if (mBirthDay == null) { 207 if (mBirthDay == null) {
207 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.birthday_not_select)); 208 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.birthday_not_select));
208 return false; 209 return false;
209 } 210 }
210 211
211 if (height.isEmpty()) { 212 if (height.isEmpty()) {
212 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.height_null)); 213 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.height_null));
213 return false; 214 return false;
214 } 215 }
215 216
216 if (weight.isEmpty()) { 217 if (weight.isEmpty()) {
217 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.weight_null)); 218 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.weight_null));
218 return false; 219 return false;
219 } 220 }
220 221
221 if (bodyFat.isEmpty()) { 222 if (bodyFat.isEmpty()) {
222 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.body_fat_percent_null)); 223 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.body_fat_percent_null));
223 return false; 224 return false;
224 } 225 }
225 226
226 if (provinceInfo == null) { 227 if (provinceInfo == null) {
227 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.province_not_select)); 228 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.province_not_select));
228 return false; 229 return false;
229 } 230 }
230 231
231 if (level == 0) { 232 if (level == 0) {
232 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.level_not_select)); 233 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.level_not_select));
233 return false; 234 return false;
234 } 235 }
235 236
236 if (comment.isEmpty()) { 237 if (comment.isEmpty()) {
237 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.comment_null)); 238 showAlerDialog(RegisterActivity.this, getResources().getString(R.string.comment_null));
238 return false; 239 return false;
239 } 240 }
240 241
241 mRegisterInfo = new RegisterInfo(); 242 mRegisterInfo = new RegisterInfo();
242 mRegisterInfo.setUsername(userName); 243 mRegisterInfo.setUsername(userName);
243 mRegisterInfo.setFullName(name); 244 mRegisterInfo.setFullName(name);
244 mRegisterInfo.setNickname(nickName); 245 mRegisterInfo.setNickname(nickName);
245 mRegisterInfo.setPassword(pass); 246 mRegisterInfo.setPassword(pass);
246 mRegisterInfo.setBirthday(mBirthDay); 247 mRegisterInfo.setBirthday(mBirthDay);
247 mRegisterInfo.setHeight(Integer.valueOf(height)); 248 mRegisterInfo.setHeight(Integer.valueOf(height));
248 mRegisterInfo.setWeight(Integer.valueOf(weight)); 249 mRegisterInfo.setWeight(Integer.valueOf(weight));
249 mRegisterInfo.setFatRate(Integer.valueOf(bodyFat)); 250 mRegisterInfo.setFatRate(Integer.valueOf(bodyFat));
250 mRegisterInfo.setGender(sexInfo.getId()); 251 mRegisterInfo.setGender(sexInfo.getId());
251 mRegisterInfo.setAddress(provinceInfo.getName()); 252 mRegisterInfo.setAddress(provinceInfo.getName());
252 mRegisterInfo.setEmail(email); 253 mRegisterInfo.setEmail(email);
253 mRegisterInfo.setProfileImage(profileImagePath); 254 mRegisterInfo.setProfileImage(profileImagePath);
254 255
255 return true; 256 return true;
256 } 257 }
257 258
258 private void handleRegister() { 259 private void handleRegister() {
259 progressDialog = new ProgressDialog(RegisterActivity.this); 260 progressDialog = new ProgressDialog(RegisterActivity.this);
260 progressDialog.setMessage(getResources().getString(R.string.uploading)); 261 progressDialog.setMessage(getResources().getString(R.string.uploading));
261 progressDialog.setCancelable(false); 262 progressDialog.setCancelable(false);
262 progressDialog.show(); 263 progressDialog.show();
263 264
264 LLAPIManager.register(mRegisterInfo, new LLAPIManagerListener() { 265 ApiServices.register(mRegisterInfo, new LLAPIManagerListener() {
265 @Override 266 @Override
266 public void onError(Error error) { 267 public void onError(Error error) {
267 progressDialog.dismiss(); 268 progressDialog.dismiss();
268 Debug.error(" Can not upload data"); 269 Debug.error(" Can not upload data");
269 if (error != null) { 270 if (error != null) {
270 String err = getResources().getString(R.string.register_err); 271 String err = getResources().getString(R.string.register_err);
271 notifyErr(err); 272 notifyErr(err);
272 } 273 }
273 } 274 }
274 275
275 @Override 276 @Override
276 public void onSuccess(String json) { 277 public void onSuccess(String json) {
277 progressDialog.dismiss(); 278 progressDialog.dismiss();
278 if (json != null) { 279 if (json != null) {
279 Debug.warn(" Upload data success success"); 280 Debug.warn(" Upload data success success");
280 Debug.warn("DATA JSON result: " + json.toString()); 281 Debug.warn("DATA JSON result: " + json.toString());
281 registerDone(); 282 registerDone();
282 } else { 283 } else {
283 Debug.warn(" Upload data fail: response null"); 284 Debug.warn(" Upload data fail: response null");
284 String err = getResources().getString(R.string.err_exception); 285 String err = getResources().getString(R.string.err_exception);
285 notifyErr(err); 286 notifyErr(err);
286 } 287 }
287 } 288 }
288 289
289 @Override 290 @Override
290 public void onSuccess(JSONObject object) { 291 public void onSuccess(JSONObject object) {
291 Debug.warn("Version JSON object result: Success"); 292 Debug.warn("Version JSON object result: Success");
292 progressDialog.dismiss(); 293 progressDialog.dismiss();
293 294
294 String email = object.optString("email"); 295 String email = object.optString("email");
295 String username = object.optString("username"); 296 String username = object.optString("username");
296 String pass = object.optString("password"); 297 String pass = object.optString("password");
297 Debug.normal("Email: "+email +"\n"+ "Username: "+username); 298 Debug.normal("Email: "+email +"\n"+ "Username: "+username);
298 // save data 299 // save data
299 Setting.setUserDataSharepre(RegisterActivity.this, Setting.EMAIL_SHAREPRE, email); 300 Setting.setUserDataSharepre(RegisterActivity.this, Setting.EMAIL_SHAREPRE, email);
300 Setting.setUserDataSharepre(RegisterActivity.this, Setting.USER_SHAREPRE, username); 301 Setting.setUserDataSharepre(RegisterActivity.this, Setting.USER_SHAREPRE, username);
301 Setting.setUserDataSharepre(RegisterActivity.this, Setting.PASS_SHAREPRE, pass); 302 Setting.setUserDataSharepre(RegisterActivity.this, Setting.PASS_SHAREPRE, pass);
302 registerDone(); 303 registerDone();
303 } 304 }
304 }); 305 });
305 } 306 }
306 307
307 private void hanleGetImagePath(Bitmap bitmap){ 308 private void hanleGetImagePath(Bitmap bitmap){
308 progressDialog = new ProgressDialog(RegisterActivity.this); 309 progressDialog = new ProgressDialog(RegisterActivity.this);
309 progressDialog.setMessage(getResources().getString(R.string.uploading)); 310 progressDialog.setMessage(getResources().getString(R.string.uploading));
310 progressDialog.setCancelable(false); 311 progressDialog.setCancelable(false);
311 progressDialog.show(); 312 progressDialog.show();
312 313
313 LLAPIManager.uploadImage(bitmap, new LLAPIManagerListener() { 314 ApiServices.uploadImage(bitmap, new LLAPIManagerListener() {
314 @Override 315 @Override
315 public void onError(Error error) { 316 public void onError(Error error) {
316 progressDialog.dismiss(); 317 progressDialog.dismiss();
317 Debug.error(" Can not upload data"); 318 Debug.error(" Can not upload data");
318 if (error != null) { 319 if (error != null) {
319 String err = getResources().getString(R.string.register_err); 320 String err = getResources().getString(R.string.register_err);
320 notifyErr(err); 321 notifyErr(err);
321 } 322 }
322 } 323 }
323 324
324 @Override 325 @Override
325 public void onSuccess(String json) { 326 public void onSuccess(String json) {
326 if (json != null) { 327 if (json != null) {
327 Debug.warn(" Upload data success success"); 328 Debug.warn(" Upload data success success");
328 Debug.warn("DATA JSON result: " + json.toString()); 329 Debug.warn("DATA JSON result: " + json.toString());
329 uploadImageDone(json); 330 uploadImageDone(json);
330 } else { 331 } else {
331 progressDialog.dismiss(); 332 progressDialog.dismiss();
332 Debug.warn(" Upload data fail: response null"); 333 Debug.warn(" Upload data fail: response null");
333 String err = getResources().getString(R.string.err_exception); 334 String err = getResources().getString(R.string.err_exception);
334 notifyErr(err); 335 notifyErr(err);
335 } 336 }
336 } 337 }
337 338
338 @Override 339 @Override
339 public void onSuccess(JSONObject array) { 340 public void onSuccess(JSONObject array) {
340 progressDialog.dismiss(); 341 progressDialog.dismiss();
341 Debug.warn(" Upload data success array"); 342 Debug.warn(" Upload data success array");
342 } 343 }
343 }); 344 });
344 } 345 }
345 346
346 private void registerDone(){ 347 private void registerDone(){
347 Toast.makeText(RegisterActivity.this, R.string.register_success, Toast.LENGTH_SHORT).show(); 348 Toast.makeText(RegisterActivity.this, R.string.register_success, Toast.LENGTH_SHORT).show();
348 finish(); 349 finish();
349 } 350 }
350 351
351 private void uploadImageDone(String path){ 352 private void uploadImageDone(String path){
352 profileImagePath = path; 353 profileImagePath = path;
353 } 354 }
354 355
355 private void notifyErr(String err) { 356 private void notifyErr(String err) {
356 AlertDialog.Builder alertDialog = new AlertDialog.Builder(RegisterActivity.this); 357 AlertDialog.Builder alertDialog = new AlertDialog.Builder(RegisterActivity.this);
357 alertDialog.setMessage(err); 358 alertDialog.setMessage(err);
358 alertDialog.setCancelable(false); 359 alertDialog.setCancelable(false);
359 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 360 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
360 @Override 361 @Override
361 public void onClick(DialogInterface dialog, int which) { 362 public void onClick(DialogInterface dialog, int which) {
362 finish(); 363 finish();
363 } 364 }
364 }); 365 });
365 alertDialog.show(); 366 alertDialog.show();
366 } 367 }
367 368
368 private void doSelectSex() { 369 private void doSelectSex() {
369 String title = getResources().getString(R.string.sex); 370 String title = getResources().getString(R.string.sex);
370 new SimpleSelectBoxDialogBuilder().create(RegisterActivity.this, title, sexList, new OnSelectResultListener() { 371 new SimpleSelectBoxDialogBuilder().create(RegisterActivity.this, title, sexList, new OnSelectResultListener() {
371 @Override 372 @Override
372 public void onSelectedItem(SelectItemInfo selectItemInfo) { 373 public void onSelectedItem(SelectItemInfo selectItemInfo) {
373 if (selectItemInfo != null) { 374 if (selectItemInfo != null) {
374 Debug.normal("Item selected: " + selectItemInfo.getName()); 375 Debug.normal("Item selected: " + selectItemInfo.getName());
375 sexInfo = selectItemInfo; 376 sexInfo = selectItemInfo;
376 tvSex.setText(sexInfo.getName()); 377 tvSex.setText(sexInfo.getName());
377 } else { 378 } else {
378 Debug.normal("Have not item selected"); 379 Debug.normal("Have not item selected");
379 } 380 }
380 } 381 }
381 }).show(); 382 }).show();
382 } 383 }
383 384
384 private void doSelectProvince() { 385 private void doSelectProvince() {
385 String title = getResources().getString(R.string.prefecture); 386 String title = getResources().getString(R.string.prefecture);
386 new SimpleSelectBoxDialogBuilder().create(RegisterActivity.this, title, provinceList, new OnSelectResultListener() { 387 new SimpleSelectBoxDialogBuilder().create(RegisterActivity.this, title, provinceList, new OnSelectResultListener() {
387 @Override 388 @Override
388 public void onSelectedItem(SelectItemInfo selectItemInfo) { 389 public void onSelectedItem(SelectItemInfo selectItemInfo) {
389 if (selectItemInfo != null) { 390 if (selectItemInfo != null) {
390 Debug.normal("Item selected: " + selectItemInfo.getName()); 391 Debug.normal("Item selected: " + selectItemInfo.getName());
391 provinceInfo = selectItemInfo; 392 provinceInfo = selectItemInfo;
392 tvAddress.setText(provinceInfo.getName()); 393 tvAddress.setText(provinceInfo.getName());
393 } else { 394 } else {
394 Debug.normal("Have not item selected"); 395 Debug.normal("Have not item selected");
395 } 396 }
396 } 397 }
397 }).show(); 398 }).show();
398 } 399 }
399 400
400 private void hanleSelectDate() { 401 private void hanleSelectDate() {
401 402
402 DatePickerDialog datePicker = new DatePickerDialog(RegisterActivity.this, new DatePickerDialog.OnDateSetListener() { 403 DatePickerDialog datePicker = new DatePickerDialog(RegisterActivity.this, new DatePickerDialog.OnDateSetListener() {
403 @Override 404 @Override
404 public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { 405 public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
405 406
406 mDay = dayOfMonth; 407 mDay = dayOfMonth;
407 mMonth = month; 408 mMonth = month;
408 mYear = year; 409 mYear = year;
409 mCalendar = Calendar.getInstance(); 410 mCalendar = Calendar.getInstance();
410 mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 411 mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
411 mCalendar.set(Calendar.MONTH, month); 412 mCalendar.set(Calendar.MONTH, month);
412 mCalendar.set(Calendar.YEAR, year); 413 mCalendar.set(Calendar.YEAR, year);
413 mBirthDay = mCalendar.getTime(); 414 mBirthDay = mCalendar.getTime();
414 415
415 String dateStr = Utils.convertDateToStringDialogSelect(mBirthDay); 416 String dateStr = Utils.convertDateToStringDialogSelect(mBirthDay);
416 tvBirthday.setText(dateStr); 417 tvBirthday.setText(dateStr);
417 } 418 }
418 }, mYear, mMonth, mDay); 419 }, mYear, mMonth, mDay);
419 datePicker.getDatePicker().setMaxDate(new Date().getTime()); 420 datePicker.getDatePicker().setMaxDate(new Date().getTime());
420 datePicker.show(); 421 datePicker.show();
421 } 422 }
422 423
423 private void updateUILevel() { 424 private void updateUILevel() {
424 if (level == 1) { 425 if (level == 1) {
425 setLowButtonSelected(true); 426 setLowButtonSelected(true);
426 setMidButtonSelected(false); 427 setMidButtonSelected(false);
427 setHightButtonSelected(false); 428 setHightButtonSelected(false);
428 } else if (level == 2) { 429 } else if (level == 2) {
429 setLowButtonSelected(false); 430 setLowButtonSelected(false);
430 setMidButtonSelected(true); 431 setMidButtonSelected(true);
431 setHightButtonSelected(false); 432 setHightButtonSelected(false);
432 } else if (level == 3) { 433 } else if (level == 3) {
433 setLowButtonSelected(false); 434 setLowButtonSelected(false);
434 setMidButtonSelected(false); 435 setMidButtonSelected(false);
435 setHightButtonSelected(true); 436 setHightButtonSelected(true);
436 } else { 437 } else {
437 setLowButtonSelected(false); 438 setLowButtonSelected(false);
438 setMidButtonSelected(false); 439 setMidButtonSelected(false);
439 setHightButtonSelected(false); 440 setHightButtonSelected(false);
440 } 441 }
441 } 442 }
442 443
443 private void setLowButtonSelected(boolean b) { 444 private void setLowButtonSelected(boolean b) {
444 if (b) { 445 if (b) {
445 llLow.setBackgroundResource(R.drawable.left_selected_lev_bg); 446 llLow.setBackgroundResource(R.drawable.left_selected_lev_bg);
446 tvLow.setTextColor(getResources().getColor(R.color.white)); 447 tvLow.setTextColor(getResources().getColor(R.color.white));
447 } else { 448 } else {
448 llLow.setBackgroundResource(R.drawable.left_unselected_lev_bg); 449 llLow.setBackgroundResource(R.drawable.left_unselected_lev_bg);
449 tvLow.setTextColor(getResources().getColor(R.color.black)); 450 tvLow.setTextColor(getResources().getColor(R.color.black));
450 } 451 }
451 } 452 }
452 453
453 private void setMidButtonSelected(boolean b) { 454 private void setMidButtonSelected(boolean b) {
454 if (b) { 455 if (b) {
455 llMid.setBackgroundResource(R.drawable.mid_selected_lev_bg); 456 llMid.setBackgroundResource(R.drawable.mid_selected_lev_bg);
456 tvMid.setTextColor(getResources().getColor(R.color.white)); 457 tvMid.setTextColor(getResources().getColor(R.color.white));
457 } else { 458 } else {
458 llMid.setBackgroundResource(R.drawable.mid_unselected_lev_bg); 459 llMid.setBackgroundResource(R.drawable.mid_unselected_lev_bg);
459 tvMid.setTextColor(getResources().getColor(R.color.black)); 460 tvMid.setTextColor(getResources().getColor(R.color.black));
460 } 461 }
461 } 462 }
462 463
463 private void setHightButtonSelected(boolean b) { 464 private void setHightButtonSelected(boolean b) {
464 if (b) { 465 if (b) {
465 llHight.setBackgroundResource(R.drawable.right_selected_lev_bg); 466 llHight.setBackgroundResource(R.drawable.right_selected_lev_bg);
466 tvHight.setTextColor(getResources().getColor(R.color.white)); 467 tvHight.setTextColor(getResources().getColor(R.color.white));
467 } else { 468 } else {
468 llHight.setBackgroundResource(R.drawable.right_unselected_lev_bg); 469 llHight.setBackgroundResource(R.drawable.right_unselected_lev_bg);
469 tvHight.setTextColor(getResources().getColor(R.color.black)); 470 tvHight.setTextColor(getResources().getColor(R.color.black));
470 } 471 }
471 } 472 }
472 473
473 private void getImageBrower() { 474 private void getImageBrower() {
474 Intent intent = new Intent(Intent.ACTION_PICK); 475 Intent intent = new Intent(Intent.ACTION_PICK);
475 intent.setType("image/*"); 476 intent.setType("image/*");
476 startActivityForResult(intent, RESULT_LOAD_IMG); 477 startActivityForResult(intent, RESULT_LOAD_IMG);
477 } 478 }
478 479
479 480
480 @OnClick({R.id.btn_register, R.id.rl_sex, R.id.rl_birthday, R.id.rl_address, R.id.ll_low, 481 @OnClick({R.id.btn_register, R.id.rl_sex, R.id.rl_birthday, R.id.rl_address, R.id.ll_low,
481 R.id.ll_mid, R.id.ll_hight, R.id.profile_image}) 482 R.id.ll_mid, R.id.ll_hight, R.id.profile_image})
482 public void onClick(View v) { 483 public void onClick(View v) {
483 switch (v.getId()) { 484 switch (v.getId()) {
484 case R.id.btn_register: 485 case R.id.btn_register:
485 if (checkData()) { 486 if (checkData()) {
486 handleRegister(); 487 handleRegister();
487 } 488 }
488 break; 489 break;
489 490
490 case R.id.rl_sex: 491 case R.id.rl_sex:
491 doSelectSex(); 492 doSelectSex();
492 break; 493 break;
493 494
494 495
495 case R.id.rl_birthday: 496 case R.id.rl_birthday:
496 hanleSelectDate(); 497 hanleSelectDate();
497 break; 498 break;
498 499
499 case R.id.rl_address: 500 case R.id.rl_address:
500 doSelectProvince(); 501 doSelectProvince();
501 break; 502 break;
502 503
503 case R.id.ll_low: 504 case R.id.ll_low:
504 level = 1; 505 level = 1;
505 updateUILevel(); 506 updateUILevel();
506 break; 507 break;
507 case R.id.ll_mid: 508 case R.id.ll_mid:
508 level = 2; 509 level = 2;
509 updateUILevel(); 510 updateUILevel();
510 break; 511 break;
511 case R.id.ll_hight: 512 case R.id.ll_hight:
512 level = 3; 513 level = 3;
513 updateUILevel(); 514 updateUILevel();
514 break; 515 break;
515 case R.id.profile_image: 516 case R.id.profile_image:
516 getImageBrower(); 517 getImageBrower();
517 break; 518 break;
518 519
519 default: 520 default:
520 break; 521 break;
521 } 522 }
522 } 523 }
523 524
524 @Override 525 @Override
525 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 526 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
526 super.onActivityResult(requestCode, resultCode, data); 527 super.onActivityResult(requestCode, resultCode, data);
527 528
528 if (resultCode == RESULT_OK) { 529 if (resultCode == RESULT_OK) {
529 if (requestCode == RESULT_LOAD_IMG) { 530 if (requestCode == RESULT_LOAD_IMG) {
530 try { 531 try {
531 final Uri imageUri = data.getData(); 532 final Uri imageUri = data.getData();
532 final InputStream imageStream = getContentResolver().openInputStream(imageUri); 533 final InputStream imageStream = getContentResolver().openInputStream(imageUri);
533 final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream); 534 final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
534 hanleGetImagePath(selectedImage); 535 hanleGetImagePath(selectedImage);
535 profileImage.setImageBitmap(selectedImage); 536 profileImage.setImageBitmap(selectedImage);
536 } catch (FileNotFoundException e) { 537 } catch (FileNotFoundException e) {
537 e.printStackTrace(); 538 e.printStackTrace();
538 Toast.makeText(RegisterActivity.this, "Something went wrong", Toast.LENGTH_LONG).show(); 539 Toast.makeText(RegisterActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
539 } 540 }
540 541
541 } else { 542 } else {
542 Toast.makeText(RegisterActivity.this, "You haven't picked Image", Toast.LENGTH_LONG).show(); 543 Toast.makeText(RegisterActivity.this, "You haven't picked Image", Toast.LENGTH_LONG).show();
543 } 544 }
544 545
545 } 546 }
546 } 547 }
547 } 548 }
app/src/main/java/com/dinhcv/lifelogpedometer/activity/TopDateFragment.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.os.Bundle; 6 import android.os.Bundle;
7 import android.support.annotation.Nullable; 7 import android.support.annotation.Nullable;
8 import android.view.LayoutInflater; 8 import android.view.LayoutInflater;
9 import android.view.View; 9 import android.view.View;
10 import android.view.ViewGroup; 10 import android.view.ViewGroup;
11 import android.widget.DatePicker; 11 import android.widget.DatePicker;
12 import android.widget.ImageView; 12 import android.widget.ImageView;
13 import android.widget.LinearLayout; 13 import android.widget.LinearLayout;
14 import android.widget.TextView; 14 import android.widget.TextView;
15 15
16 import com.dinhcv.lifelogpedometer.R; 16 import com.dinhcv.lifelogpedometer.R;
17 import com.dinhcv.lifelogpedometer.adapter.NoticeAdapter; 17 import com.dinhcv.lifelogpedometer.adapter.NoticeAdapter;
18 import com.dinhcv.lifelogpedometer.customview.ExpandableListCustomView; 18 import com.dinhcv.lifelogpedometer.customview.ExpandableListCustomView;
19 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 19 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
20 import com.dinhcv.lifelogpedometer.model.structure.home.NoticeInfo; 20 import com.dinhcv.lifelogpedometer.model.structure.home.NoticeInfo;
21 import com.dinhcv.lifelogpedometer.model.structure.home.TagetInfo; 21 import com.dinhcv.lifelogpedometer.model.structure.home.TagetInfo;
22 import com.dinhcv.lifelogpedometer.portal.ApiServices;
22 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 23 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
23 import com.dinhcv.lifelogpedometer.utils.Const; 24 import com.dinhcv.lifelogpedometer.utils.Const;
24 import com.dinhcv.lifelogpedometer.utils.Debug; 25 import com.dinhcv.lifelogpedometer.utils.Debug;
25 import com.dinhcv.lifelogpedometer.utils.Utils; 26 import com.dinhcv.lifelogpedometer.utils.Utils;
26 27
27 import org.json.JSONArray; 28 import org.json.JSONArray;
28 import org.json.JSONException; 29 import org.json.JSONException;
29 import org.json.JSONObject; 30 import org.json.JSONObject;
30 31
31 import java.util.ArrayList; 32 import java.util.ArrayList;
32 import java.util.Calendar; 33 import java.util.Calendar;
33 import java.util.Date; 34 import java.util.Date;
34 import java.util.List; 35 import java.util.List;
35 36
36 public class TopDateFragment extends FragmentBase implements SettingFragmentPresenter { 37 public class TopDateFragment extends FragmentBase implements SettingFragmentPresenter {
37 38
38 private TextView tvDate; 39 private TextView tvDate;
39 private TextView tvStep; 40 private TextView tvStep;
40 private TextView tvRemain; 41 private TextView tvRemain;
41 private TextView tvRateDone; 42 private TextView tvRateDone;
42 private ImageView ivBack; 43 private ImageView ivBack;
43 private ImageView ivNext; 44 private ImageView ivNext;
44 45
45 private LinearLayout llBike; 46 private LinearLayout llBike;
46 private LinearLayout llWalking; 47 private LinearLayout llWalking;
47 private LinearLayout llRunning; 48 private LinearLayout llRunning;
48 49
49 private Date mAnaDate; 50 private Date mAnaDate;
50 private Calendar mCalendar; 51 private Calendar mCalendar;
51 52
52 private int mAnaDay; 53 private int mAnaDay;
53 private int mAnaMonth; 54 private int mAnaMonth;
54 private int mAnaYear; 55 private int mAnaYear;
55 private Context mContext; 56 private Context mContext;
56 57
57 private Const.STEP_TYPE stepType; 58 private Const.STEP_TYPE stepType;
58 private TagetInfo mTagetInfo = new TagetInfo(); 59 private TagetInfo mTagetInfo = new TagetInfo();
59 private ImageView ivToDay; 60 private ImageView ivToDay;
60 private ExpandableListCustomView lvNotice; 61 private ExpandableListCustomView lvNotice;
61 private NoticeAdapter mNoticeAdapter; 62 private NoticeAdapter mNoticeAdapter;
62 private View mRootview; 63 private View mRootview;
63 private TopFragment mTopFragment; 64 private TopFragment mTopFragment;
64 65
65 public void setRootFragment(TopFragment frag) { 66 public void setRootFragment(TopFragment frag) {
66 this.mTopFragment = frag; 67 this.mTopFragment = frag;
67 } 68 }
68 69
69 @Override 70 @Override
70 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 71 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
71 savedInstanceState) { 72 savedInstanceState) {
72 // Inflate the layout for this fragment 73 // Inflate the layout for this fragment
73 mRootview = inflater.inflate(R.layout.fragment_top_date, container, false); 74 mRootview = inflater.inflate(R.layout.fragment_top_date, container, false);
74 mContext = getActivity(); 75 mContext = getActivity();
75 initView(mRootview); 76 initView(mRootview);
76 initData(); 77 initData();
77 return mRootview; 78 return mRootview;
78 } 79 }
79 80
80 81
81 private void initView(View rootView) { 82 private void initView(View rootView) {
82 tvDate = (TextView) rootView.findViewById(R.id.tv_date); 83 tvDate = (TextView) rootView.findViewById(R.id.tv_date);
83 tvStep = (TextView) rootView.findViewById(R.id.tv_step); 84 tvStep = (TextView) rootView.findViewById(R.id.tv_step);
84 tvRemain = (TextView) rootView.findViewById(R.id.tv_remainingStep); 85 tvRemain = (TextView) rootView.findViewById(R.id.tv_remainingStep);
85 tvRateDone = (TextView) rootView.findViewById(R.id.tv_completeRate); 86 tvRateDone = (TextView) rootView.findViewById(R.id.tv_completeRate);
86 ivBack = (ImageView) rootView.findViewById(R.id.iv_back); 87 ivBack = (ImageView) rootView.findViewById(R.id.iv_back);
87 ivNext = (ImageView) rootView.findViewById(R.id.iv_next); 88 ivNext = (ImageView) rootView.findViewById(R.id.iv_next);
88 89
89 llBike = (LinearLayout) rootView.findViewById(R.id.ll_bike); 90 llBike = (LinearLayout) rootView.findViewById(R.id.ll_bike);
90 llWalking = (LinearLayout) rootView.findViewById(R.id.ll_walking); 91 llWalking = (LinearLayout) rootView.findViewById(R.id.ll_walking);
91 llRunning = (LinearLayout) rootView.findViewById(R.id.ll_running); 92 llRunning = (LinearLayout) rootView.findViewById(R.id.ll_running);
92 93
93 ivToDay = (ImageView) rootView.findViewById(R.id.iv_toDay); 94 ivToDay = (ImageView) rootView.findViewById(R.id.iv_toDay);
94 lvNotice = (ExpandableListCustomView) rootView.findViewById(R.id.lv_notice); 95 lvNotice = (ExpandableListCustomView) rootView.findViewById(R.id.lv_notice);
95 96
96 handleEvent(); 97 handleEvent();
97 } 98 }
98 99
99 private void handleEvent(){ 100 private void handleEvent(){
100 tvDate.setOnClickListener(new View.OnClickListener() { 101 tvDate.setOnClickListener(new View.OnClickListener() {
101 @Override 102 @Override
102 public void onClick(View view) { 103 public void onClick(View view) {
103 handleAnaDatePicker(); 104 handleAnaDatePicker();
104 } 105 }
105 }); 106 });
106 107
107 ivBack.setOnClickListener(new View.OnClickListener() { 108 ivBack.setOnClickListener(new View.OnClickListener() {
108 @Override 109 @Override
109 public void onClick(View view) { 110 public void onClick(View view) {
110 mCalendar = Calendar.getInstance(); 111 mCalendar = Calendar.getInstance();
111 mCalendar.setTime(mAnaDate); 112 mCalendar.setTime(mAnaDate);
112 mCalendar.add(Calendar.DAY_OF_MONTH, -1); 113 mCalendar.add(Calendar.DAY_OF_MONTH, -1);
113 Date date = mCalendar.getTime(); 114 Date date = mCalendar.getTime();
114 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 115 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
115 mAnaDate = date; 116 mAnaDate = date;
116 getHomePage(mAnaDate, stepType); 117 getHomePage(mAnaDate, stepType);
118 getNews(mAnaDate);
117 } 119 }
118 }); 120 });
119 121
120 ivNext.setOnClickListener(new View.OnClickListener() { 122 ivNext.setOnClickListener(new View.OnClickListener() {
121 @Override 123 @Override
122 public void onClick(View view) { 124 public void onClick(View view) {
123 mCalendar = Calendar.getInstance(); 125 mCalendar = Calendar.getInstance();
124 mCalendar.setTime(mAnaDate); 126 mCalendar.setTime(mAnaDate);
125 mCalendar.add(Calendar.DAY_OF_MONTH, +1); 127 mCalendar.add(Calendar.DAY_OF_MONTH, +1);
126 Date date = mCalendar.getTime(); 128 Date date = mCalendar.getTime();
127 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 129 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
128 mAnaDate = date; 130 mAnaDate = date;
129 getHomePage(mAnaDate, stepType); 131 getHomePage(mAnaDate, stepType);
132 getNews(mAnaDate);
130 } 133 }
131 }); 134 });
132 135
133 136
134 llWalking.setOnClickListener(new View.OnClickListener() { 137 llWalking.setOnClickListener(new View.OnClickListener() {
135 @Override 138 @Override
136 public void onClick(View view) { 139 public void onClick(View view) {
137 stepType = Const.STEP_TYPE.WALKING; 140 stepType = Const.STEP_TYPE.WALKING;
138 updateUiStepType(false, true, false); 141 updateUiStepType(false, true, false);
139 // add data 142 // add data
140 getHomePage(mAnaDate, stepType); 143 getHomePage(mAnaDate, stepType);
141 } 144 }
142 }); 145 });
143 146
144 llRunning.setOnClickListener(new View.OnClickListener() { 147 llRunning.setOnClickListener(new View.OnClickListener() {
145 @Override 148 @Override
146 public void onClick(View view) { 149 public void onClick(View view) {
147 stepType = Const.STEP_TYPE.RUNNING; 150 stepType = Const.STEP_TYPE.RUNNING;
148 updateUiStepType(false, false, true); 151 updateUiStepType(false, false, true);
149 // add 152 // add
150 getHomePage(mAnaDate, stepType); 153 getHomePage(mAnaDate, stepType);
151 } 154 }
152 }); 155 });
153 156
154 llBike.setOnClickListener(new View.OnClickListener() { 157 llBike.setOnClickListener(new View.OnClickListener() {
155 @Override 158 @Override
156 public void onClick(View view) { 159 public void onClick(View view) {
157 stepType = Const.STEP_TYPE.BIKE; 160 stepType = Const.STEP_TYPE.BIKE;
158 updateUiStepType(true, false, false); 161 updateUiStepType(true, false, false);
159 // add data 162 // add data
160 getHomePage(mAnaDate, stepType); 163 getHomePage(mAnaDate, stepType);
161 } 164 }
162 }); 165 });
163 166
164 ivToDay.setOnClickListener(new View.OnClickListener() { 167 ivToDay.setOnClickListener(new View.OnClickListener() {
165 @Override 168 @Override
166 public void onClick(View view) { 169 public void onClick(View view) {
167 mTopFragment.showDetailFragment(); 170 mTopFragment.showDetailFragment();
168 } 171 }
169 }); 172 });
170 173
171 } 174 }
172 175
173 private void updateUiStepType(boolean b1, boolean b2, boolean b3) { 176 private void updateUiStepType(boolean b1, boolean b2, boolean b3) {
174 llBike.setSelected(b1); 177 llBike.setSelected(b1);
175 llWalking.setSelected(b2); 178 llWalking.setSelected(b2);
176 llRunning.setSelected(b3); 179 llRunning.setSelected(b3);
177 } 180 }
178 181
179 /** 182 /**
180 * Show date picker dialog 183 * Show date picker dialog
181 */ 184 */
182 private void handleAnaDatePicker() { 185 private void handleAnaDatePicker() {
183 186
184 new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { 187 new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
185 @Override 188 @Override
186 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 189 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
187 190
188 mCalendar = Calendar.getInstance(); 191 mCalendar = Calendar.getInstance();
189 mCalendar.set(year, monthOfYear, dayOfMonth); 192 mCalendar.set(year, monthOfYear, dayOfMonth);
190 mAnaYear = year; 193 mAnaYear = year;
191 mAnaMonth = monthOfYear; 194 mAnaMonth = monthOfYear;
192 mAnaDay = dayOfMonth; 195 mAnaDay = dayOfMonth;
193 Date date = mCalendar.getTime(); 196 Date date = mCalendar.getTime();
194 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 197 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
195 mAnaDate = date; 198 mAnaDate = date;
196 199
197 getHomePage(mAnaDate, stepType); 200 getHomePage(mAnaDate, stepType);
201 getNews(mAnaDate);
198 } 202 }
199 }, mAnaYear, mAnaMonth, mAnaDay).show(); 203 }, mAnaYear, mAnaMonth, mAnaDay).show();
200 204
201 } 205 }
202 206
203 207
204 /** 208 /**
205 * init data for 209 * init data for
206 */ 210 */
207 private void initData() { 211 private void initData() {
208 mCalendar = Calendar.getInstance(); 212 mCalendar = Calendar.getInstance();
209 mCalendar.setTime(new Date()); 213 mCalendar.setTime(new Date());
210 mAnaDate = mCalendar.getTime(); 214 mAnaDate = mCalendar.getTime();
211 mAnaYear = mCalendar.get(Calendar.YEAR); 215 mAnaYear = mCalendar.get(Calendar.YEAR);
212 mAnaMonth = mCalendar.get(Calendar.MONTH); 216 mAnaMonth = mCalendar.get(Calendar.MONTH);
213 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); 217 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH);
214 218
215 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); 219 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate));
216 220
217 stepType = Const.STEP_TYPE.WALKING; 221 stepType = Const.STEP_TYPE.WALKING;
218 updateUiStepType(false, true, false); 222 updateUiStepType(false, true, false);
219 getHomePage(mAnaDate, stepType); 223 getHomePage(mAnaDate, stepType);
224 getNews(mAnaDate);
220 } 225 }
221 226
222 227
223 private void getHomePage(Date date, Const.STEP_TYPE stepType){ 228 private void getHomePage(Date date, Const.STEP_TYPE stepType){
224 229
225 showDialog(mContext); 230 showDialog(mContext);
226 LLAPIManager.homePage(date, stepType, new LLAPIManagerListener() { 231 ApiServices.homePage(date, stepType, new LLAPIManagerListener() {
227 @Override 232 @Override
228 public void onError(Error error) { 233 public void onError(Error error) {
229 Debug.error("Get data history error"); 234 Debug.error("Get data history error");
230 hiddenDialog(); 235 hiddenDialog();
231 showDialogNotData(); 236 showDialogNotData();
232 } 237 }
233 238
234 @Override 239 @Override
235 public void onSuccess(String json) { 240 public void onSuccess(String json) {
236 Debug.error("Get data history success"); 241 Debug.error("Get data history success");
237 hiddenDialog(); 242 hiddenDialog();
238 loadDataDone(json); 243 loadDataDone(json);
239 } 244 }
240 245
241 @Override 246 @Override
242 public void onSuccess(JSONObject object) { 247 public void onSuccess(JSONObject object) {
243 Debug.error("Get data history success"); 248 Debug.error("Get data history success");
244 hiddenDialog(); 249 hiddenDialog();
245 } 250 }
246 }); 251 });
247 } 252 }
248 253
249 private void showDialogNotData(){ 254 private void showDialogNotData(){
250 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); 255 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data));
251 } 256 }
252 257
253 private void loadDataDone(String jsonString) { 258 private void loadDataDone(String jsonString) {
254 JSONObject jsonObject = null; 259 JSONObject jsonObject = null;
255 try { 260 try {
256 jsonObject = new JSONObject(jsonString); 261 jsonObject = new JSONObject(jsonString);
257 int status = jsonObject.optInt("status"); 262 int status = jsonObject.optInt("status");
258 if (status == 1) { 263 if (status == 1) {
259 JSONObject jsonObject1 = jsonObject.optJSONObject("result"); 264 JSONObject jsonObject1 = jsonObject.optJSONObject("result");
260 JSONObject targetInf = jsonObject1.getJSONObject("targetInf"); 265 JSONObject targetInf = jsonObject1.getJSONObject("targetInf");
261 JSONArray listNotice = jsonObject1.getJSONArray("listNotice"); 266 JSONArray listNotice = jsonObject1.getJSONArray("listNotice");
262 267
263 if (targetInf != null){ 268 if (targetInf != null){
264 String target = targetInf.optString("target_step"); 269 String target = targetInf.optString("target_step");
265 Debug.normal("Target: "+ target); 270 Debug.normal("Target: "+ target);
266 mTagetInfo.setTaget(targetInf.optString("target_step")); 271 mTagetInfo.setTaget(targetInf.optString("target_step"));
267 mTagetInfo.setSteps(targetInf.optString("num_step")); 272 mTagetInfo.setSteps(targetInf.optString("num_step"));
268 mTagetInfo.setStepRemain(targetInf.optString("remaining_step")); 273 mTagetInfo.setStepRemain(targetInf.optString("remaining_step"));
269 mTagetInfo.setCompletePercent(targetInf.optString("complete_percent")); 274 mTagetInfo.setCompletePercent(targetInf.optString("complete_percent"));
270 } 275 }
271 276
272 if (listNotice != null && listNotice.length() > 0) { 277 if (listNotice != null && listNotice.length() > 0) {
273 List<NoticeInfo> infoLists = new ArrayList<>(); 278 List<NoticeInfo> infoLists = new ArrayList<>();
274 for (int i = 0; i < listNotice.length(); i++){ 279 for (int i = 0; i < listNotice.length(); i++){
275 NoticeInfo noticeInfo = new NoticeInfo(); 280 NoticeInfo noticeInfo = new NoticeInfo();
276 JSONObject ob = (JSONObject) listNotice.get(i); 281 JSONObject ob = (JSONObject) listNotice.get(i);
277 noticeInfo.setId(ob.optInt("id")); 282 noticeInfo.setId(ob.optInt("id"));
278 noticeInfo.setContent(ob.optString("notice_content")); 283 noticeInfo.setContent(ob.optString("notice_content"));
279 infoLists.add(noticeInfo); 284 infoLists.add(noticeInfo);
280 } 285 }
281 286
282 mTagetInfo.setNoticeList(infoLists); 287 mTagetInfo.setNoticeList(infoLists);
283 } 288 }
284 289
285 } 290 }
286 } catch (JSONException e) { 291 } catch (JSONException e) {
287 e.printStackTrace(); 292 e.printStackTrace();
288 mTagetInfo = new TagetInfo();; 293 mTagetInfo = new TagetInfo();;
289 } 294 }
290 295
291 loadUI(); 296 loadUI();
292 } 297 }
293 298
294 299
295 private void loadUI(){ 300 private void loadUI(){
296 tvStep.setText(String.valueOf(mTagetInfo.getSteps())); 301 tvStep.setText(String.valueOf(mTagetInfo.getSteps()));
297 tvRemain.setText(String.valueOf(mTagetInfo.getStepRemain())); 302 tvRemain.setText(String.valueOf(mTagetInfo.getStepRemain()));
298 tvRateDone.setText(mContext.getResources().getString(R.string.percent_unit, mTagetInfo.getCompletePercent())); 303 tvRateDone.setText(mContext.getResources().getString(R.string.percent_unit, mTagetInfo.getCompletePercent()));
304 }
299 305
300 List<NoticeInfo> infoLists = mTagetInfo.getNoticeList(); 306 private void getNews(Date date){
301 if (infoLists != null && infoLists.size() >0){ 307
302 mNoticeAdapter = new NoticeAdapter(mContext, infoLists); 308 ApiServices.getNews(date, new LLAPIManagerListener() {
309 @Override
310 public void onError(Error error) {
311 Debug.error("Get data news error");
312 }
313
314 @Override
315 public void onSuccess(String json) {
316 Debug.error("Get data news success");
317 loadNewsDone(json);
318 }
319
320 @Override
321 public void onSuccess(JSONObject object) {
322 Debug.error("Get data news success");
323 }
324 });
325 }
326
327 private void loadNewsDone(String jsonString) {
328
329 List<NoticeInfo> contentList = new ArrayList<>();
330 JSONObject jsonObject = null;
331 try {
332 jsonObject = new JSONObject(jsonString);
333 int status = jsonObject.optInt("status");
334 if (status == 1) {
335 JSONObject jsonResult = jsonObject.optJSONObject("result");
336 JSONArray listNotice = jsonResult.getJSONArray("listNotice");
337
338 if (listNotice != null) {
339
340 for (int i = 0; i < listNotice.length(); i++) {
341 JSONObject obContent = (JSONObject) listNotice.get(i);
342 String content = obContent.optString("notice_content");
343 Debug.normal("Content: " + content);
344 contentList.add(new NoticeInfo(i+1,content));
345 }
346 }
347
348 }
349 } catch (JSONException e) {
350 e.printStackTrace();
351 }
352
353 addNews(contentList);
354 }
355
356 private void addNews(List<NoticeInfo> noticeInfos){
357 if (noticeInfos != null && noticeInfos.size() >0){
358 mNoticeAdapter = new NoticeAdapter(mContext, noticeInfos);
303 lvNotice.setAdapter(mNoticeAdapter); 359 lvNotice.setAdapter(mNoticeAdapter);
304 lvNotice.setExpanded(true); 360 lvNotice.setExpanded(true);
361 }else {
362 lvNotice.setAdapter(null);
305 } 363 }
306
307 } 364 }
308 365
309 366
367
310 @Override 368 @Override
311 public void onAttach(Context context) { 369 public void onAttach(Context context) {
312 super.onAttach(context); 370 super.onAttach(context);
313 371
314 } 372 }
315 373
316 374
317 @Override 375 @Override
318 public void onSaveData() { 376 public void onSaveData() {
319 377
320 } 378 }
321 379
322 @Override 380 @Override
323 public void onInvalidate(boolean isInit) { 381 public void onInvalidate(boolean isInit) {
324 initData(); 382 initData();
325 } 383 }
326 384
327 @Override 385 @Override
328 public void onViewStateRestored(@Nullable Bundle savedInstanceState) { 386 public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
329 super.onViewStateRestored(savedInstanceState); 387 super.onViewStateRestored(savedInstanceState);
330 388
331 initData(); 389 initData();
332 } 390 }
333 391
334 392
335 @Override 393 @Override
336 public void onActivityResult(int requestCode, int resultCode, Intent data) { 394 public void onActivityResult(int requestCode, int resultCode, Intent data) {
337 super.onActivityResult(requestCode, resultCode, data); 395 super.onActivityResult(requestCode, resultCode, data);
338 396
339 } 397 }
398
399
340 400
341 } 401 }
app/src/main/java/com/dinhcv/lifelogpedometer/activity/TopTodayFragment.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.app.ProgressDialog; 4 import android.app.ProgressDialog;
5 import android.content.Context; 5 import android.content.Context;
6 import android.graphics.Color; 6 import android.graphics.Color;
7 import android.hardware.Sensor; 7 import android.hardware.Sensor;
8 import android.hardware.SensorEvent; 8 import android.hardware.SensorEvent;
9 import android.hardware.SensorEventListener; 9 import android.hardware.SensorEventListener;
10 import android.hardware.SensorManager; 10 import android.hardware.SensorManager;
11 import android.os.Bundle; 11 import android.os.Bundle;
12 import android.support.annotation.Nullable; 12 import android.support.annotation.Nullable;
13 import android.view.LayoutInflater; 13 import android.view.LayoutInflater;
14 import android.view.Menu; 14 import android.view.Menu;
15 import android.view.MenuInflater; 15 import android.view.MenuInflater;
16 import android.view.View; 16 import android.view.View;
17 import android.view.ViewGroup; 17 import android.view.ViewGroup;
18 import android.widget.DatePicker; 18 import android.widget.DatePicker;
19 import android.widget.ImageView; 19 import android.widget.ImageView;
20 import android.widget.LinearLayout; 20 import android.widget.LinearLayout;
21 import android.widget.TextView; 21 import android.widget.TextView;
22 import android.widget.Toast; 22 import android.widget.Toast;
23 23
24 import com.dinhcv.lifelogpedometer.R; 24 import com.dinhcv.lifelogpedometer.R;
25 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 25 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
26 import com.dinhcv.lifelogpedometer.model.StepModel; 26 import com.dinhcv.lifelogpedometer.model.StepModel;
27 import com.dinhcv.lifelogpedometer.model.structure.top.StepItemInfo; 27 import com.dinhcv.lifelogpedometer.model.structure.top.StepItemInfo;
28 import com.dinhcv.lifelogpedometer.model.structure.top.TopInfo; 28 import com.dinhcv.lifelogpedometer.model.structure.top.TopInfo;
29 import com.dinhcv.lifelogpedometer.portal.ApiServices;
29 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 30 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
30 import com.dinhcv.lifelogpedometer.utils.Const; 31 import com.dinhcv.lifelogpedometer.utils.Const;
31 import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter; 32 import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter;
32 import com.dinhcv.lifelogpedometer.utils.Debug; 33 import com.dinhcv.lifelogpedometer.utils.Debug;
33 import com.dinhcv.lifelogpedometer.utils.Utils; 34 import com.dinhcv.lifelogpedometer.utils.Utils;
34 import com.github.mikephil.charting.components.XAxis; 35 import com.github.mikephil.charting.components.XAxis;
35 import com.github.mikephil.charting.components.YAxis; 36 import com.github.mikephil.charting.components.YAxis;
36 37
37 import com.github.mikephil.charting.charts.BarChart; 38 import com.github.mikephil.charting.charts.BarChart;
38 import com.github.mikephil.charting.data.BarData; 39 import com.github.mikephil.charting.data.BarData;
39 import com.github.mikephil.charting.data.BarDataSet; 40 import com.github.mikephil.charting.data.BarDataSet;
40 import com.github.mikephil.charting.data.BarEntry; 41 import com.github.mikephil.charting.data.BarEntry;
41 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; 42 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
42 43
43 import org.eazegraph.lib.charts.PieChart; 44 import org.eazegraph.lib.charts.PieChart;
44 import org.eazegraph.lib.models.PieModel; 45 import org.eazegraph.lib.models.PieModel;
45 import org.json.JSONArray; 46 import org.json.JSONArray;
46 import org.json.JSONException; 47 import org.json.JSONException;
47 import org.json.JSONObject; 48 import org.json.JSONObject;
48 49
49 import java.text.NumberFormat; 50 import java.text.NumberFormat;
50 import java.util.ArrayList; 51 import java.util.ArrayList;
51 import java.util.Arrays; 52 import java.util.Arrays;
52 import java.util.Calendar; 53 import java.util.Calendar;
53 import java.util.Date; 54 import java.util.Date;
54 import java.util.List; 55 import java.util.List;
55 import java.util.Locale; 56 import java.util.Locale;
56 57
57 import static com.github.mikephil.charting.utils.ColorTemplate.rgb; 58 import static com.github.mikephil.charting.utils.ColorTemplate.rgb;
58 59
59 60
60 public class TopTodayFragment extends FragmentBase implements SettingFragmentPresenter, SensorEventListener { 61 public class TopTodayFragment extends FragmentBase implements SettingFragmentPresenter, SensorEventListener {
61 62
62 private TextView stepsView; 63 private TextView stepsView;
63 private TextView tvStepGoal; 64 private TextView tvStepGoal;
64 private TextView tvDistance; 65 private TextView tvDistance;
65 private TextView tvTime; 66 private TextView tvTime;
66 private TextView tvStepRemain; 67 private TextView tvStepRemain;
67 private TextView tvStepRateDone; 68 private TextView tvStepRateDone;
68 private boolean showSteps = true; 69 private boolean showSteps = true;
69 private PieModel sliceGoal, sliceCurrent; 70 private PieModel sliceGoal, sliceCurrent;
70 private PieChart pg; 71 private PieChart pg;
71 private TextView tvDate; 72 private TextView tvDate;
72 private ImageView ivBack; 73 private ImageView ivBack;
73 private ImageView ivNext; 74 private ImageView ivNext;
74 75
75 private LinearLayout llBike; 76 private LinearLayout llBike;
76 private LinearLayout llWalking; 77 private LinearLayout llWalking;
77 private LinearLayout llRunning; 78 private LinearLayout llRunning;
78 private Const.STEP_TYPE stepType; 79 private Const.STEP_TYPE stepType;
79 80
80 private Date mAnaDate; 81 private Date mAnaDate;
81 private Calendar mCalendar; 82 private Calendar mCalendar;
82 83
83 private int mAnaDay; 84 private int mAnaDay;
84 private int mAnaMonth; 85 private int mAnaMonth;
85 private int mAnaYear; 86 private int mAnaYear;
86 87
87 public static int STEP_SIZE = 75; 88 public static int STEP_SIZE = 75;
88 private StepModel mStepModel; 89 private StepModel mStepModel;
89 private TextView tvSmallStepGoal; 90 private TextView tvSmallStepGoal;
90 private TextView tvSmallRemain; 91 private TextView tvSmallRemain;
91 private Context mContext; 92 private Context mContext;
92 93
93 public final static NumberFormat formatter = NumberFormat.getInstance(Locale.getDefault()); 94 public final static NumberFormat formatter = NumberFormat.getInstance(Locale.getDefault());
94 private SensorManager sensorManager; 95 private SensorManager sensorManager;
95 private boolean activityRunning; 96 private boolean activityRunning;
96 private int stepTotal = 0; 97 private int stepTotal = 0;
97 private int stepGoal = 0; 98 private int stepGoal = 0;
98 private int stepCount = 0; 99 private int stepCount = 0;
99 100
100 private Date mFromDate; 101 private Date mFromDate;
101 private Date mToDate; 102 private Date mToDate;
102 103
103 private TopInfo mTopInfo = new TopInfo(); 104 private TopInfo mTopInfo = new TopInfo();
104 private BarChart mChart; 105 private BarChart mChart;
105 106
106 private List<String> dateList; 107 private List<String> dateList;
107 private String[] mParties; 108 private String[] mParties;
108 private Integer[] mStep; 109 private Integer[] mStep;
109 private ProgressDialog progress; 110 private ProgressDialog progress;
110 111
111 private TopFragment mTopFragment; 112 private TopFragment mTopFragment;
112 public void setRootFragment(TopFragment frag) { 113 public void setRootFragment(TopFragment frag) {
113 this.mTopFragment = frag; 114 this.mTopFragment = frag;
114 } 115 }
115 116
116 @Override 117 @Override
117 public void onCreate(final Bundle savedInstanceState) { 118 public void onCreate(final Bundle savedInstanceState) {
118 super.onCreate(savedInstanceState); 119 super.onCreate(savedInstanceState);
119 setHasOptionsMenu(true); 120 setHasOptionsMenu(true);
120 } 121 }
121 122
122 @Override 123 @Override
123 public View onCreateView(final LayoutInflater inflater, final ViewGroup container, 124 public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
124 final Bundle savedInstanceState) { 125 final Bundle savedInstanceState) {
125 final View v = inflater.inflate(R.layout.fragment_top_today, null); 126 final View v = inflater.inflate(R.layout.fragment_top_today, null);
126 mContext = getActivity(); 127 mContext = getActivity();
127 sensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); 128 sensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
128 129
129 initView(v); 130 initView(v);
130 131
131 // slice for the steps taken today 132 // slice for the steps taken today
132 sliceCurrent = new PieModel("", 0, Color.parseColor("#6FE7F7")); 133 sliceCurrent = new PieModel("", 0, Color.parseColor("#6FE7F7"));
133 pg.addPieSlice(sliceCurrent); 134 pg.addPieSlice(sliceCurrent);
134 135
135 // slice for the "missing" steps until reaching the goal 136 // slice for the "missing" steps until reaching the goal
136 sliceGoal = new PieModel("", Const.STEP_GOAL, Color.parseColor("#B7B8B6")); 137 sliceGoal = new PieModel("", Const.STEP_GOAL, Color.parseColor("#B7B8B6"));
137 pg.addPieSlice(sliceGoal); 138 pg.addPieSlice(sliceGoal);
139
138 pg.setDrawValueInPie(false); 140 pg.setDrawValueInPie(false);
139 pg.setUsePieRotation(false); 141 pg.setUsePieRotation(false);
142 pg.setInnerPadding(93);
143 pg.setInnerPaddingColor(R.color.background_main);
140 pg.startAnimation(); 144 pg.startAnimation();
141 pg.setAutoCenterInSlice(false); 145 pg.setAutoCenterInSlice(false);
142 146
143 mCalendar = Calendar.getInstance(); 147 mCalendar = Calendar.getInstance();
144 mCalendar.setTime(new Date()); 148 mCalendar.setTime(new Date());
145 mAnaDate = mCalendar.getTime(); 149 mAnaDate = mCalendar.getTime();
146 mAnaYear = mCalendar.get(Calendar.YEAR); 150 mAnaYear = mCalendar.get(Calendar.YEAR);
147 mAnaMonth = mCalendar.get(Calendar.MONTH); 151 mAnaMonth = mCalendar.get(Calendar.MONTH);
148 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); 152 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH);
149 153
150 mFromDate = new Date(); 154 mFromDate = new Date();
151 155
152 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); 156 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate));
153 157
154 initData(); 158 initData();
155 159
156 handleEvent(); 160 handleEvent();
157 161
158 getTopPage(mAnaDate, stepType); 162 getTopPage(mAnaDate, stepType);
159 163
160 return v; 164 return v;
161 } 165 }
162 166
163 private void initView(View v){ 167 private void initView(View v){
164 stepsView = (TextView) v.findViewById(R.id.steps); 168 stepsView = (TextView) v.findViewById(R.id.steps);
165 tvDistance = (TextView) v.findViewById(R.id.tv_distance); 169 tvDistance = (TextView) v.findViewById(R.id.tv_distance);
166 tvStepGoal = (TextView) v.findViewById(R.id.tv_stepGoal); 170 tvStepGoal = (TextView) v.findViewById(R.id.tv_stepGoal);
167 tvStepRemain = (TextView) v.findViewById(R.id.tv_stepRemain); 171 tvStepRemain = (TextView) v.findViewById(R.id.tv_stepRemain);
168 tvStepRateDone = (TextView) v.findViewById(R.id.tv_stepRateDone); 172 tvStepRateDone = (TextView) v.findViewById(R.id.tv_stepRateDone);
169 tvSmallStepGoal = (TextView) v.findViewById(R.id.tv_smallStepGoal); 173 tvSmallStepGoal = (TextView) v.findViewById(R.id.tv_smallStepGoal);
170 tvSmallRemain = (TextView) v.findViewById(R.id.tv_smallRemain); 174 tvSmallRemain = (TextView) v.findViewById(R.id.tv_smallRemain);
171 tvTime = (TextView) v.findViewById(R.id.tv_time); 175 tvTime = (TextView) v.findViewById(R.id.tv_time);
172 tvDate = (TextView) v.findViewById(R.id.tv_date); 176 tvDate = (TextView) v.findViewById(R.id.tv_date);
173 ivBack = (ImageView) v.findViewById(R.id.iv_back); 177 ivBack = (ImageView) v.findViewById(R.id.iv_back);
174 ivNext = (ImageView) v.findViewById(R.id.iv_next); 178 ivNext = (ImageView) v.findViewById(R.id.iv_next);
175 179
176 mChart = (BarChart) v.findViewById(R.id.chart); 180 mChart = (BarChart) v.findViewById(R.id.chart);
177 pg = (PieChart) v.findViewById(R.id.graph); 181 pg = (PieChart) v.findViewById(R.id.graph);
178 182
179 llRunning = (LinearLayout) v.findViewById(R.id.ll_running); 183 llRunning = (LinearLayout) v.findViewById(R.id.ll_running);
180 llWalking = (LinearLayout) v.findViewById(R.id.ll_walking); 184 llWalking = (LinearLayout) v.findViewById(R.id.ll_walking);
181 llBike = (LinearLayout) v.findViewById(R.id.ll_bike); 185 llBike = (LinearLayout) v.findViewById(R.id.ll_bike);
182 } 186 }
183 187
184 private void initData(){ 188 private void initData(){
185 mCalendar = Calendar.getInstance(); 189 mCalendar = Calendar.getInstance();
186 mCalendar.setTime(new Date()); 190 mCalendar.setTime(new Date());
187 mAnaDate = mCalendar.getTime(); 191 mAnaDate = mCalendar.getTime();
188 mAnaYear = mCalendar.get(Calendar.YEAR); 192 mAnaYear = mCalendar.get(Calendar.YEAR);
189 mAnaMonth = mCalendar.get(Calendar.MONTH); 193 mAnaMonth = mCalendar.get(Calendar.MONTH);
190 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); 194 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH);
191 195
192 196
193 stepType = Const.STEP_TYPE.WALKING; 197 stepType = Const.STEP_TYPE.WALKING;
194 updateUiStepType(false, true, false); 198 updateUiStepType(false, true, false);
195 199
196 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); 200 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate));
197 } 201 }
198 202
199 private void updateUiStepType(boolean b1, boolean b2, boolean b3) { 203 private void updateUiStepType(boolean b1, boolean b2, boolean b3) {
200 llBike.setSelected(b1); 204 llBike.setSelected(b1);
201 llWalking.setSelected(b2); 205 llWalking.setSelected(b2);
202 llRunning.setSelected(b3); 206 llRunning.setSelected(b3);
203 } 207 }
204 208
205 private void stepsDistanceChanged() { 209 private void stepsDistanceChanged() {
206 if (progress != null){ 210 if (progress != null){
207 progress.dismiss(); 211 progress.dismiss();
208 } 212 }
209 updatePie(); 213 updatePie();
210 updateBars(); 214 updateBars();
211 } 215 }
212 216
213 217
214 @Override 218 @Override
215 public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { 219 public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
216 inflater.inflate(R.menu.main, menu); 220 inflater.inflate(R.menu.main, menu);
217 } 221 }
218 222
219 private void getTopPage(Date date, Const.STEP_TYPE stepType){ 223 private void getTopPage(Date date, Const.STEP_TYPE stepType){
220 224
221 progress = new ProgressDialog(mContext); 225 progress = new ProgressDialog(mContext);
222 progress.setMessage(getString(R.string.loading)); 226 progress.setMessage(getString(R.string.loading));
223 progress.setCancelable(false); 227 progress.setCancelable(false);
224 progress.show(); 228 progress.show();
225 LLAPIManager.topInfo(date, stepType, new LLAPIManagerListener() { 229 ApiServices.topInfo(date, stepType, new LLAPIManagerListener() {
226 @Override 230 @Override
227 public void onError(Error error) { 231 public void onError(Error error) {
228 Debug.error("Get data history error"); 232 Debug.error("Get data history error");
229 hiddenDialog(); 233 hiddenDialog();
230 showDialogNotData(); 234 showDialogNotData();
231 } 235 }
232 236
233 @Override 237 @Override
234 public void onSuccess(String json) { 238 public void onSuccess(String json) {
235 Debug.error("Get data history success"); 239 Debug.error("Get data history success");
236 loadDataDone(json); 240 loadDataDone(json);
237 } 241 }
238 242
239 @Override 243 @Override
240 public void onSuccess(JSONObject object) { 244 public void onSuccess(JSONObject object) {
241 Debug.error("Get data history success"); 245 Debug.error("Get data history success");
242 hiddenDialog(); 246 hiddenDialog();
243 } 247 }
244 }); 248 });
245 } 249 }
246 250
247 private void showDialogNotData(){ 251 private void showDialogNotData(){
248 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); 252 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data));
249 } 253 }
250 254
251 private void loadDataDone(String jsonString) { 255 private void loadDataDone(String jsonString) {
252 JSONObject jsonObject = null; 256 JSONObject jsonObject = null;
253 try { 257 try {
254 jsonObject = new JSONObject(jsonString); 258 jsonObject = new JSONObject(jsonString);
255 int status = jsonObject.optInt("status"); 259 int status = jsonObject.optInt("status");
256 if (status == 1) { 260 if (status == 1) {
257 JSONObject jsonObject1 = jsonObject.optJSONObject("result"); 261 JSONObject jsonObject1 = jsonObject.optJSONObject("result");
258 JSONObject targetInf = jsonObject1.getJSONObject("targetInf"); 262 JSONObject targetInf = jsonObject1.getJSONObject("targetInf");
259 263
260 if (targetInf != null){ 264 if (targetInf != null){
261 String target = targetInf.optString("target_step"); 265 String target = targetInf.optString("target_step");
262 Debug.normal("Target: "+ target); 266 Debug.normal("Target: "+ target);
263 mTopInfo.setTaget(targetInf.optString("target_step")); 267 mTopInfo.setTaget(targetInf.optString("target_step"));
264 mTopInfo.setSteps(targetInf.optString("num_step")); 268 mTopInfo.setSteps(targetInf.optString("num_step"));
265 mTopInfo.setStepRemain(targetInf.optString("remaining_step")); 269 mTopInfo.setStepRemain(targetInf.optString("remaining_step"));
266 mTopInfo.setCompletePercent(targetInf.optString("complete_percent")); 270 mTopInfo.setCompletePercent(targetInf.optString("complete_percent"));
267 } 271 }
268 272
269 mTopInfo.setKcalo(jsonObject1.optString("kcal")); 273 mTopInfo.setKcalo(jsonObject1.optString("kcal"));
270 mTopInfo.setDistance(jsonObject1.optString("distance")); 274 mTopInfo.setDistance(jsonObject1.optString("distance"));
271 mTopInfo.setTime(jsonObject1.optString("time")); 275 mTopInfo.setTime(jsonObject1.optString("time"));
272 JSONArray stepArr = jsonObject1.optJSONArray("dataChart"); 276 JSONArray stepArr = jsonObject1.optJSONArray("dataChart");
273 277
274 278
275 if (stepArr != null && stepArr.length() > 0) { 279 if (stepArr != null && stepArr.length() > 0) {
276 List<StepItemInfo> infoLists = new ArrayList<>(); 280 List<StepItemInfo> infoLists = new ArrayList<>();
277 for (int i = 0; i < stepArr.length(); i++){ 281 for (int i = 0; i < stepArr.length(); i++){
278 StepItemInfo stepItemInfo = new StepItemInfo(); 282 StepItemInfo stepItemInfo = new StepItemInfo();
279 JSONObject ob = (JSONObject) stepArr.get(i); 283 JSONObject ob = (JSONObject) stepArr.get(i);
280 stepItemInfo.setHour(ob.optInt("hour")); 284 stepItemInfo.setHour(ob.optInt("hour"));
281 stepItemInfo.setNumStep(ob.optInt("numStep")); 285 stepItemInfo.setNumStep(ob.optInt("numStep"));
282 infoLists.add(stepItemInfo); 286 infoLists.add(stepItemInfo);
283 } 287 }
284 288
285 mTopInfo.setStepList(infoLists); 289 mTopInfo.setStepList(infoLists);
286 } 290 }
287 291
288 } 292 }
289 } catch (JSONException e) { 293 } catch (JSONException e) {
290 e.printStackTrace(); 294 e.printStackTrace();
291 mTopInfo = new TopInfo();; 295 mTopInfo = new TopInfo();;
292 } 296 }
293 297
294 stepsDistanceChanged(); 298 stepsDistanceChanged();
295 } 299 }
296 300
297 private void updatePie() { 301 private void updatePie() {
298 // todayOffset might still be Integer.MIN_VALUE on first start 302 // todayOffset might still be Integer.MIN_VALUE on first start
299 int stepsToday = 0; 303 int stepsToday = 0;
300 int stepTarget = 0; 304 int stepTarget = 0;
301 if (mTopInfo != null) { 305 if (mTopInfo != null) {
302 if (mTopInfo.getSteps().contains(",")){ 306 if (mTopInfo.getSteps().contains(",")){
303 stepsToday = Integer.valueOf(mTopInfo.getSteps().replace(",", "")); 307 stepsToday = Integer.valueOf(mTopInfo.getSteps().replace(",", ""));
304 }else { 308 }else {
305 stepsToday = Integer.valueOf(mTopInfo.getSteps()); 309 stepsToday = Integer.valueOf(mTopInfo.getSteps());
306 } 310 }
307 311
308 if (mTopInfo.getTaget().contains(",")) { 312 if (mTopInfo.getTaget().contains(",")) {
309 stepTarget = Integer.valueOf(mTopInfo.getTaget().replace(",", "")); 313 stepTarget = Integer.valueOf(mTopInfo.getTaget().replace(",", ""));
310 }else { 314 }else {
311 stepTarget = Integer.valueOf(mTopInfo.getTaget()); 315 stepTarget = Integer.valueOf(mTopInfo.getTaget());
312 } 316 }
313 } 317 }
314 sliceCurrent.setValue(stepsToday); 318 sliceCurrent.setValue(stepsToday);
315 if (stepTarget - stepsToday > 0) { 319 if (stepTarget - stepsToday > 0) {
316 // goal not reached yet 320 // goal not reached yet
317 if (pg.getData().size() == 1) { 321 if (pg.getData().size() == 1) {
318 pg.addPieSlice(sliceGoal); 322 pg.addPieSlice(sliceGoal);
319 } 323 }
320 sliceGoal.setValue(stepTarget - stepsToday); 324 sliceGoal.setValue(stepTarget - stepsToday);
321 } else { 325 } else {
322 // goal reached 326 // goal reached
323 pg.clearChart(); 327 pg.clearChart();
324 pg.addPieSlice(sliceCurrent); 328 pg.addPieSlice(sliceCurrent);
325 } 329 }
326 pg.update(); 330 pg.update();
327 stepGoal = stepTarget; 331 stepGoal = stepTarget;
328 stepTotal = stepsToday; 332 stepTotal = stepsToday;
329 stepsView.setText(formatter.format(stepsToday)); 333 stepsView.setText(formatter.format(stepsToday));
330 int stepRemain = stepTarget - stepsToday; 334 int stepRemain = stepTarget - stepsToday;
331 tvStepRemain.setText(String.valueOf(stepRemain)); 335 tvStepRemain.setText(String.valueOf(stepRemain));
332 tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(stepsToday *100/ stepTarget))); 336 tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(stepsToday *100/ stepTarget)));
333 tvSmallRemain.setText(getResources().getString(R.string.pie_text_content3a, stepRemain)); 337 tvSmallRemain.setText(getResources().getString(R.string.pie_text_content3a, stepRemain));
334 tvStepGoal.setText(mTopInfo.getTaget()); 338 tvStepGoal.setText(mTopInfo.getTaget());
335 tvSmallStepGoal.setText(mTopInfo.getTaget()); 339 tvSmallStepGoal.setText(mTopInfo.getTaget());
336 340
337 tvDistance.setText(mTopInfo.getDistance()); 341 tvDistance.setText(mTopInfo.getDistance());
338 tvTime.setText(mTopInfo.getTime()); 342 tvTime.setText(mTopInfo.getTime());
339 343
340 double distanceToday = stepsToday * STEP_SIZE; 344 double distanceToday = stepsToday * STEP_SIZE;
341 distanceToday /= 100000; 345 distanceToday /= 100000;
342 tvDistance.setText(Utils.convert2String2Decimal(distanceToday)); 346 tvDistance.setText(Utils.convert2String2Decimal(distanceToday));
343 347
344 } 348 }
345 349
346 /** 350 /**
347 * Updates the bar graph to show the steps/distance of the last week. Should 351 * Updates the bar graph to show the steps/distance of the last week. Should
348 * be called when switching from step count to distance. 352 * be called when switching from step count to distance.
349 */ 353 */
350 private void updateBars() { 354 private void updateBars() {
351 355
352 dateList = new ArrayList<>(); 356 dateList = new ArrayList<>();
353 List<String> dateList = new ArrayList<>(); 357 List<String> dateList = new ArrayList<>();
354 List<Integer> stepList = new ArrayList<>(); 358 List<Integer> stepList = new ArrayList<>();
355 List<StepItemInfo> stepItemInfos = mTopInfo.getStepList(); 359 List<StepItemInfo> stepItemInfos = mTopInfo.getStepList();
356 if (stepItemInfos != null && stepItemInfos.size() >0) { 360 if (stepItemInfos != null && stepItemInfos.size() >0) {
357 for (int i = 0; i < stepItemInfos.size(); i++){ 361 for (int i = 0; i < stepItemInfos.size(); i++){
358 dateList.add(String.valueOf(stepItemInfos.get(i).getHour())); 362 dateList.add(String.valueOf(stepItemInfos.get(i).getHour()));
359 stepList.add(stepItemInfos.get(i).getNumStep()); 363 stepList.add(stepItemInfos.get(i).getNumStep());
360 } 364 }
361 } 365 }
362 366
363 mStep = stepList.toArray(new Integer[0]); 367 mStep = stepList.toArray(new Integer[0]);
364 mParties = dateList.toArray(new String[0]); 368 mParties = dateList.toArray(new String[0]);
365 369
366 initGraph(); 370 initGraph();
367 } 371 }
368 372
369 private void initGraph(){ 373 private void initGraph(){
370 374
371 mChart.setDrawBarShadow(false); 375 mChart.setDrawBarShadow(false);
372 mChart.setDrawValueAboveBar(true); 376 mChart.setDrawValueAboveBar(true);
373 377
374 // if more than 60 entries are displayed in the chart, no values will be 378 // if more than 60 entries are displayed in the chart, no values will be
375 // drawn 379 // drawn
376 mChart.setMaxVisibleValueCount(60); 380 mChart.setMaxVisibleValueCount(60);
377 381
378 mChart.getDescription().setEnabled(false); 382 mChart.getDescription().setEnabled(false);
379 // scaling can now only be done on x- and y-axis separately 383 // scaling can now only be done on x- and y-axis separately
380 mChart.setPinchZoom(false); 384 mChart.setPinchZoom(false);
381 385
382 mChart.setDrawGridBackground(false); 386 mChart.setDrawGridBackground(false);
383 // mChart.setDrawYLabels(false); 387 // mChart.setDrawYLabels(false);
384 List<String> listx = Arrays.asList(mParties); 388 List<String> listx = Arrays.asList(mParties);
385 DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(listx); 389 DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(listx);
386 390
387 XAxis xAxis = mChart.getXAxis(); 391 XAxis xAxis = mChart.getXAxis();
388 xAxis.setLabelRotationAngle(0); 392 xAxis.setLabelRotationAngle(0);
389 xAxis.setPosition(XAxis.XAxisPosition.TOP); 393 xAxis.setPosition(XAxis.XAxisPosition.TOP);
390 xAxis.setDrawGridLines(true); 394 xAxis.setDrawGridLines(true);
391 xAxis.setLabelCount(10); 395 xAxis.setLabelCount(10);
392 xAxis.setTextColor(Color.WHITE); 396 xAxis.setTextColor(Color.WHITE);
393 xAxis.setValueFormatter(xValueFormatter); 397 xAxis.setValueFormatter(xValueFormatter);
394 398
395 399
396 YAxis leftAxis = mChart.getAxisLeft(); 400 YAxis leftAxis = mChart.getAxisLeft();
397 leftAxis.setDrawLabels(false); 401 leftAxis.setDrawLabels(false);
398 leftAxis.setDrawGridLines(false); 402 leftAxis.setDrawGridLines(false);
399 leftAxis.setAxisMinimum(0f); 403 leftAxis.setAxisMinimum(0f);
400 leftAxis.setAxisMaximum(10000f); 404 leftAxis.setAxisMaximum(10000f);
401 leftAxis.setDrawZeroLine(false); 405 leftAxis.setDrawZeroLine(false);
402 406
403 leftAxis.setEnabled(false); 407 leftAxis.setEnabled(false);
404 mChart.setDrawValueAboveBar(false); 408 mChart.setDrawValueAboveBar(false);
405 mChart.getAxisRight().setEnabled(false); 409 mChart.getAxisRight().setEnabled(false);
406 410
407 // set auto scale min max 411 // set auto scale min max
408 mChart.setAutoScaleMinMaxEnabled(true); 412 mChart.setAutoScaleMinMaxEnabled(true);
409 mChart.notifyDataSetChanged(); 413 mChart.notifyDataSetChanged();
410 414
411 // Set enimate y 415 // Set enimate y
412 mChart.animateY(2000); 416 mChart.animateY(2000);
413 417
414 setData(); 418 setData();
415 419
416 mChart.getLegend().setEnabled(false); 420 mChart.getLegend().setEnabled(false);
417 } 421 }
418 422
419 423
420 private void setData() { 424 private void setData() {
421 425
422 ArrayList<String> xVals = new ArrayList<>(); 426 ArrayList<String> xVals = new ArrayList<>();
423 for (int i = 0; i < mStep.length; i++) { 427 for (int i = 0; i < mStep.length; i++) {
424 xVals.add(mParties[i % mStep.length]); 428 xVals.add(mParties[i % mStep.length]);
425 } 429 }
426 430
427 ArrayList<BarEntry> yVals1 = new ArrayList<>(); 431 ArrayList<BarEntry> yVals1 = new ArrayList<>();
428 for (int i = 0; i < mStep.length; i++) { 432 for (int i = 0; i < mStep.length; i++) {
429 float val = (float) (mStep[i]*1); 433 float val = (float) (mStep[i]*1);
430 yVals1.add(new BarEntry(i, val)); 434 yVals1.add(new BarEntry(i, val));
431 } 435 }
432 436
433 BarDataSet set1; 437 BarDataSet set1;
434 438
435 if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { 439 if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) {
436 set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); 440 set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0);
437 set1.setValues(yVals1); 441 set1.setValues(yVals1);
438 mChart.getData().notifyDataChanged(); 442 mChart.getData().notifyDataChanged();
439 mChart.notifyDataSetChanged(); 443 mChart.notifyDataSetChanged();
440 } else { 444 } else {
441 ArrayList<Integer> colors = new ArrayList<>(); 445 ArrayList<Integer> colors = new ArrayList<>();
442 446
443 447
444 int[] MATERIAL_COLORS = {rgb("#40CDEF")}; 448 int[] MATERIAL_COLORS = {rgb("#40CDEF")};
445 449
446 for (int c : MATERIAL_COLORS) 450 for (int c : MATERIAL_COLORS)
447 colors.add(c); 451 colors.add(c);
448 452
449 set1 = new BarDataSet(yVals1, null); 453 set1 = new BarDataSet(yVals1, null);
450 454
451 set1.setColors(colors); 455 set1.setColors(colors);
452 456
453 ArrayList<IBarDataSet> dataSets = new ArrayList<>(); 457 ArrayList<IBarDataSet> dataSets = new ArrayList<>();
454 dataSets.add(set1); 458 dataSets.add(set1);
455 459
456 BarData data = new BarData(dataSets); 460 BarData data = new BarData(dataSets);
457 data.setValueTextSize(10f); 461 data.setValueTextSize(10f);
458 462
459 mChart.setData(data); 463 mChart.setData(data);
460 } 464 }
461 } 465 }
462 466
463 467
464 468
465 private void handleEvent(){ 469 private void handleEvent(){
466 tvDate.setOnClickListener(new View.OnClickListener() { 470 tvDate.setOnClickListener(new View.OnClickListener() {
467 @Override 471 @Override
468 public void onClick(View view) { 472 public void onClick(View view) {
469 handleAnaDatePicker(); 473 handleAnaDatePicker();
470 } 474 }
471 }); 475 });
472 476
473 ivBack.setOnClickListener(new View.OnClickListener() { 477 ivBack.setOnClickListener(new View.OnClickListener() {
474 @Override 478 @Override
475 public void onClick(View view) { 479 public void onClick(View view) {
476 mCalendar = Calendar.getInstance(); 480 mCalendar = Calendar.getInstance();
477 mCalendar.setTime(mAnaDate); 481 mCalendar.setTime(mAnaDate);
478 mCalendar.add(Calendar.DAY_OF_MONTH, -1); 482 mCalendar.add(Calendar.DAY_OF_MONTH, -1);
479 Date date = mCalendar.getTime(); 483 Date date = mCalendar.getTime();
480 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 484 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
481 mAnaDate = date; 485 mAnaDate = date;
482 } 486 }
483 }); 487 });
484 488
485 ivNext.setOnClickListener(new View.OnClickListener() { 489 ivNext.setOnClickListener(new View.OnClickListener() {
486 @Override 490 @Override
487 public void onClick(View view) { 491 public void onClick(View view) {
488 mCalendar = Calendar.getInstance(); 492 mCalendar = Calendar.getInstance();
489 mCalendar.setTime(mAnaDate); 493 mCalendar.setTime(mAnaDate);
490 mCalendar.add(Calendar.DAY_OF_MONTH, +1); 494 mCalendar.add(Calendar.DAY_OF_MONTH, +1);
491 Date date = mCalendar.getTime(); 495 Date date = mCalendar.getTime();
492 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 496 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
493 mAnaDate = date; 497 mAnaDate = date;
494 } 498 }
495 }); 499 });
496 500
497 llBike.setOnClickListener(new View.OnClickListener() { 501 llBike.setOnClickListener(new View.OnClickListener() {
498 @Override 502 @Override
499 public void onClick(View view) { 503 public void onClick(View view) {
500 stepType = Const.STEP_TYPE.BIKE; 504 stepType = Const.STEP_TYPE.BIKE;
501 updateUiStepType(true, false, false); 505 updateUiStepType(true, false, false);
502 getTopPage(mAnaDate, stepType); 506 getTopPage(mAnaDate, stepType);
503 } 507 }
504 }); 508 });
505 509
506 llRunning.setOnClickListener(new View.OnClickListener() { 510 llRunning.setOnClickListener(new View.OnClickListener() {
507 @Override 511 @Override
508 public void onClick(View view) { 512 public void onClick(View view) {
509 stepType = Const.STEP_TYPE.RUNNING; 513 stepType = Const.STEP_TYPE.RUNNING;
510 updateUiStepType(false, false, true); 514 updateUiStepType(false, false, true);
511 getTopPage(mAnaDate, stepType); 515 getTopPage(mAnaDate, stepType);
512 } 516 }
513 }); 517 });
514 518
515 llWalking.setOnClickListener(new View.OnClickListener() { 519 llWalking.setOnClickListener(new View.OnClickListener() {
516 @Override 520 @Override
517 public void onClick(View view) { 521 public void onClick(View view) {
518 stepType = Const.STEP_TYPE.WALKING; 522 stepType = Const.STEP_TYPE.WALKING;
519 updateUiStepType(false, true, false); 523 updateUiStepType(false, true, false);
520 getTopPage(mAnaDate, stepType); 524 getTopPage(mAnaDate, stepType);
521 } 525 }
522 }); 526 });
523 527
524 528
525 } 529 }
526 530
527 531
528 /** 532 /**
529 * Show date picker dialog 533 * Show date picker dialog
530 */ 534 */
531 private void handleAnaDatePicker() { 535 private void handleAnaDatePicker() {
532 536
533 new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { 537 new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
534 @Override 538 @Override
535 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 539 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
536 540
537 mCalendar = Calendar.getInstance(); 541 mCalendar = Calendar.getInstance();
538 mCalendar.set(year, monthOfYear, dayOfMonth); 542 mCalendar.set(year, monthOfYear, dayOfMonth);
539 mAnaYear = year; 543 mAnaYear = year;
540 mAnaMonth = monthOfYear; 544 mAnaMonth = monthOfYear;
541 mAnaDay = dayOfMonth; 545 mAnaDay = dayOfMonth;
542 Date date = mCalendar.getTime(); 546 Date date = mCalendar.getTime();
543 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 547 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
544 mAnaDate = date; 548 mAnaDate = date;
545 getTopPage(mAnaDate, stepType); 549 getTopPage(mAnaDate, stepType);
546 } 550 }
547 }, mAnaYear, mAnaMonth, mAnaDay).show(); 551 }, mAnaYear, mAnaMonth, mAnaDay).show();
548 552
549 } 553 }
550 554
551 555
552 private void updateUI(){ 556 private void updateUI(){
553 Debug.normal("Step total================ "+ stepTotal); 557 Debug.normal("Step total================ "+ stepTotal);
554 int stepRemain = stepGoal - stepTotal; 558 int stepRemain = stepGoal - stepTotal;
555 double percentDone = stepTotal *100.0 / stepGoal; 559 double percentDone = stepTotal *100.0 / stepGoal;
556 stepsView.setText(String.valueOf(stepTotal)); 560 stepsView.setText(String.valueOf(stepTotal));
557 tvStepRemain.setText(String.valueOf(stepRemain)); 561 tvStepRemain.setText(String.valueOf(stepRemain));
558 tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(percentDone))); 562 tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(percentDone)));
559 tvSmallRemain.setText(String.valueOf(stepRemain)); 563 tvSmallRemain.setText(String.valueOf(stepRemain));
560 } 564 }
561 565
562 @Override 566 @Override
563 public void onAttach(Context context) { 567 public void onAttach(Context context) {
564 super.onAttach(context); 568 super.onAttach(context);
565 569
566 } 570 }
567 571
568 @Override 572 @Override
569 public void onSaveData() { 573 public void onSaveData() {
570 574
571 } 575 }
572 576
573 @Override 577 @Override
574 public void onInvalidate(boolean isInit) { 578 public void onInvalidate(boolean isInit) {
575 initData(); 579 initData();
576 } 580 }
577 581
578 @Override 582 @Override
579 public void onViewStateRestored(@Nullable Bundle savedInstanceState) { 583 public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
580 super.onViewStateRestored(savedInstanceState); 584 super.onViewStateRestored(savedInstanceState);
581 585
582 initData(); 586 initData();
583 } 587 }
584 588
585 589
586 @Override 590 @Override
587 public void onResume() { 591 public void onResume() {
588 super.onResume(); 592 super.onResume();
589 activityRunning = true; 593 activityRunning = true;
594 Debug.normal("Today: "+ "Onresume ");
590 Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); 595 Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
591 if (countSensor != null) { 596 if (countSensor != null) {
597 Debug.normal("Today: "+ "countSensor not null ");
592 sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI); 598 sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI);
593 } else { 599 } else {
600 Debug.normal("Today: "+ "countSensor is null ");
594 Toast.makeText(mContext, getResources().getString(R.string.sensor_available), Toast.LENGTH_SHORT).show(); 601 Toast.makeText(mContext, getResources().getString(R.string.sensor_available), Toast.LENGTH_SHORT).show();
595 } 602 }
596 } 603 }
597 604
598 @Override 605 @Override
599 public void onSensorChanged(SensorEvent event) { 606 public void onSensorChanged(SensorEvent event) {
600 Debug.normal("Sensor count step active"); 607 Debug.normal("Sensor count step active");
601 if (activityRunning){ 608 if (activityRunning){
602 stepCount = (int) event.values[0]; 609 stepCount = (int) event.values[0];
603 Debug.normal("Step change: "+ stepCount); 610 Debug.normal("Step change: "+ stepCount);
604 stepTotal++; 611 stepTotal++;
605 // update UI 612 // update UI
606 updateUI(); 613 updateUI();
607 } 614 }
608 } 615 }
609 616
610 @Override 617 @Override
611 public void onAccuracyChanged(Sensor sensor, int accuracy) { 618 public void onAccuracyChanged(Sensor sensor, int accuracy) {
612 619
613 } 620 }
614 621
615 @Override 622 @Override
616 public void onPause() { 623 public void onPause() {
617 super.onPause(); 624 super.onPause();
618 activityRunning = false; 625 activityRunning = false;
619 Debug.normal("Start create log"); 626 Debug.normal("Start create log");
620 mToDate = new Date(); 627 mToDate = new Date();
621 if (sensorManager != null) { 628 if (sensorManager != null) {
622 sensorManager.unregisterListener(this); 629 sensorManager.unregisterListener(this);
623 } 630 }
624 // create log step 631 // create log step
625 creatLogStep(); 632 creatLogStep();
626 } 633 }
627 634
628 @Override 635 @Override
629 public void onDestroy() { 636 public void onDestroy() {
630 super.onDestroy(); 637 super.onDestroy();
631 } 638 }
632 639
633 private void creatLogStep(){ 640 private void creatLogStep(){
641 Debug.normal("Today: "+ "Create log "+ stepCount);
634 642
635 LLAPIManager.createLog(stepType, stepCount, mFromDate, mToDate, new LLAPIManagerListener() { 643 ApiServices.createLog(stepType, stepCount, mFromDate, mToDate, new LLAPIManagerListener() {
636 @Override 644 @Override
637 public void onError(Error error) { 645 public void onError(Error error) {
638 Debug.error("Get data history error"); 646 Debug.error("Get data history error");
639 } 647 }
640 648
641 @Override 649 @Override
642 public void onSuccess(String json) { 650 public void onSuccess(String json) {
643 Debug.error("Get data history success"); 651 Debug.error("Get data history success");
644 } 652 }
645 653
646 @Override 654 @Override
647 public void onSuccess(JSONObject object) { 655 public void onSuccess(JSONObject object) {
648 Debug.error("Get data history success"); 656 Debug.error("Get data history success");
649 } 657 }
650 }); 658 });
651 } 659 }
660
661
652 662
653 } 663 }
654 664
app/src/main/java/com/dinhcv/lifelogpedometer/activity/WelcomeActivity.java
1 package com.dinhcv.lifelogpedometer.activity; 1 package com.dinhcv.lifelogpedometer.activity;
2 2
3 import android.app.ProgressDialog; 3 import android.app.ProgressDialog;
4 import android.content.DialogInterface; 4 import android.content.DialogInterface;
5 import android.content.Intent; 5 import android.content.Intent;
6 import android.net.Uri; 6 import android.net.Uri;
7 import android.os.Bundle; 7 import android.os.Bundle;
8 import android.os.Handler; 8 import android.os.Handler;
9 import android.support.v7.app.AlertDialog; 9 import android.support.v7.app.AlertDialog;
10 10
11 import com.dinhcv.lifelogpedometer.R; 11 import com.dinhcv.lifelogpedometer.R;
12 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 12 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
13 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; 13 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
14 import com.dinhcv.lifelogpedometer.portal.ApiServices;
14 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 15 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
15 import com.dinhcv.lifelogpedometer.utils.Debug; 16 import com.dinhcv.lifelogpedometer.utils.Debug;
16 17
17 import org.json.JSONArray; 18 import org.json.JSONArray;
18 import org.json.JSONObject; 19 import org.json.JSONObject;
19 20
20 21
21 public class WelcomeActivity extends ActivityBase implements Runnable { 22 public class WelcomeActivity extends ActivityBase implements Runnable {
22 private boolean isRefresh = false; 23 private boolean isRefresh = false;
23 @Override 24 @Override
24 protected void onCreate(Bundle savedInstanceState) { 25 protected void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState); 26 super.onCreate(savedInstanceState);
26 setContentView(R.layout.activity_welcome); 27 setContentView(R.layout.activity_welcome);
27 checkRefreshToken(); 28 checkRefreshToken();
28 } 29 }
29 30
30 private void checkRefreshToken(){ 31 private void checkRefreshToken(){
31 int id = Setting.getUserIdSharepre(WelcomeActivity.this); 32 int id = Setting.getUserIdSharepre(WelcomeActivity.this);
32 Debug.normal("String id: "+ id); 33 Debug.normal("String id: "+ id);
33 if (id != 0){ 34 if (id != 0){
34 handleRefreshToken(id); 35 handleRefreshToken(id);
35 }else { 36 }else {
36 refeshDone(); 37 refeshDone();
37 } 38 }
38 } 39 }
39 40
40 41
41 private void handleRefreshToken(int id) { 42 private void handleRefreshToken(int id) {
42 43
43 LLAPIManager.refreshToken(WelcomeActivity.this, id, new LLAPIManagerListener() { 44 ApiServices.refreshToken(WelcomeActivity.this, id, new LLAPIManagerListener() {
44 @Override 45 @Override
45 public void onError(Error error) { 46 public void onError(Error error) {
46 Debug.error("Version JSON result: ERROR " + error); 47 Debug.error("Version JSON result: ERROR " + error);
47 String err = getResources().getString(R.string.login_error); 48 String err = getResources().getString(R.string.login_error);
48 isRefresh = false; 49 isRefresh = false;
49 refeshDone(); 50 refeshDone();
50 } 51 }
51 52
52 @Override 53 @Override
53 public void onSuccess(String json) { 54 public void onSuccess(String json) {
54 Debug.warn("Version JSON result: " + json.toString()); 55 Debug.warn("Version JSON result: " + json.toString());
55 isRefresh = true; 56 isRefresh = true;
56 refeshDone(); 57 refeshDone();
57 } 58 }
58 59
59 @Override 60 @Override
60 public void onSuccess(JSONObject object) { 61 public void onSuccess(JSONObject object) {
61 Debug.warn("Version JSON object result: Success"); 62 Debug.warn("Version JSON object result: Success");
62 isRefresh = true; 63 isRefresh = true;
63 refeshDone(); 64 refeshDone();
64 } 65 }
65 }); 66 });
66 } 67 }
67 68
68 private void refeshDone(){ 69 private void refeshDone(){
69 Handler handler = new Handler(); 70 Handler handler = new Handler();
70 handler.postDelayed(WelcomeActivity.this, 2000); 71 handler.postDelayed(WelcomeActivity.this, 2000);
71 } 72 }
72 73
73 private void notifyErr(String err){ 74 private void notifyErr(String err){
74 AlertDialog.Builder alertDialog = new AlertDialog.Builder(WelcomeActivity.this); 75 AlertDialog.Builder alertDialog = new AlertDialog.Builder(WelcomeActivity.this);
75 alertDialog.setMessage(err); 76 alertDialog.setMessage(err);
76 alertDialog.setCancelable(false); 77 alertDialog.setCancelable(false);
77 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 78 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
78 @Override 79 @Override
79 public void onClick(DialogInterface dialog, int which) { 80 public void onClick(DialogInterface dialog, int which) {
80 finish(); 81 finish();
81 } 82 }
82 }); 83 });
83 AlertDialog alert = alertDialog.create(); 84 AlertDialog alert = alertDialog.create();
84 alert.show(); 85 alert.show();
85 } 86 }
86 87
87 @Override 88 @Override
88 public void run() { 89 public void run() {
89 // go to main screen 90 // go to main screen
90 if ( isRefresh) { 91 if ( isRefresh) {
91 gotoActivity(PedometerActivity.class); 92 gotoActivity(PedometerActivity.class);
92 } else { 93 } else {
93 // Bundle bundle = new Bundle(); 94 // Bundle bundle = new Bundle();
94 // bundle.putString(Const.URL, url); 95 // bundle.putString(Const.URL, url);
95 gotoActivity(LoginActivity.class); 96 gotoActivity(LoginActivity.class);
96 } 97 }
97 finish(); 98 finish();
98 } 99 }
99 100
100 @Override 101 @Override
101 protected void onResume() { 102 protected void onResume() {
102 super.onResume(); 103 super.onResume();
103 } 104 }
104 } 105 }
105 106
app/src/main/java/com/dinhcv/lifelogpedometer/model/structure/home/NoticeInfo.java
1 package com.dinhcv.lifelogpedometer.model.structure.home; 1 package com.dinhcv.lifelogpedometer.model.structure.home;
2 2
3 public class NoticeInfo { 3 public class NoticeInfo {
4 private int id; 4 private int id;
5 private String content; 5 private String content;
6 6
7 public NoticeInfo(){
8
9 }
10
11 public NoticeInfo(int id, String content){
12 this.id = id;
13 this.content = content;
14 }
15
7 public int getId() { 16 public int getId() {
8 return id; 17 return id;
9 } 18 }
10 19
11 public void setId(int id) { 20 public void setId(int id) {
12 this.id = id; 21 this.id = id;
13 } 22 }
14 23
15 public String getContent() { 24 public String getContent() {
16 return content; 25 return content;
17 } 26 }
18 27
19 public void setContent(String content) { 28 public void setContent(String content) {
20 this.content = content; 29 this.content = content;
21 } 30 }
22 31
23 } 32 }
24 33
app/src/main/java/com/dinhcv/lifelogpedometer/portal/ApiServices.java
File was created 1 package com.dinhcv.lifelogpedometer.portal;
2
3 import android.content.Context;
4 import android.graphics.Bitmap;
5
6 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
7 import com.dinhcv.lifelogpedometer.model.structure.RegisterInfo;
8 import com.dinhcv.lifelogpedometer.utils.Const;
9
10 import java.util.Date;
11
12 /**
13 * Created by Administrator on 16/11/2017.
14 */
15
16 public class ApiServices {
17
18 public static void topInfo(final Date date, final Const.STEP_TYPE stepType, final LLAPIManagerListener action){
19 new LLAPIManager.TopInfo(date, stepType, action).execute();
20 }
21
22 public static void homePage(final Date date, final Const.STEP_TYPE stepType, final LLAPIManagerListener action) {
23 new LLAPIManager.HomePage(date, stepType, action).execute();
24 }
25
26
27 public static void historyDetail(final Date fromDate, final Date toDate, final LLAPIManagerListener action) {
28 new LLAPIManager.HistoryDetail(fromDate, toDate, action).execute();
29 }
30
31
32 public static void history(final Date fromDate, final Date toDate, final LLAPIManagerListener action) {
33 new LLAPIManager.History(fromDate, toDate, action).execute();
34 }
35
36
37 public static void forgetPassConfirm(final String email, final String codeConfirm, final LLAPIManagerListener action) {
38 new LLAPIManager.ForgetPassConfirm(email, codeConfirm, action).execute();
39 }
40
41
42 public static void forgetPass(final String email, final LLAPIManagerListener action) {
43 new LLAPIManager.ForgetPass(email, action).execute();
44 }
45
46
47 public static void register(final RegisterInfo registerInfo, final LLAPIManagerListener action) {
48 new LLAPIManager.Register(registerInfo, action).execute();
49 }
50
51
52 public static void uploadImage(final Bitmap bitmap, final LLAPIManagerListener action) {
53 new LLAPIManager.UploadImage(bitmap, action).execute();
54 }
55
56
57 public static void login(final Context context, final String email, final String pass, final LLAPIManagerListener action) {
58 new LLAPIManager.Login(context, email, pass, action).execute();
59 }
60
61 public static void createLog(final Const.STEP_TYPE stepType, final int stepCount, final Date startTime,
62 final Date endTime, final LLAPIManagerListener action) {
63 new LLAPIManager.CreateLog(stepType, stepCount, startTime, endTime, action).execute();
64 }
65
66
67 public static void refreshToken(final Context context, final int userId, final LLAPIManagerListener action) {
68 new LLAPIManager.RefreshToken(context, userId, action).execute();
69 }
70
71 public static void getNews(final Date date, final LLAPIManagerListener action) {
72 new LLAPIManager.GetNews(date, action).execute();
73 }
74
75
76 }
77
app/src/main/java/com/dinhcv/lifelogpedometer/portal/LLAPIManager.java
1 package com.dinhcv.lifelogpedometer.portal; 1 package com.dinhcv.lifelogpedometer.portal;
2 2
3 import android.content.Context; 3 import android.content.Context;
4 import android.content.res.AssetManager; 4 import android.content.res.AssetManager;
5 import android.graphics.Bitmap; 5 import android.graphics.Bitmap;
6 import android.graphics.BitmapFactory; 6 import android.graphics.BitmapFactory;
7 import android.os.AsyncTask; 7 import android.os.AsyncTask;
8 import android.provider.Settings; 8 import android.provider.Settings;
9 import android.support.annotation.NonNull; 9 import android.support.annotation.NonNull;
10 import android.util.Base64; 10 import android.util.Base64;
11 11
12 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 12 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
13 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; 13 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
14 import com.dinhcv.lifelogpedometer.model.structure.RegisterInfo; 14 import com.dinhcv.lifelogpedometer.model.structure.RegisterInfo;
15 import com.dinhcv.lifelogpedometer.utils.Const; 15 import com.dinhcv.lifelogpedometer.utils.Const;
16 import com.dinhcv.lifelogpedometer.utils.Debug; 16 import com.dinhcv.lifelogpedometer.utils.Debug;
17 import com.dinhcv.lifelogpedometer.utils.Utils; 17 import com.dinhcv.lifelogpedometer.utils.Utils;
18 18
19 import org.json.JSONArray; 19 import org.json.JSONArray;
20 import org.json.JSONException; 20 import org.json.JSONException;
21 import org.json.JSONObject; 21 import org.json.JSONObject;
22 22
23 import java.io.ByteArrayOutputStream; 23 import java.io.ByteArrayOutputStream;
24 import java.io.IOException; 24 import java.io.IOException;
25 import java.io.InputStream; 25 import java.io.InputStream;
26 import java.util.ArrayList;
27 import java.util.Arrays;
28 import java.util.Date; 26 import java.util.Date;
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.UUID;
32 import java.util.concurrent.TimeUnit; 27 import java.util.concurrent.TimeUnit;
33 28
34 import okhttp3.Call;
35 import okhttp3.Callback;
36 import okhttp3.HttpUrl; 29 import okhttp3.HttpUrl;
37 import okhttp3.MediaType; 30 import okhttp3.MediaType;
38 import okhttp3.OkHttpClient; 31 import okhttp3.OkHttpClient;
39 import okhttp3.Request; 32 import okhttp3.Request;
40 import okhttp3.RequestBody; 33 import okhttp3.RequestBody;
41 import okhttp3.Response; 34 import okhttp3.Response;
42 import okhttp3.ResponseBody; 35 import okhttp3.ResponseBody;
43 36
44 public class LLAPIManager { 37 public class LLAPIManager {
45 public static String URL_ROOT = "http://clover.timesfun.jp:9001/"; 38 private static String URL_ROOT = "http://clover.timesfun.jp:9001/";
46 //login info 39 //login info
47 public static String URL_LOGIN_INFO = "login"; 40 private static String URL_LOGIN_INFO = "login";
48 //register info 41 //register info
49 public static String URL_REGISTER_INFO = "register"; 42 private static String URL_REGISTER_INFO = "register";
50 //upload image info 43 //upload image info
51 public static String URL_UPLOAD_IMAGE_INFO = "upload-image"; 44 private static String URL_UPLOAD_IMAGE_INFO = "upload-image";
52 //Search zipcode 45 //Search zipcode
53 public static String URL_FORGET_PASS_INFO = "forgetPass"; 46 private static String URL_FORGET_PASS_INFO = "forgetPass";
54 //history 47 //history
55 public static String URL_HISTORE_INFO = "api/history"; 48 private static String URL_HISTORE_INFO = "api/history";
56 //history detail 49 //history detail
57 public static String URL_HISTORE_DETAIL_INFO = "api/history/detail"; 50 private static String URL_HISTORE_DETAIL_INFO = "api/history/detail";
58 // home 51 // home
59 public static String URL_HOME_INFO = "api/home"; 52 private static String URL_HOME_INFO = "api/home";
60 //Search zipcode 53 //Search zipcode
61 public static String URL_FORGET_PASS_CONFIRM_INFO = "forgetPass/confirm"; 54 private static String URL_FORGET_PASS_CONFIRM_INFO = "forgetPass/confirm";
62 // Refesh Token 55 // Refesh Token
63 public static String URL_REFESH_TOKEN_INFO = "refreshToken"; 56 private static String URL_REFESH_TOKEN_INFO = "refreshToken";
64 // Top info 57 // Top info
65 public static String URL_TOP_INFO = "api/top"; 58 private static String URL_TOP_INFO = "api/top";
66 // Refesh Token 59 // Refesh Token
67 public static String URL_CREATE_LOG_INFO = "api/createLog"; 60 private static String URL_CREATE_LOG_INFO = "api/createLog";
61 // Get news
62 private static String URL_GET_NEWS_INFO = "api/getnoticesbydate";
68 63
69 64
70
71 private static int deviationValue = 1; 65 private static int deviationValue = 1;
72 66
73 public static void login(final Context context, final String email, final String pass, final LLAPIManagerListener action) { 67 public static class Login extends AsyncTask<Void, Void, String>{
74 new AsyncTask<Void, Void, String>() { 68 private Context context;
69 private String email;
70 private String pass;
71 private LLAPIManagerListener action;
72
73 public Login(Context context, String email, String pass, LLAPIManagerListener action) {
74 this.context = context;
75 this.email = email;
76 this.pass = pass;
77 this.action = action;
78 }
79
75 @Override 80 @Override
76 protected void onPreExecute() { 81 protected void onPreExecute() {
77 super.onPreExecute(); 82 super.onPreExecute();
78 } 83 }
79 84
80 @Override 85 @Override
81 protected String doInBackground(Void... voids) { 86 protected String doInBackground(Void... voids) {
82 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_LOGIN_INFO); 87 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_LOGIN_INFO);
83 JSONObject jsonObject = new JSONObject(); 88 JSONObject jsonObject = new JSONObject();
84 89
85 try { 90 try {
86 jsonObject.put("email", email); 91 jsonObject.put("email", email);
87 jsonObject.put("password", pass); 92 jsonObject.put("password", pass);
88 93
89 Debug.warn("Json data: " + jsonObject.toString()); 94 Debug.warn("Json data: " + jsonObject.toString());
90 } catch (JSONException e) { 95 } catch (JSONException e) {
91 Debug.normal("Error ", e.getMessage()); 96 Debug.normal("Error ", e.getMessage());
92 } 97 }
93 98
94 MediaType JSON 99 MediaType JSON
95 = MediaType.parse("application/json"); 100 = MediaType.parse("application/json");
96 Debug.normal("JSON STRING: %s", jsonObject.toString()); 101 Debug.normal("JSON STRING: %s", jsonObject.toString());
97 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); 102 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
98 103
99 final Request.Builder request = new Request.Builder() 104 final Request.Builder request = new Request.Builder()
100 .url(baseUrl) 105 .url(baseUrl)
101 .header("User-Agent", Utils.getCustomUA()) 106 .header("User-Agent", Utils.getCustomUA())
102 .header("Content-Type", "application/json") 107 .header("Content-Type", "application/json")
103 .post(requestBody); 108 .post(requestBody);
104 109
105 OkHttpClient httpClient = new OkHttpClient.Builder() 110 OkHttpClient httpClient = new OkHttpClient.Builder()
106 .readTimeout(30, TimeUnit.SECONDS) 111 .readTimeout(30, TimeUnit.SECONDS)
107 .writeTimeout(30, TimeUnit.SECONDS) 112 .writeTimeout(30, TimeUnit.SECONDS)
108 .connectTimeout(30, TimeUnit.SECONDS) 113 .connectTimeout(30, TimeUnit.SECONDS)
109 .build(); 114 .build();
110 115
111 String jsonString = null; 116 String jsonString = null;
112 try { 117 try {
113 Response response = httpClient.newCall(request.build()).execute(); 118 Response response = httpClient.newCall(request.build()).execute();
114 if (response == null) { 119 if (response == null) {
115 action.onError(null); 120 action.onError(null);
116 Debug.error("Response is null"); 121 Debug.error("Response is null");
117 return null; 122 return null;
118 } 123 }
119 jsonString = getResponseData(response.body()); 124 jsonString = getResponseData(response.body());
120 125
121 } catch (IOException e) { 126 } catch (IOException e) {
122 Debug.normal("Error %s", e.getMessage()); 127 Debug.normal("Error %s", e.getMessage());
123 } 128 }
124 return jsonString; 129 return jsonString;
125 } 130 }
126 131
127 @Override 132 @Override
128 protected void onCancelled() { 133 protected void onCancelled() {
129 super.onCancelled(); 134 super.onCancelled();
130 action.onError(null); 135 action.onError(null);
131 } 136 }
132 137
133 @Override 138 @Override
134 protected void onPostExecute(String jsonString) { 139 protected void onPostExecute(String jsonString) {
135 super.onPostExecute(jsonString); 140 super.onPostExecute(jsonString);
136 141
137 if ((jsonString == null) || (jsonString.isEmpty())) { 142 if ((jsonString == null) || (jsonString.isEmpty())) {
138 action.onError(null); 143 action.onError(null);
139 return; 144 return;
140 } 145 }
141 Debug.normal("String body: "+jsonString); 146 Debug.normal("String body: "+jsonString);
142 147
143 try { 148 try {
144 JSONObject jsonObject = new JSONObject(jsonString); 149 JSONObject jsonObject = new JSONObject(jsonString);
145 int status = jsonObject.optInt("status"); 150 int status = jsonObject.optInt("status");
146 if (status == 1){ 151 if (status == 1){
147 JSONObject object = jsonObject.optJSONObject("result"); 152 JSONObject object = jsonObject.optJSONObject("result");
148 JSONObject objUser = object.getJSONObject("user"); 153 JSONObject objUser = object.getJSONObject("user");
149 String token = object.optString("token"); 154 String token = object.optString("token");
150 // save data 155 // save data
151 Setting.setUserDataSharepre(context, Setting.TOKEN_SHAREPRE, token); 156 Setting.setUserDataSharepre(context, Setting.TOKEN_SHAREPRE, token);
152 APIResponse.getInstance().setToken(token); 157 APIResponse.getInstance().setToken(token);
153 Debug.normal("Token: "+ token); 158 Debug.normal("Token: "+ token);
154 action.onSuccess(objUser); 159 action.onSuccess(objUser);
155 }else { 160 }else {
156 action.onError(new Error(jsonObject.optString("message"))); 161 action.onError(new Error(jsonObject.optString("message")));
157 } 162 }
158 } catch (JSONException e) { 163 } catch (JSONException e) {
159 e.printStackTrace(); 164 e.printStackTrace();
160 } 165 }
161 } 166 }
162 }.execute();
163 } 167 }
164 168
165 public static void uploadImage(final Bitmap bitmap, final LLAPIManagerListener action) { 169 public static class UploadImage extends AsyncTask<Void, Void, String>{
166 new AsyncTask<Void, Void, String>() { 170 private Bitmap bitmap;
171 private LLAPIManagerListener action;
172
173 public UploadImage(Bitmap bitmap, LLAPIManagerListener action) {
174 this.bitmap = bitmap;
175 this.action = action;
176 }
177
167 @Override 178 @Override
168 protected void onPreExecute() { 179 protected void onPreExecute() {
169 super.onPreExecute(); 180 super.onPreExecute();
170 } 181 }
171 182
172 @Override 183 @Override
173 protected String doInBackground(Void... voids) { 184 protected String doInBackground(Void... voids) {
174 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_UPLOAD_IMAGE_INFO); 185 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_UPLOAD_IMAGE_INFO);
175 JSONObject jsonObject = new JSONObject(); 186 JSONObject jsonObject = new JSONObject();
176 byte[] bitmapByte = convertBitmapToByteArray(bitmap); 187 byte[] bitmapByte = convertBitmapToByteArray(bitmap);
177 String imageBase64 = Base64.encodeToString(bitmapByte, Base64.DEFAULT); 188 String imageBase64 = Base64.encodeToString(bitmapByte, Base64.DEFAULT);
178 String imageStr = imageBase64.replace("\n",""); 189 String imageStr = imageBase64.replace("\n","");
179 190
180 String token = APIResponse.getInstance().getToken(); 191 String token = APIResponse.getInstance().getToken();
181 try { 192 try {
182 if (token != null && !token.isEmpty()) { 193 if (token != null && !token.isEmpty()) {
183 Debug.normal("Token is not null"); 194 Debug.normal("Token is not null");
184 jsonObject.put("token", token); 195 jsonObject.put("token", token);
185 } 196 }
186 jsonObject.put("img", imageStr); 197 jsonObject.put("img", imageStr);
187 198
188 Debug.warn("Json data: " + jsonObject.toString()); 199 Debug.warn("Json data: " + jsonObject.toString());
189 } catch (JSONException e) { 200 } catch (JSONException e) {
190 Debug.normal("Error ", e.getMessage()); 201 Debug.normal("Error ", e.getMessage());
191 } 202 }
192 203
193 MediaType JSON 204 MediaType JSON
194 = MediaType.parse("application/json; charset=utf-8"); 205 = MediaType.parse("application/json; charset=utf-8");
195 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); 206 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
196 207
197 final Request.Builder request = new Request.Builder() 208 final Request.Builder request = new Request.Builder()
198 .url(baseUrl) 209 .url(baseUrl)
199 .header("User-Agent", Utils.getCustomUA()) 210 .header("User-Agent", Utils.getCustomUA())
200 .header("Content-Type", "application/json") 211 .header("Content-Type", "application/json")
201 .post(requestBody); 212 .post(requestBody);
202 213
203 OkHttpClient httpClient = new OkHttpClient.Builder() 214 OkHttpClient httpClient = new OkHttpClient.Builder()
204 .readTimeout(30, TimeUnit.SECONDS) 215 .readTimeout(30, TimeUnit.SECONDS)
205 .writeTimeout(30, TimeUnit.SECONDS) 216 .writeTimeout(30, TimeUnit.SECONDS)
206 .connectTimeout(30, TimeUnit.SECONDS) 217 .connectTimeout(30, TimeUnit.SECONDS)
207 .build(); 218 .build();
208 String jsonString = null; 219 String jsonString = null;
209 try { 220 try {
210 Response response = httpClient.newCall(request.build()).execute(); 221 Response response = httpClient.newCall(request.build()).execute();
211 if (response == null) { 222 if (response == null) {
212 action.onError(null); 223 action.onError(null);
213 Debug.error("Response is null"); 224 Debug.error("Response is null");
214 return null; 225 return null;
215 } 226 }
216 jsonString = getResponseData(response.body()); 227 jsonString = getResponseData(response.body());
217 228
218 } catch (IOException e) { 229 } catch (IOException e) {
219 Debug.normal("Error %s", e.getMessage()); 230 Debug.normal("Error %s", e.getMessage());
220 } 231 }
221 232
222 return jsonString; 233 return jsonString;
223 } 234 }
224 235
225 @Override 236 @Override
226 protected void onCancelled() { 237 protected void onCancelled() {
227 super.onCancelled(); 238 super.onCancelled();
228 action.onError(null); 239 action.onError(null);
229 } 240 }
230 241
231 @Override 242 @Override
232 protected void onPostExecute(String jsonString) { 243 protected void onPostExecute(String jsonString) {
233 super.onPostExecute(jsonString); 244 super.onPostExecute(jsonString);
234 if ((jsonString == null) || (jsonString.isEmpty())) { 245 if ((jsonString == null) || (jsonString.isEmpty())) {
235 action.onError(null); 246 action.onError(null);
236 return; 247 return;
237 } 248 }
238 Debug.normal("String body: "+jsonString); 249 Debug.normal("String body: "+jsonString);
239 250
240 try { 251 try {
241 JSONObject jsonObject = new JSONObject(jsonString); 252 JSONObject jsonObject = new JSONObject(jsonString);
242 int status = jsonObject.optInt("status"); 253 int status = jsonObject.optInt("status");
243 if (status == 1){ 254 if (status == 1){
244 action.onSuccess(new JSONObject()); 255 action.onSuccess(new JSONObject());
245 }else { 256 }else {
246 action.onError(new Error(jsonObject.optString("message"))); 257 action.onError(new Error(jsonObject.optString("message")));
247 } 258 }
248 } catch (JSONException e) { 259 } catch (JSONException e) {
249 e.printStackTrace(); 260 e.printStackTrace();
250 } 261 }
251 } 262 }
252 }.execute();
253 } 263 }
254 264
255 public static void register(final RegisterInfo registerInfo, final LLAPIManagerListener action) { 265 public static class Register extends AsyncTask<Void, Void, String>{
256 new AsyncTask<Void, Void, String>() { 266 private RegisterInfo registerInfo;
267 private LLAPIManagerListener action;
268
269 public Register(RegisterInfo registerInfo, LLAPIManagerListener action) {
270 this.registerInfo = registerInfo;
271 this.action = action;
272 }
273
257 @Override 274 @Override
258 protected void onPreExecute() { 275 protected void onPreExecute() {
259 super.onPreExecute(); 276 super.onPreExecute();
260 } 277 }
261 278
262 @Override 279 @Override
263 protected String doInBackground(Void... voids) { 280 protected String doInBackground(Void... voids) {
264 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_REGISTER_INFO); 281 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_REGISTER_INFO);
265 JSONObject jsonObject = new JSONObject(); 282 JSONObject jsonObject = new JSONObject();
266 283
267 String token = APIResponse.getInstance().getToken(); 284 String token = APIResponse.getInstance().getToken();
268 try { 285 try {
269 jsonObject.put("username", registerInfo.getUsername()); 286 jsonObject.put("username", registerInfo.getUsername());
270 jsonObject.put("password", registerInfo.getPassword()); 287 jsonObject.put("password", registerInfo.getPassword());
271 jsonObject.put("full_name", registerInfo.getFullName()); 288 jsonObject.put("full_name", registerInfo.getFullName());
272 jsonObject.put("nickname", registerInfo.getNickname()); 289 jsonObject.put("nickname", registerInfo.getNickname());
273 jsonObject.put("birthday", Utils.dateToStringFormatDayMonthYear(registerInfo.getBirthday())); 290 jsonObject.put("birthday", Utils.dateToStringFormatDayMonthYear(registerInfo.getBirthday()));
274 jsonObject.put("height", ""+registerInfo.getHeight()); 291 jsonObject.put("height", ""+registerInfo.getHeight());
275 jsonObject.put("weight", ""+registerInfo.getWeight()); 292 jsonObject.put("weight", ""+registerInfo.getWeight());
276 jsonObject.put("fat_rate", ""+registerInfo.getFatRate()); 293 jsonObject.put("fat_rate", ""+registerInfo.getFatRate());
277 jsonObject.put("gender", ""+registerInfo.getGender()); 294 jsonObject.put("gender", ""+registerInfo.getGender());
278 jsonObject.put("address", registerInfo.getAddress()); 295 jsonObject.put("address", registerInfo.getAddress());
279 jsonObject.put("desciption", ""); 296 jsonObject.put("desciption", "");
280 jsonObject.put("receive_notification", "0"); 297 jsonObject.put("receive_notification", "0");
281 //jsonObject.put("phone", "+84986940999"); 298 //jsonObject.put("phone", "+84986940999");
282 jsonObject.put("share_data", "1"); 299 jsonObject.put("share_data", "1");
283 jsonObject.put("profile_image", ""+registerInfo.getProfileImage()); 300 jsonObject.put("profile_image", ""+registerInfo.getProfileImage());
284 jsonObject.put("delete_flag", "0"); 301 jsonObject.put("delete_flag", "0");
285 jsonObject.put("email", registerInfo.getEmail()); 302 jsonObject.put("email", registerInfo.getEmail());
286 jsonObject.put("physical_activity", "0"); 303 jsonObject.put("physical_activity", "0");
287 jsonObject.put("remember_me", "1"); 304 jsonObject.put("remember_me", "1");
288 305
289 Debug.warn("Json data: " + jsonObject.toString()); 306 Debug.warn("Json data: " + jsonObject.toString());
290 } catch (JSONException e) { 307 } catch (JSONException e) {
291 Debug.normal("Error ", e.getMessage()); 308 Debug.normal("Error ", e.getMessage());
292 } 309 }
293 310
294 MediaType JSON 311 MediaType JSON
295 = MediaType.parse("application/json; charset=utf-8"); 312 = MediaType.parse("application/json; charset=utf-8");
296 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); 313 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
297 314
298 final Request.Builder request = new Request.Builder() 315 final Request.Builder request = new Request.Builder()
299 .url(baseUrl) 316 .url(baseUrl)
300 .header("User-Agent", Utils.getCustomUA()) 317 .header("User-Agent", Utils.getCustomUA())
301 .header("Content-Type", "application/json") 318 .header("Content-Type", "application/json")
302 .post(requestBody); 319 .post(requestBody);
303 320
304 OkHttpClient httpClient = new OkHttpClient.Builder() 321 OkHttpClient httpClient = new OkHttpClient.Builder()
305 .readTimeout(30, TimeUnit.SECONDS) 322 .readTimeout(30, TimeUnit.SECONDS)
306 .writeTimeout(30, TimeUnit.SECONDS) 323 .writeTimeout(30, TimeUnit.SECONDS)
307 .connectTimeout(30, TimeUnit.SECONDS) 324 .connectTimeout(30, TimeUnit.SECONDS)
308 .build(); 325 .build();
309 326
310 String jsonString = null; 327 String jsonString = null;
311 try { 328 try {
312 Response response = httpClient.newCall(request.build()).execute(); 329 Response response = httpClient.newCall(request.build()).execute();
313 if (response == null) { 330 if (response == null) {
314 action.onError(null); 331 action.onError(null);
315 Debug.error("Response is null"); 332 Debug.error("Response is null");
316 return null; 333 return null;
317 } 334 }
318 jsonString = getResponseData(response.body()); 335 jsonString = getResponseData(response.body());
319 336
320 } catch (IOException e) { 337 } catch (IOException e) {
321 Debug.normal("Error %s", e.getMessage()); 338 Debug.normal("Error %s", e.getMessage());
322 } 339 }
323 return jsonString; 340 return jsonString;
324 } 341 }
325 342
326 @Override 343 @Override
327 protected void onCancelled() { 344 protected void onCancelled() {
328 super.onCancelled(); 345 super.onCancelled();
329 action.onError(null); 346 action.onError(null);
330 } 347 }
331 348
332 @Override 349 @Override
333 protected void onPostExecute(String jsonString) { 350 protected void onPostExecute(String jsonString) {
334 super.onPostExecute(jsonString); 351 super.onPostExecute(jsonString);
335 if ((jsonString == null) || (jsonString.isEmpty())) { 352 if ((jsonString == null) || (jsonString.isEmpty())) {
336 action.onError(null); 353 action.onError(null);
337 return; 354 return;
338 } 355 }
339 Debug.normal("String body: "+jsonString); 356 Debug.normal("String body: "+jsonString);
340 357
341 try { 358 try {
342 JSONObject jsonObject = new JSONObject(jsonString); 359 JSONObject jsonObject = new JSONObject(jsonString);
343 int status = jsonObject.optInt("status"); 360 int status = jsonObject.optInt("status");
344 if (status == 1){ 361 if (status == 1){
345 JSONObject object = jsonObject.optJSONObject("result"); 362 JSONObject object = jsonObject.optJSONObject("result");
346 JSONObject objUser = object.getJSONObject("user"); 363 JSONObject objUser = object.getJSONObject("user");
347 String token = object.optString("token"); 364 String token = object.optString("token");
348 APIResponse.getInstance().setToken(token); 365 APIResponse.getInstance().setToken(token);
349 Debug.normal("Token: "+ token); 366 Debug.normal("Token: "+ token);
350 action.onSuccess(objUser); 367 action.onSuccess(objUser);
351 }else { 368 }else {
352 action.onError(new Error(jsonObject.optString("message"))); 369 action.onError(new Error(jsonObject.optString("message")));
353 } 370 }
354 } catch (JSONException e) { 371 } catch (JSONException e) {
355 e.printStackTrace(); 372 e.printStackTrace();
356 } 373 }
357 374
358 } 375 }
359 }.execute();
360 } 376 }
361 377
362 private static byte[] convertBitmapToByteArray(Bitmap bitmap) { 378 private static byte[] convertBitmapToByteArray(Bitmap bitmap) {
363 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 379 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
364 bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 380 bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
365 byte[] byteArray = byteArrayOutputStream.toByteArray(); 381 byte[] byteArray = byteArrayOutputStream.toByteArray();
366 return byteArray; 382 return byteArray;
367 } 383 }
368 384
369 public static void forgetPass(final String email, final LLAPIManagerListener action) { 385 public static class ForgetPass extends AsyncTask<Void, Void, String>{
370 new AsyncTask<Void, Void, String>() { 386 private String email;
387 private LLAPIManagerListener action;
371 388
389 public ForgetPass(String email, LLAPIManagerListener action) {
390 this.email = email;
391 this.action = action;
392 }
372 393
373 @Override 394 @Override
374 protected void onPreExecute() { 395 protected void onPreExecute() {
375 super.onPreExecute(); 396 super.onPreExecute();
376 } 397 }
377 398
378 @Override 399 @Override
379 protected String doInBackground(Void... voids) { 400 protected String doInBackground(Void... voids) {
380 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_FORGET_PASS_INFO); 401 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_FORGET_PASS_INFO);
381 JSONObject jsonObject = new JSONObject(); 402 JSONObject jsonObject = new JSONObject();
382 try { 403 try {
383 //Personal info 404 //Personal info
384 jsonObject.put("email", email); 405 jsonObject.put("email", email);
385 406
386 Debug.warn("Json data: " + jsonObject.toString()); 407 Debug.warn("Json data: " + jsonObject.toString());
387 } catch (JSONException e) { 408 } catch (JSONException e) {
388 Debug.normal("Error ", e.getMessage()); 409 Debug.normal("Error ", e.getMessage());
389 } 410 }
390 411
391 MediaType JSON 412 MediaType JSON
392 = MediaType.parse("application/json"); 413 = MediaType.parse("application/json");
393 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); 414 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
394 415
395 final Request.Builder request = new Request.Builder() 416 final Request.Builder request = new Request.Builder()
396 .url(baseUrl) 417 .url(baseUrl)
397 .header("User-Agent", Utils.getCustomUA()) 418 .header("User-Agent", Utils.getCustomUA())
398 .header("Content-Type", "application/json") 419 .header("Content-Type", "application/json")
399 .post(requestBody); 420 .post(requestBody);
400 421
401 OkHttpClient httpClient = new OkHttpClient.Builder() 422 OkHttpClient httpClient = new OkHttpClient.Builder()
402 .readTimeout(30, TimeUnit.SECONDS) 423 .readTimeout(30, TimeUnit.SECONDS)
403 .writeTimeout(30, TimeUnit.SECONDS) 424 .writeTimeout(30, TimeUnit.SECONDS)
404 .connectTimeout(30, TimeUnit.SECONDS) 425 .connectTimeout(30, TimeUnit.SECONDS)
405 .build(); 426 .build();
406 427
407 String jsonString = null; 428 String jsonString = null;
408 try { 429 try {
409 Response response = httpClient.newCall(request.build()).execute(); 430 Response response = httpClient.newCall(request.build()).execute();
410 if (response == null) { 431 if (response == null) {
411 action.onError(null); 432 action.onError(null);
412 Debug.error("Response is null"); 433 Debug.error("Response is null");
413 return null; 434 return null;
414 } 435 }
415 jsonString = getResponseData(response.body()); 436 jsonString = getResponseData(response.body());
416 437
417 } catch (IOException e) { 438 } catch (IOException e) {
418 Debug.normal("Error %s", e.getMessage()); 439 Debug.normal("Error %s", e.getMessage());
419 } 440 }
420 return jsonString; 441 return jsonString;
421 } 442 }
422 443
423 @Override 444 @Override
424 protected void onCancelled() { 445 protected void onCancelled() {
425 super.onCancelled(); 446 super.onCancelled();
426 action.onError(null); 447 action.onError(null);
427 } 448 }
428 449
429 @Override 450 @Override
430 protected void onPostExecute(String jsonString) { 451 protected void onPostExecute(String jsonString) {
431 super.onPostExecute(jsonString); 452 super.onPostExecute(jsonString);
432 if ((jsonString == null) || (jsonString.isEmpty())) { 453 if ((jsonString == null) || (jsonString.isEmpty())) {
433 action.onError(null); 454 action.onError(null);
434 return; 455 return;
435 } 456 }
436 Debug.normal("String body: "+jsonString); 457 Debug.normal("String body: "+jsonString);
437 458
438 try { 459 try {
439 JSONObject jsonObject = new JSONObject(jsonString); 460 JSONObject jsonObject = new JSONObject(jsonString);
440 int status = jsonObject.optInt("status"); 461 int status = jsonObject.optInt("status");
441 if (status == 1) { 462 if (status == 1) {
442 action.onSuccess(jsonString); 463 action.onSuccess(jsonString);
443 } else { 464 } else {
444 action.onError(new Error(jsonObject.getString("message"))); 465 action.onError(new Error(jsonObject.getString("message")));
445 } 466 }
446 } catch (JSONException e) { 467 } catch (JSONException e) {
447 action.onError(null); 468 action.onError(null);
448 } 469 }
449 } 470 }
450 }.execute(); 471
451 } 472 }
452 473
453 public static void forgetPassConfirm(final String email, final String codeConfirm, final LLAPIManagerListener action) { 474 public static class ForgetPassConfirm extends AsyncTask<Void, Void, String>{
454 new AsyncTask<Void, Void, String>() { 475 private String email;
476 private String codeConfirm;
477 private LLAPIManagerListener action;
455 478
479 public ForgetPassConfirm(String email, String codeConfirm, LLAPIManagerListener action) {
480 this.email = email;
481 this.codeConfirm = codeConfirm;
482 this.action = action;
483 }
456 484
457 @Override 485 @Override
458 protected void onPreExecute() { 486 protected void onPreExecute() {
459 super.onPreExecute(); 487 super.onPreExecute();
460 } 488 }
461 489
462 @Override 490 @Override
463 protected String doInBackground(Void... voids) { 491 protected String doInBackground(Void... voids) {
464 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_FORGET_PASS_CONFIRM_INFO); 492 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_FORGET_PASS_CONFIRM_INFO);
465 JSONObject jsonObject = new JSONObject(); 493 JSONObject jsonObject = new JSONObject();
466 try { 494 try {
467 //Personal info 495 //Personal info
468 jsonObject.put("email", email); 496 jsonObject.put("email", email);
469 jsonObject.put("code_confirm", codeConfirm); 497 jsonObject.put("code_confirm", codeConfirm);
470 498
471 Debug.warn("Json data: " + jsonObject.toString()); 499 Debug.warn("Json data: " + jsonObject.toString());
472 } catch (JSONException e) { 500 } catch (JSONException e) {
473 Debug.normal("Error ", e.getMessage()); 501 Debug.normal("Error ", e.getMessage());
474 } 502 }
475 503
476 MediaType JSON 504 MediaType JSON
477 = MediaType.parse("application/json"); 505 = MediaType.parse("application/json");
478 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); 506 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
479 507
480 final Request.Builder request = new Request.Builder() 508 final Request.Builder request = new Request.Builder()
481 .url(baseUrl) 509 .url(baseUrl)
482 .header("User-Agent", Utils.getCustomUA()) 510 .header("User-Agent", Utils.getCustomUA())
483 .header("Content-Type", "application/json") 511 .header("Content-Type", "application/json")
484 .post(requestBody); 512 .post(requestBody);
485 513
486 OkHttpClient httpClient = new OkHttpClient.Builder() 514 OkHttpClient httpClient = new OkHttpClient.Builder()
487 .readTimeout(30, TimeUnit.SECONDS) 515 .readTimeout(30, TimeUnit.SECONDS)
488 .writeTimeout(30, TimeUnit.SECONDS) 516 .writeTimeout(30, TimeUnit.SECONDS)
489 .connectTimeout(30, TimeUnit.SECONDS) 517 .connectTimeout(30, TimeUnit.SECONDS)
490 .build(); 518 .build();
491 String jsonString = null; 519 String jsonString = null;
492 try { 520 try {
493 Response response = httpClient.newCall(request.build()).execute(); 521 Response response = httpClient.newCall(request.build()).execute();
494 if (response == null) { 522 if (response == null) {
495 action.onError(null); 523 action.onError(null);
496 Debug.error("Response is null"); 524 Debug.error("Response is null");
497 return null; 525 return null;
498 } 526 }
499 jsonString = getResponseData(response.body()); 527 jsonString = getResponseData(response.body());
500 528
501 } catch (IOException e) { 529 } catch (IOException e) {
502 Debug.normal("Error %s", e.getMessage()); 530 Debug.normal("Error %s", e.getMessage());
503 } 531 }
504 return jsonString; 532 return jsonString;
505 } 533 }
506 534
507 @Override 535 @Override
508 protected void onCancelled() { 536 protected void onCancelled() {
509 super.onCancelled(); 537 super.onCancelled();
510 action.onError(null); 538 action.onError(null);
511 } 539 }
512 540
513 @Override 541 @Override
514 protected void onPostExecute(String jsonString) { 542 protected void onPostExecute(String jsonString) {
515 super.onPostExecute(jsonString); 543 super.onPostExecute(jsonString);
516 if ((jsonString == null) || (jsonString.isEmpty())) { 544 if ((jsonString == null) || (jsonString.isEmpty())) {
517 action.onError(null); 545 action.onError(null);
518 return; 546 return;
519 } 547 }
520 Debug.normal("String body: "+jsonString); 548 Debug.normal("String body: "+jsonString);
521 549
522 try { 550 try {
523 JSONObject jsonObject = new JSONObject(jsonString); 551 JSONObject jsonObject = new JSONObject(jsonString);
524 int status = jsonObject.optInt("status"); 552 int status = jsonObject.optInt("status");
525 if (status == 1) { 553 if (status == 1) {
526 action.onSuccess(jsonString); 554 action.onSuccess(jsonString);
527 } else { 555 } else {
528 action.onError(new Error(jsonObject.getString("message"))); 556 action.onError(new Error(jsonObject.getString("message")));
529 } 557 }
530 } catch (JSONException e) { 558 } catch (JSONException e) {
531 action.onError(null); 559 action.onError(null);
532 } 560 }
533 } 561 }
534 }.execute();
535 } 562 }
536 563
537 public static void history(final Date fromDate, final Date toDate, final LLAPIManagerListener action) { 564 public static class History extends AsyncTask<Void, Void, String>{
538 new AsyncTask<Void, Void, String>() { 565 private Date fromDate;
566 private Date toDate;
567 private LLAPIManagerListener action;
539 568
569 public History(Date fromDate, Date toDate, LLAPIManagerListener action) {
570 this.fromDate = fromDate;
571 this.toDate = toDate;
572 this.action = action;
573 }
540 574
541 @Override 575 @Override
542 protected void onPreExecute() { 576 protected void onPreExecute() {
543 super.onPreExecute(); 577 super.onPreExecute();
544 } 578 }
545 579
546 @Override 580 @Override
547 protected String doInBackground(Void... voids) { 581 protected String doInBackground(Void... voids) {
548 582
549 String fromStr = Utils.dateToStringFormatYearMonthDay(fromDate); 583 String fromStr = Utils.dateToStringFormatYearMonthDay(fromDate);
550 String toStr = Utils.dateToStringFormatYearMonthDay(toDate); 584 String toStr = Utils.dateToStringFormatYearMonthDay(toDate);
551 Debug.normal("Token: "+ APIResponse.getInstance().getToken()); 585 Debug.normal("Token: "+ APIResponse.getInstance().getToken());
552 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_HISTORE_INFO + "/"+ fromStr +"/"+ toStr); 586 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_HISTORE_INFO + "/"+ fromStr +"/"+ toStr);
553 Debug.normal("URL: "+baseUrl.toString()); 587 Debug.normal("URL: "+baseUrl.toString());
554 final Request.Builder request = new Request.Builder() 588 final Request.Builder request = new Request.Builder()
555 .url(baseUrl) 589 .url(baseUrl)
556 .header("User-Agent", Utils.getCustomUA()) 590 .header("User-Agent", Utils.getCustomUA())
557 .header("Content-Type", "application/json") 591 .header("Content-Type", "application/json")
558 .addHeader("token", APIResponse.getInstance().getToken()) 592 .addHeader("token", APIResponse.getInstance().getToken())
559 .get(); 593 .get();
560 594
561 OkHttpClient httpClient = new OkHttpClient.Builder() 595 OkHttpClient httpClient = new OkHttpClient.Builder()
562 .readTimeout(30, TimeUnit.SECONDS) 596 .readTimeout(30, TimeUnit.SECONDS)
563 .writeTimeout(30, TimeUnit.SECONDS) 597 .writeTimeout(30, TimeUnit.SECONDS)
564 .connectTimeout(30, TimeUnit.SECONDS) 598 .connectTimeout(30, TimeUnit.SECONDS)
565 .build(); 599 .build();
566 600
567 String jsonString = null; 601 String jsonString = null;
568 try { 602 try {
569 Response response = httpClient.newCall(request.build()).execute(); 603 Response response = httpClient.newCall(request.build()).execute();
570 if (response == null) { 604 if (response == null) {
571 action.onError(null); 605 action.onError(null);
572 Debug.error("Response is null"); 606 Debug.error("Response is null");
573 return null; 607 return null;
574 } 608 }
575 jsonString = getResponseData(response.body()); 609 jsonString = getResponseData(response.body());
576 610
577 } catch (IOException e) { 611 } catch (IOException e) {
578 Debug.normal("Error %s", e.getMessage()); 612 Debug.normal("Error %s", e.getMessage());
579 } 613 }
580 return jsonString; 614 return jsonString;
581 } 615 }
582 616
583 @Override 617 @Override
584 protected void onCancelled() { 618 protected void onCancelled() {
585 super.onCancelled(); 619 super.onCancelled();
586 action.onError(null); 620 action.onError(null);
587 } 621 }
588 622
589 @Override 623 @Override
590 protected void onPostExecute(String jsonString) { 624 protected void onPostExecute(String jsonString) {
591 super.onPostExecute(jsonString); 625 super.onPostExecute(jsonString);
592 if ((jsonString == null) || (jsonString.isEmpty())) { 626 if ((jsonString == null) || (jsonString.isEmpty())) {
593 action.onError(null); 627 action.onError(null);
594 return; 628 return;
595 } 629 }
596 Debug.normal("String body: "+jsonString); 630 Debug.normal("String body: "+jsonString);
597 631
598 try { 632 try {
599 JSONObject jsonObject = new JSONObject(jsonString); 633 JSONObject jsonObject = new JSONObject(jsonString);
600 int status = jsonObject.optInt("status"); 634 int status = jsonObject.optInt("status");
601 if (status == 1) { 635 if (status == 1) {
602 action.onSuccess(jsonString); 636 action.onSuccess(jsonString);
603 } else { 637 } else {
604 action.onError(new Error(jsonObject.getString("message"))); 638 action.onError(new Error(jsonObject.getString("message")));
605 } 639 }
606 } catch (JSONException e) { 640 } catch (JSONException e) {
607 action.onError(null); 641 action.onError(null);
608 } 642 }
609 } 643 }
610 }.execute();
611 } 644 }
612 645
613 public static void historyDetail(final Date fromDate, final Date toDate, final LLAPIManagerListener action) { 646 public static class HistoryDetail extends AsyncTask<Void, Void, String>{
614 new AsyncTask<Void, Void, String>() { 647 private Date fromDate;
648 private Date toDate;
649 private LLAPIManagerListener action;
615 650
651 public HistoryDetail(Date fromDate, Date toDate, LLAPIManagerListener action) {
652 this.fromDate = fromDate;
653 this.toDate = toDate;
654 this.action = action;
655 }
616 656
617 @Override 657 @Override
618 protected void onPreExecute() { 658 protected void onPreExecute() {
619 super.onPreExecute(); 659 super.onPreExecute();
620 } 660 }
621 661
622 @Override 662 @Override
623 protected String doInBackground(Void... voids) { 663 protected String doInBackground(Void... voids) {
624 664
625 String fromStr = Utils.dateToStringFormatDayMonthYear(fromDate); 665 String fromStr = Utils.dateToStringFormatDayMonthYear(fromDate);
626 String toStr = Utils.dateToStringFormatDayMonthYear(toDate); 666 String toStr = Utils.dateToStringFormatDayMonthYear(toDate);
627 Debug.normal("Token: "+ APIResponse.getInstance().getToken()); 667 Debug.normal("Token: "+ APIResponse.getInstance().getToken());
628 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_HISTORE_DETAIL_INFO + "/"+ fromStr +"/"+ toStr); 668 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_HISTORE_DETAIL_INFO + "/"+ fromStr +"/"+ toStr);
629 Debug.normal("URL: "+baseUrl.toString()); 669 Debug.normal("URL: "+baseUrl.toString());
630 final Request.Builder request = new Request.Builder() 670 final Request.Builder request = new Request.Builder()
631 .url(baseUrl) 671 .url(baseUrl)
632 .header("User-Agent", Utils.getCustomUA()) 672 .header("User-Agent", Utils.getCustomUA())
633 .header("Content-Type", "application/json") 673 .header("Content-Type", "application/json")
634 .addHeader("token", APIResponse.getInstance().getToken()) 674 .addHeader("token", APIResponse.getInstance().getToken())
635 .get(); 675 .get();
636 676
637 OkHttpClient httpClient = new OkHttpClient.Builder() 677 OkHttpClient httpClient = new OkHttpClient.Builder()
638 .readTimeout(30, TimeUnit.SECONDS) 678 .readTimeout(30, TimeUnit.SECONDS)
639 .writeTimeout(30, TimeUnit.SECONDS) 679 .writeTimeout(30, TimeUnit.SECONDS)
640 .connectTimeout(30, TimeUnit.SECONDS) 680 .connectTimeout(30, TimeUnit.SECONDS)
641 .build(); 681 .build();
642 682
643 String jsonString = null; 683 String jsonString = null;
644 try { 684 try {
645 Response response = httpClient.newCall(request.build()).execute(); 685 Response response = httpClient.newCall(request.build()).execute();
646 if (response == null) { 686 if (response == null) {
647 action.onError(null); 687 action.onError(null);
648 Debug.error("Response is null"); 688 Debug.error("Response is null");
649 return null; 689 return null;
650 } 690 }
651 jsonString = getResponseData(response.body()); 691 jsonString = getResponseData(response.body());
652 692
653 } catch (IOException e) { 693 } catch (IOException e) {
654 Debug.normal("Error %s", e.getMessage()); 694 Debug.normal("Error %s", e.getMessage());
655 } 695 }
656 return jsonString; 696 return jsonString;
657 } 697 }
658 698
659 @Override 699 @Override
660 protected void onCancelled() { 700 protected void onCancelled() {
661 super.onCancelled(); 701 super.onCancelled();
662 action.onError(null); 702 action.onError(null);
663 } 703 }
664 704
665 @Override 705 @Override
666 protected void onPostExecute(String jsonString) { 706 protected void onPostExecute(String jsonString) {
667 super.onPostExecute(jsonString); 707 super.onPostExecute(jsonString);
668 if ((jsonString == null) || (jsonString.isEmpty())) { 708 if ((jsonString == null) || (jsonString.isEmpty())) {
669 action.onError(null); 709 action.onError(null);
670 return; 710 return;
671 } 711 }
672 Debug.normal("String body: "+jsonString); 712 Debug.normal("String body: "+jsonString);
673 713
674 try { 714 try {
675 JSONObject jsonObject = new JSONObject(jsonString); 715 JSONObject jsonObject = new JSONObject(jsonString);
676 int status = jsonObject.optInt("status"); 716 int status = jsonObject.optInt("status");
677 if (status == 1) { 717 if (status == 1) {
678 action.onSuccess(jsonString); 718 action.onSuccess(jsonString);
679 } else { 719 } else {
680 action.onError(new Error(jsonObject.getString("message"))); 720 action.onError(new Error(jsonObject.getString("message")));
681 } 721 }
682 } catch (JSONException e) { 722 } catch (JSONException e) {
683 action.onError(null); 723 action.onError(null);
684 } 724 }
685 } 725 }
686 }.execute(); 726
687 } 727 }
688 728
689 public static void homePage(final Date date, final Const.STEP_TYPE stepType, final LLAPIManagerListener action) { 729 public static class HomePage extends AsyncTask<Void, Void, String>{
690 new AsyncTask<Void, Void, String>() { 730 private Date date;
731 private Const.STEP_TYPE stepType;
732 private LLAPIManagerListener action;
691 733
734 public HomePage(Date date, Const.STEP_TYPE stepType, LLAPIManagerListener action) {
735 this.date = date;
736 this.stepType = stepType;
737 this.action = action;
738 }
692 739
693 @Override 740 @Override
694 protected void onPreExecute() { 741 protected void onPreExecute() {
695 super.onPreExecute(); 742 super.onPreExecute();
696 } 743 }
697 744
698 @Override 745 @Override
699 protected String doInBackground(Void... voids) { 746 protected String doInBackground(Void... voids) {
700 747
701 String dateStr = Utils.dateToStringFormatDayMonthYear(date); 748 String dateStr = Utils.dateToStringFormatDayMonthYear(date);
702 Debug.normal("Token: "+ APIResponse.getInstance().getToken()); 749 Debug.normal("Token: "+ APIResponse.getInstance().getToken());
703 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_HOME_INFO + "/"+ stepType.value +"/"+ dateStr); 750 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_HOME_INFO + "/"+ stepType.value +"/"+ dateStr);
704 Debug.normal("URL: "+baseUrl.toString()); 751 Debug.normal("URL: "+baseUrl.toString());
705 final Request.Builder request = new Request.Builder() 752 final Request.Builder request = new Request.Builder()
706 .url(baseUrl) 753 .url(baseUrl)
707 .header("User-Agent", Utils.getCustomUA()) 754 .header("User-Agent", Utils.getCustomUA())
708 .header("Content-Type", "application/json") 755 .header("Content-Type", "application/json")
709 .addHeader("token", APIResponse.getInstance().getToken()) 756 .addHeader("token", APIResponse.getInstance().getToken())
710 .get(); 757 .get();
711 758
712 OkHttpClient httpClient = new OkHttpClient.Builder() 759 OkHttpClient httpClient = new OkHttpClient.Builder()
713 .readTimeout(30, TimeUnit.SECONDS) 760 .readTimeout(30, TimeUnit.SECONDS)
714 .writeTimeout(30, TimeUnit.SECONDS) 761 .writeTimeout(30, TimeUnit.SECONDS)
715 .connectTimeout(30, TimeUnit.SECONDS) 762 .connectTimeout(30, TimeUnit.SECONDS)
716 .build(); 763 .build();
717 764
718 String jsonString = null; 765 String jsonString = null;
719 try { 766 try {
720 Response response = httpClient.newCall(request.build()).execute(); 767 Response response = httpClient.newCall(request.build()).execute();
721 if (response == null) { 768 if (response == null) {
722 action.onError(null); 769 action.onError(null);
723 Debug.error("Response is null"); 770 Debug.error("Response is null");
724 return null; 771 return null;
725 } 772 }
726 jsonString = getResponseData(response.body()); 773 jsonString = getResponseData(response.body());
727 774
728 } catch (IOException e) { 775 } catch (IOException e) {
729 Debug.normal("Error %s", e.getMessage()); 776 Debug.normal("Error %s", e.getMessage());
730 } 777 }
731 return jsonString; 778 return jsonString;
732 } 779 }
733 780
734 @Override 781 @Override
735 protected void onCancelled() { 782 protected void onCancelled() {
736 super.onCancelled(); 783 super.onCancelled();
737 action.onError(null); 784 action.onError(null);
738 } 785 }
739 786
740 @Override 787 @Override
741 protected void onPostExecute(String jsonString) { 788 protected void onPostExecute(String jsonString) {
742 super.onPostExecute(jsonString); 789 super.onPostExecute(jsonString);
743 if ((jsonString == null) || (jsonString.isEmpty())) { 790 if ((jsonString == null) || (jsonString.isEmpty())) {
744 action.onError(null); 791 action.onError(null);
745 return; 792 return;
746 } 793 }
747 Debug.normal("String body: "+jsonString); 794 Debug.normal("String body: "+jsonString);
748 795
749 try { 796 try {
750 JSONObject jsonObject = new JSONObject(jsonString); 797 JSONObject jsonObject = new JSONObject(jsonString);
751 int status = jsonObject.optInt("status"); 798 int status = jsonObject.optInt("status");
752 if (status == 1) { 799 if (status == 1) {
753 action.onSuccess(jsonString); 800 action.onSuccess(jsonString);
754 } else { 801 } else {
755 action.onError(new Error(jsonObject.getString("message"))); 802 action.onError(new Error(jsonObject.getString("message")));
756 } 803 }
757 } catch (JSONException e) { 804 } catch (JSONException e) {
758 action.onError(null); 805 action.onError(null);
759 } 806 }
760 } 807 }
761 }.execute(); 808
762 } 809 }
763 810
764 public static void topInfo(final Date date, final Const.STEP_TYPE stepType, final LLAPIManagerListener action) { 811 public static class TopInfo extends AsyncTask<Void, Void, String>{
765 new AsyncTask<Void, Void, String>() { 812 private Date date;
813 private Const.STEP_TYPE stepType;
814 private LLAPIManagerListener action;
766 815
816 public TopInfo(Date date, Const.STEP_TYPE stepType, LLAPIManagerListener action) {
817 this.date = date;
818 this.stepType = stepType;
819 this.action = action;
820 }
767 821
768 @Override 822 @Override
769 protected void onPreExecute() { 823 protected void onPreExecute() {
770 super.onPreExecute(); 824 super.onPreExecute();
771 } 825 }
772 826
773 @Override 827 @Override
774 protected String doInBackground(Void... voids) { 828 protected String doInBackground(Void... voids) {
775 829
776 String dateStr = Utils.dateToStringFormatDayMonthYear(date); 830 String dateStr = Utils.dateToStringFormatDayMonthYear(date);
777 Debug.normal("Token: "+ APIResponse.getInstance().getToken()); 831 Debug.normal("Token: "+ APIResponse.getInstance().getToken());
778 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_TOP_INFO + "/"+ stepType.value +"/"+ dateStr); 832 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_TOP_INFO + "/"+ stepType.value +"/"+ dateStr);
779 Debug.normal("URL: "+baseUrl.toString()); 833 Debug.normal("URL: "+baseUrl.toString());
780 final Request.Builder request = new Request.Builder() 834 final Request.Builder request = new Request.Builder()
781 .url(baseUrl) 835 .url(baseUrl)
782 .header("User-Agent", Utils.getCustomUA()) 836 .header("User-Agent", Utils.getCustomUA())
783 .header("Content-Type", "application/json") 837 .header("Content-Type", "application/json")
784 .addHeader("token", APIResponse.getInstance().getToken()) 838 .addHeader("token", APIResponse.getInstance().getToken())
785 .get(); 839 .get();
786 840
787 OkHttpClient httpClient = new OkHttpClient.Builder() 841 OkHttpClient httpClient = new OkHttpClient.Builder()
788 .readTimeout(30, TimeUnit.SECONDS) 842 .readTimeout(30, TimeUnit.SECONDS)
789 .writeTimeout(30, TimeUnit.SECONDS) 843 .writeTimeout(30, TimeUnit.SECONDS)
790 .connectTimeout(30, TimeUnit.SECONDS) 844 .connectTimeout(30, TimeUnit.SECONDS)
791 .build(); 845 .build();
792 846
793 String jsonString = null; 847 String jsonString = null;
794 try { 848 try {
795 Response response = httpClient.newCall(request.build()).execute(); 849 Response response = httpClient.newCall(request.build()).execute();
796 if (response == null) { 850 if (response == null) {
797 action.onError(null); 851 action.onError(null);
798 Debug.error("Response is null"); 852 Debug.error("Response is null");
799 return null; 853 return null;
800 } 854 }
801 jsonString = getResponseData(response.body()); 855 jsonString = getResponseData(response.body());
802 856
803 } catch (IOException e) { 857 } catch (IOException e) {
804 Debug.normal("Error %s", e.getMessage()); 858 Debug.normal("Error %s", e.getMessage());
805 } 859 }
806 return jsonString; 860 return jsonString;
807 } 861 }
808 862
809 @Override 863 @Override
810 protected void onCancelled() { 864 protected void onCancelled() {
811 super.onCancelled(); 865 super.onCancelled();
812 action.onError(null); 866 action.onError(null);
813 } 867 }
814 868
815 @Override 869 @Override
816 protected void onPostExecute(String jsonString) { 870 protected void onPostExecute(String jsonString) {
817 super.onPostExecute(jsonString); 871 super.onPostExecute(jsonString);
818 if ((jsonString == null) || (jsonString.isEmpty())) { 872 if ((jsonString == null) || (jsonString.isEmpty())) {
819 action.onError(null); 873 action.onError(null);
820 return; 874 return;
821 } 875 }
822 Debug.normal("String body: "+jsonString); 876 Debug.normal("String body: "+jsonString);
823 877
824 try { 878 try {
825 JSONObject jsonObject = new JSONObject(jsonString); 879 JSONObject jsonObject = new JSONObject(jsonString);
826 int status = jsonObject.optInt("status"); 880 int status = jsonObject.optInt("status");
827 if (status == 1) { 881 if (status == 1) {
828 action.onSuccess(jsonString); 882 action.onSuccess(jsonString);
829 } else { 883 } else {
830 action.onError(new Error(jsonObject.getString("message"))); 884 action.onError(new Error(jsonObject.getString("message")));
831 } 885 }
832 } catch (JSONException e) { 886 } catch (JSONException e) {
833 action.onError(null); 887 action.onError(null);
834 } 888 }
835 } 889 }
836 }.execute(); 890
837 } 891 }
838 892
839 public static void createLog(final Const.STEP_TYPE stepType, final int stepCount, final Date startTime, 893 public static class CreateLog extends AsyncTask<Void, Void, String>{
840 final Date endTime, final LLAPIManagerListener action) { 894 private int stepCount;
841 new AsyncTask<Void, Void, String>() { 895 private Const.STEP_TYPE stepType;
896 private Date startTime;
897 private Date endTime;
898 private LLAPIManagerListener action;
842 899
900 public CreateLog(Const.STEP_TYPE stepType, int stepCount, Date startTime, Date endTime, LLAPIManagerListener action) {
901 this.stepCount = stepCount;
902 this.stepType = stepType;
903 this.startTime = startTime;
904 this.endTime = endTime;
905 this.action = action;
906 }
843 907
908
844 @Override 909 @Override
845 protected void onPreExecute() { 910 protected void onPreExecute() {
846 super.onPreExecute(); 911 super.onPreExecute();
847 } 912 }
848 913
849 @Override 914 @Override
850 protected String doInBackground(Void... voids) { 915 protected String doInBackground(Void... voids) {
851 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_CREATE_LOG_INFO); 916 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_CREATE_LOG_INFO);
852 JSONObject jsonObject = new JSONObject(); 917 JSONObject jsonObject = new JSONObject();
853 String startT = Utils.convertDate2DateTimeString(startTime); 918 String startT = Utils.convertDate2DateTimeString(startTime);
854 String endT = Utils.convertDate2DateTimeString(endTime); 919 String endT = Utils.convertDate2DateTimeString(endTime);
855 try { 920 try {
856 jsonObject.put("mode", stepType.value); 921 jsonObject.put("mode", stepType.value);
857 jsonObject.put("numStep", stepCount); 922 jsonObject.put("numStep", stepCount);
858 jsonObject.put("startTime", startT); 923 jsonObject.put("startTime", startT);
859 jsonObject.put("endTime", endT); 924 jsonObject.put("endTime", endT);
860 925
861 Debug.warn("Json data: " + jsonObject.toString()); 926 Debug.warn("Json data: " + jsonObject.toString());
862 } catch (JSONException e) { 927 } catch (JSONException e) {
863 Debug.normal("Error ", e.getMessage()); 928 Debug.normal("Error ", e.getMessage());
864 } 929 }
865 930
866 MediaType JSON 931 MediaType JSON
867 = MediaType.parse("application/json"); 932 = MediaType.parse("application/json");
868 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); 933 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
869 934
870 final Request.Builder request = new Request.Builder() 935 final Request.Builder request = new Request.Builder()
871 .url(baseUrl) 936 .url(baseUrl)
872 .header("User-Agent", Utils.getCustomUA()) 937 .header("User-Agent", Utils.getCustomUA())
873 .header("Content-Type", "application/json") 938 .header("Content-Type", "application/json")
874 .addHeader("token", APIResponse.getInstance().getToken()) 939 .addHeader("token", APIResponse.getInstance().getToken())
875 .post(requestBody); 940 .post(requestBody);
876 941
877 OkHttpClient httpClient = new OkHttpClient.Builder() 942 OkHttpClient httpClient = new OkHttpClient.Builder()
878 .readTimeout(30, TimeUnit.SECONDS) 943 .readTimeout(30, TimeUnit.SECONDS)
879 .writeTimeout(30, TimeUnit.SECONDS) 944 .writeTimeout(30, TimeUnit.SECONDS)
880 .connectTimeout(30, TimeUnit.SECONDS) 945 .connectTimeout(30, TimeUnit.SECONDS)
881 .build(); 946 .build();
882 947
883 String jsonString = null; 948 String jsonString = null;
884 try { 949 try {
885 Response response = httpClient.newCall(request.build()).execute(); 950 Response response = httpClient.newCall(request.build()).execute();
886 if (response == null) { 951 if (response == null) {
887 action.onError(null); 952 action.onError(null);
888 Debug.error("Response is null"); 953 Debug.error("Response is null");
889 return null; 954 return null;
890 } 955 }
891 jsonString = getResponseData(response.body()); 956 jsonString = getResponseData(response.body());
892 957
893 } catch (IOException e) { 958 } catch (IOException e) {
894 Debug.normal("Error %s", e.getMessage()); 959 Debug.normal("Error %s", e.getMessage());
895 } 960 }
896 return jsonString; 961 return jsonString;
897 } 962 }
898 963
899 @Override 964 @Override
900 protected void onCancelled() { 965 protected void onCancelled() {
901 super.onCancelled(); 966 super.onCancelled();
902 action.onError(null); 967 action.onError(null);
903 } 968 }
904 969
905 @Override 970 @Override
906 protected void onPostExecute(String jsonString) { 971 protected void onPostExecute(String jsonString) {
907 super.onPostExecute(jsonString); 972 super.onPostExecute(jsonString);
908 if ((jsonString == null) || (jsonString.isEmpty())) { 973 if ((jsonString == null) || (jsonString.isEmpty())) {
909 action.onError(null); 974 action.onError(null);
910 return; 975 return;
911 } 976 }
912 Debug.normal("String body: "+jsonString); 977 Debug.normal("String body: "+jsonString);
913 978
914 try { 979 try {
915 JSONObject jsonObject = new JSONObject(jsonString); 980 JSONObject jsonObject = new JSONObject(jsonString);
916 int status = jsonObject.optInt("status"); 981 int status = jsonObject.optInt("status");
917 if (status == 1) { 982 if (status == 1) {
918 action.onSuccess(jsonString); 983 action.onSuccess(jsonString);
919 } else { 984 } else {
920 action.onError(new Error(jsonObject.getString("message"))); 985 action.onError(new Error(jsonObject.getString("message")));
921 } 986 }
922 } catch (JSONException e) { 987 } catch (JSONException e) {
923 action.onError(null); 988 action.onError(null);
924 } 989 }
925 } 990 }
926 }.execute();
927 } 991 }
928 992
929 public static void refreshToken(final Context context, final int userId, final LLAPIManagerListener action) { 993 public static class RefreshToken extends AsyncTask<Void, Void, String>{
930 new AsyncTask<Void, Void, String>() { 994 private Context context;
995 private int userId;
996 private LLAPIManagerListener action;
931 997
998 public RefreshToken(Context context, int userId, LLAPIManagerListener action) {
999 this.context = context;
1000 this.userId = userId;
1001 this.action = action;
1002 }
932 1003
933 @Override 1004 @Override
934 protected void onPreExecute() { 1005 protected void onPreExecute() {
935 super.onPreExecute(); 1006 super.onPreExecute();
936 } 1007 }
937 1008
938 @Override 1009 @Override
939 protected String doInBackground(Void... voids) { 1010 protected String doInBackground(Void... voids) {
940 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_REFESH_TOKEN_INFO); 1011 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_REFESH_TOKEN_INFO);
941 JSONObject jsonObject = new JSONObject(); 1012 JSONObject jsonObject = new JSONObject();
942 try { 1013 try {
943 //Personal info 1014 //Personal info
944 jsonObject.put("userId", userId); 1015 jsonObject.put("userId", userId);
945 1016
946 Debug.warn("Json data: " + jsonObject.toString()); 1017 Debug.warn("Json data: " + jsonObject.toString());
947 } catch (JSONException e) { 1018 } catch (JSONException e) {
948 Debug.normal("Error ", e.getMessage()); 1019 Debug.normal("Error ", e.getMessage());
949 } 1020 }
950 1021
951 MediaType JSON 1022 MediaType JSON
952 = MediaType.parse("application/json"); 1023 = MediaType.parse("application/json");
953 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); 1024 RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString());
954 1025
955 final Request.Builder request = new Request.Builder() 1026 final Request.Builder request = new Request.Builder()
956 .url(baseUrl) 1027 .url(baseUrl)
957 .header("User-Agent", Utils.getCustomUA()) 1028 .header("User-Agent", Utils.getCustomUA())
958 .header("Content-Type", "application/json") 1029 .header("Content-Type", "application/json")
959 .post(requestBody); 1030 .post(requestBody);
960 1031
961 OkHttpClient httpClient = new OkHttpClient.Builder() 1032 OkHttpClient httpClient = new OkHttpClient.Builder()
962 .readTimeout(30, TimeUnit.SECONDS) 1033 .readTimeout(30, TimeUnit.SECONDS)
963 .writeTimeout(30, TimeUnit.SECONDS) 1034 .writeTimeout(30, TimeUnit.SECONDS)
964 .connectTimeout(30, TimeUnit.SECONDS) 1035 .connectTimeout(30, TimeUnit.SECONDS)
965 .build(); 1036 .build();
966 1037
967 String jsonString = null; 1038 String jsonString = null;
968 try { 1039 try {
969 Response response = httpClient.newCall(request.build()).execute(); 1040 Response response = httpClient.newCall(request.build()).execute();
970 if (response == null) { 1041 if (response == null) {
971 action.onError(null); 1042 action.onError(null);
972 Debug.error("Response is null"); 1043 Debug.error("Response is null");
973 return null; 1044 return null;
974 } 1045 }
975 jsonString = getResponseData(response.body()); 1046 jsonString = getResponseData(response.body());
976 1047
977 } catch (IOException e) { 1048 } catch (IOException e) {
978 Debug.normal("Error %s", e.getMessage()); 1049 Debug.normal("Error %s", e.getMessage());
979 } 1050 }
980 return jsonString; 1051 return jsonString;
981 } 1052 }
982 1053
983 @Override 1054 @Override
984 protected void onCancelled() { 1055 protected void onCancelled() {
985 super.onCancelled(); 1056 super.onCancelled();
986 action.onError(null); 1057 action.onError(null);
987 } 1058 }
988 1059
989 @Override 1060 @Override
990 protected void onPostExecute(String jsonString) { 1061 protected void onPostExecute(String jsonString) {
991 super.onPostExecute(jsonString); 1062 super.onPostExecute(jsonString);
992 if ((jsonString == null) || (jsonString.isEmpty())) { 1063 if ((jsonString == null) || (jsonString.isEmpty())) {
993 action.onError(null); 1064 action.onError(null);
994 return; 1065 return;
995 } 1066 }
996 Debug.normal("String body: "+jsonString); 1067 Debug.normal("String body: "+jsonString);
997 1068
998 try { 1069 try {
999 JSONObject jsonObject = new JSONObject(jsonString); 1070 JSONObject jsonObject = new JSONObject(jsonString);
1000 int status = jsonObject.optInt("status"); 1071 int status = jsonObject.optInt("status");
1001 if (status == 1) { 1072 if (status == 1) {
1002 JSONArray tokenArr = jsonObject.optJSONArray("result"); 1073 JSONArray tokenArr = jsonObject.optJSONArray("result");
1003 String token = tokenArr.get(0).toString(); 1074 String token = tokenArr.get(0).toString();
1004 Debug.normal("Refresh Token: "+ token); 1075 Debug.normal("Refresh Token: "+ token);
1005 // save data 1076 // save data
1006 Setting.setUserDataSharepre(context, Setting.TOKEN_SHAREPRE, token); 1077 Setting.setUserDataSharepre(context, Setting.TOKEN_SHAREPRE, token);
1007 APIResponse.getInstance().setToken(token); 1078 APIResponse.getInstance().setToken(token);
1008 action.onSuccess(jsonString); 1079 action.onSuccess(jsonString);
1009 } else { 1080 } else {
1010 action.onError(new Error(jsonObject.getString("message"))); 1081 action.onError(new Error(jsonObject.getString("message")));
1011 } 1082 }
1012 } catch (JSONException e) { 1083 } catch (JSONException e) {
1013 action.onError(null); 1084 action.onError(null);
1014 } 1085 }
1015 } 1086 }
1016 }.execute(); 1087 }
1088
1089 public static class GetNews extends AsyncTask<Void, Void, String>{
1090 private Date date;
1091 private LLAPIManagerListener action;
1092
1093 public GetNews(Date date, LLAPIManagerListener action) {
1094 this.date = date;
1095 this.action = action;
1096 }
1097
1098 @Override
1099 protected void onPreExecute() {
1100 super.onPreExecute();
1101 }
1102
1103 @Override
1104 protected String doInBackground(Void... voids) {
1105 String fromStr = Utils.dateToStringFormatDayMonthYear(date);
1106 Debug.normal("Token: "+ APIResponse.getInstance().getToken());
1107 HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_GET_NEWS_INFO + "/"+ fromStr);
1108 Debug.normal("URL: "+baseUrl.toString());
1109 final Request.Builder request = new Request.Builder()
1110 .url(baseUrl)
1111 .header("User-Agent", Utils.getCustomUA())
1112 .header("Content-Type", "application/json")
1113 .addHeader("token", APIResponse.getInstance().getToken())
1114 .get();
1115
1116 OkHttpClient httpClient = new OkHttpClient.Builder()
1117 .readTimeout(30, TimeUnit.SECONDS)
1118 .writeTimeout(30, TimeUnit.SECONDS)
1119 .connectTimeout(30, TimeUnit.SECONDS)
1120 .build();
1121
1122 String jsonString = null;
1123 try {
1124 Response response = httpClient.newCall(request.build()).execute();
1125 if (response == null) {
1126 action.onError(null);
1127 Debug.error("Response is null");
1128 return null;
1129 }
1130 jsonString = getResponseData(response.body());
1131
1132 } catch (IOException e) {
1133 Debug.normal("Error %s", e.getMessage());
1134 }
1135 return jsonString;
1136 }
1137
1138 @Override
1139 protected void onCancelled() {
1140 super.onCancelled();
1141 action.onError(null);
1142 }
1143
1144 @Override
1145 protected void onPostExecute(String jsonString) {
1146 super.onPostExecute(jsonString);
1147 if ((jsonString == null) || (jsonString.isEmpty())) {
1148 action.onError(null);
1149 return;
1150 }
1151 Debug.normal("String body: "+jsonString);
1152
1153 try {
1154 JSONObject jsonObject = new JSONObject(jsonString);
1155 int status = jsonObject.optInt("status");
1156 if (status == 1) {
1157 // save data
1158 action.onSuccess(jsonString);
1159 } else {
1160 action.onError(new Error(jsonObject.getString("message")));
1161 }
1162 } catch (JSONException e) {
1163 action.onError(null);
1164 }
1165 }
1017 } 1166 }
1018 1167
1019 public static Bitmap getBitmapFromAsset(Context context, String filePath) { 1168 public static Bitmap getBitmapFromAsset(Context context, String filePath) {
1020 AssetManager assetManager = context.getAssets(); 1169 AssetManager assetManager = context.getAssets();
1021 InputStream istr; 1170 InputStream istr;
1022 Bitmap bitmap = null; 1171 Bitmap bitmap = null;
1023 try { 1172 try {
1024 istr = assetManager.open(filePath); 1173 istr = assetManager.open(filePath);
1025 bitmap = BitmapFactory.decodeStream(istr); 1174 bitmap = BitmapFactory.decodeStream(istr);
1026 } catch (IOException e) { 1175 } catch (IOException e) {
1027 Debug.normal("error: %s", e.getMessage()); 1176 Debug.normal("error: %s", e.getMessage());
1028 } 1177 }
1029 return bitmap; 1178 return bitmap;
1030 } 1179 }
1031 1180
app/src/main/res/layout/fragment_history_content.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="wrap_content" 9 android:layout_height="wrap_content"
10 android:layout_above="@+id/ll_stepType" 10 android:layout_above="@+id/ll_stepType"
11 android:layout_alignParentStart="true" 11 android:layout_alignParentStart="true"
12 android:layout_alignParentTop="true"> 12 android:layout_alignParentTop="true">
13 13
14 14
15 <LinearLayout 15 <LinearLayout
16 android:layout_width="match_parent" 16 android:layout_width="match_parent"
17 android:layout_height="wrap_content" 17 android:layout_height="wrap_content"
18 android:orientation="vertical"> 18 android:orientation="vertical">
19 19
20 <LinearLayout 20 <LinearLayout
21 android:id="@+id/layout_top" 21 android:id="@+id/layout_top"
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="vertical"> 24 android:orientation="vertical">
25 25
26 <RelativeLayout 26 <RelativeLayout
27 android:id="@+id/layout_date_controll" 27 android:id="@+id/layout_date_controll"
28 android:layout_width="match_parent" 28 android:layout_width="match_parent"
29 android:layout_height="44dp" 29 android:layout_height="44dp"
30 android:layout_alignParentTop="true" 30 android:layout_alignParentTop="true"
31 android:gravity="center_vertical"> 31 android:gravity="center_vertical">
32 32
33 <ImageButton 33 <ImageButton
34 android:id="@+id/btn_left_date" 34 android:id="@+id/btn_left_date"
35 android:layout_width="44dp" 35 android:layout_width="44dp"
36 android:layout_height="44dp" 36 android:layout_height="44dp"
37 android:layout_alignParentLeft="true" 37 android:layout_alignParentLeft="true"
38 android:layout_centerVertical="true" 38 android:layout_centerVertical="true"
39 android:layout_marginLeft="16dp" 39 android:layout_marginLeft="16dp"
40 android:background="@android:color/darker_gray" 40 android:background="@android:color/darker_gray"
41 android:padding="8dp" 41 android:padding="8dp"
42 android:scaleType="fitCenter" 42 android:scaleType="fitCenter"
43 android:src="@drawable/ic_left_arrow" /> 43 android:src="@drawable/ic_left_arrow" />
44 44
45 <TextView 45 <TextView
46 android:id="@+id/tv_date" 46 android:id="@+id/tv_date"
47 android:layout_width="wrap_content" 47 android:layout_width="wrap_content"
48 android:layout_height="match_parent" 48 android:layout_height="match_parent"
49 android:layout_toRightOf="@+id/btn_left_date" 49 android:layout_toRightOf="@+id/btn_left_date"
50 android:background="@android:color/white" 50 android:background="@android:color/white"
51 android:gravity="center_vertical" 51 android:gravity="center_vertical"
52 android:padding="8dp" 52 android:padding="8dp"
53 android:text="2017年1月1日" 53 android:text="2017年1月1日"
54 android:textColor="@android:color/black" 54 android:textColor="@android:color/black"
55 android:textSize="18sp" /> 55 android:textSize="18sp" />
56 56
57 <TextView 57 <TextView
58 android:id="@+id/tv_week_day" 58 android:id="@+id/tv_week_day"
59 android:layout_width="match_parent" 59 android:layout_width="match_parent"
60 android:layout_height="match_parent" 60 android:layout_height="match_parent"
61 android:layout_toLeftOf="@+id/btn_right_date" 61 android:layout_toLeftOf="@+id/btn_right_date"
62 android:layout_toRightOf="@+id/tv_date" 62 android:layout_toRightOf="@+id/tv_date"
63 android:background="@android:color/white" 63 android:background="@android:color/white"
64 android:gravity="center" 64 android:gravity="center"
65 android:text="日曜日" 65 android:text="日曜日"
66 android:textColor="@android:color/black" 66 android:textColor="@android:color/black"
67 android:textSize="18sp" /> 67 android:textSize="18sp" />
68 68
69 <ImageButton 69 <ImageButton
70 android:id="@+id/btn_right_date" 70 android:id="@+id/btn_right_date"
71 android:layout_width="44dp" 71 android:layout_width="44dp"
72 android:layout_height="44dp" 72 android:layout_height="44dp"
73 android:layout_alignParentRight="true" 73 android:layout_alignParentRight="true"
74 android:layout_centerVertical="true" 74 android:layout_centerVertical="true"
75 android:layout_marginRight="16dp" 75 android:layout_marginRight="16dp"
76 android:background="@android:color/darker_gray" 76 android:background="@android:color/darker_gray"
77 android:padding="8dp" 77 android:padding="8dp"
78 android:scaleType="fitCenter" 78 android:scaleType="fitCenter"
79 android:src="@drawable/ic_right_arrow" /> 79 android:src="@drawable/ic_right_arrow" />
80 </RelativeLayout> 80 </RelativeLayout>
81 81
82 <LinearLayout 82 <LinearLayout
83 android:layout_width="match_parent" 83 android:layout_width="match_parent"
84 android:layout_height="wrap_content" 84 android:layout_height="wrap_content"
85 android:layout_marginTop="20dp" 85 android:layout_marginTop="20dp"
86 android:orientation="horizontal" 86 android:orientation="horizontal"
87 android:weightSum="5"> 87 android:weightSum="5">
88 88
89 <Button 89 <Button
90 android:id="@+id/btn_oneDay" 90 android:id="@+id/btn_oneDay"
91 style="@style/button_normal_style" 91 style="@style/button_normal_style"
92 android:layout_width="0dp" 92 android:layout_width="0dp"
93 android:layout_height="match_parent" 93 android:layout_height="match_parent"
94 android:layout_weight="1" 94 android:layout_weight="1"
95 android:background="@drawable/button_background" 95 android:background="@drawable/button_background"
96 android:text="@string/one_day" /> 96 android:text="@string/one_day" />
97 97
98 <Button 98 <Button
99 android:id="@+id/btn_oneWeek" 99 android:id="@+id/btn_oneWeek"
100 style="@style/button_normal_style" 100 style="@style/button_normal_style"
101 android:layout_width="0dp" 101 android:layout_width="0dp"
102 android:layout_height="match_parent" 102 android:layout_height="match_parent"
103 android:layout_weight="1" 103 android:layout_weight="1"
104 android:background="@drawable/button_background" 104 android:background="@drawable/button_background"
105 android:text="@string/one_week" /> 105 android:text="@string/one_week" />
106 106
107 <Button 107 <Button
108 android:id="@+id/btn_oneMonth" 108 android:id="@+id/btn_oneMonth"
109 style="@style/button_normal_style" 109 style="@style/button_normal_style"
110 android:layout_width="0dp" 110 android:layout_width="0dp"
111 android:layout_height="match_parent" 111 android:layout_height="match_parent"
112 android:layout_weight="1" 112 android:layout_weight="1"
113 android:background="@drawable/button_background" 113 android:background="@drawable/button_background"
114 android:text="@string/one_month" /> 114 android:text="@string/one_month" />
115 115
116 <Button 116 <Button
117 android:id="@+id/btn_threeMonth" 117 android:id="@+id/btn_threeMonth"
118 style="@style/button_normal_style" 118 style="@style/button_normal_style"
119 android:layout_width="0dp" 119 android:layout_width="0dp"
120 android:layout_height="match_parent" 120 android:layout_height="match_parent"
121 android:layout_weight="1" 121 android:layout_weight="1"
122 android:background="@drawable/button_background" 122 android:background="@drawable/button_background"
123 android:text="@string/three_month" /> 123 android:text="@string/three_month" />
124 124
125 <Button 125 <Button
126 android:id="@+id/btn_sixMonth" 126 android:id="@+id/btn_sixMonth"
127 style="@style/button_normal_style" 127 style="@style/button_normal_style"
128 android:layout_width="0dp" 128 android:layout_width="0dp"
129 android:layout_height="match_parent" 129 android:layout_height="match_parent"
130 android:layout_weight="1" 130 android:layout_weight="1"
131 android:background="@drawable/button_background" 131 android:background="@drawable/button_background"
132 android:text="@string/six_month" /> 132 android:text="@string/six_month" />
133 133
134 </LinearLayout> 134 </LinearLayout>
135 </LinearLayout> 135 </LinearLayout>
136 136
137 <LinearLayout 137 <LinearLayout
138 android:id="@+id/rcv_rank" 138 android:id="@+id/rcv_rank"
139 android:layout_width="match_parent" 139 android:layout_width="match_parent"
140 android:layout_height="match_parent" 140 android:layout_height="match_parent"
141 android:layout_above="@+id/layout_bottom" 141 android:layout_above="@+id/layout_bottom"
142 android:layout_below="@+id/layout_top" 142 android:layout_below="@+id/layout_top"
143 android:orientation="vertical"> 143 android:orientation="vertical">
144 144
145 <include layout="@layout/history_page_7_content"/> 145 <include layout="@layout/history_page_7_content"/>
146 146
147 <LinearLayout 147 <LinearLayout
148 android:layout_width="match_parent" 148 android:layout_width="match_parent"
149 android:layout_height="120dp" 149 android:layout_height="120dp"
150 android:orientation="vertical" 150 android:orientation="vertical"
151 android:layout_marginTop="10dp"> 151 android:layout_marginTop="10dp">
152 152
153 <!--<org.eazegraph.lib.charts.BarChart--> 153 <!--<org.eazegraph.lib.charts.BarChart-->
154 <!--xmlns:eaze="http://schemas.android.com/apk/res-auto"--> 154 <!--xmlns:eaze="http://schemas.android.com/apk/res-auto"-->
155 <!--android:id="@+id/bargraph"--> 155 <!--android:id="@+id/bargraph"-->
156 <!--android:layout_width="match_parent"--> 156 <!--android:layout_width="match_parent"-->
157 <!--android:layout_height="120dp"--> 157 <!--android:layout_height="120dp"-->
158 <!--android:layout_below="@+id/averageandtotaltext"--> 158 <!--android:layout_below="@+id/averageandtotaltext"-->
159 <!--eaze:egLegendHeight="0dp"--> 159 <!--eaze:egLegendHeight="0dp"-->
160 <!--eaze:egShowValues="false" />--> 160 <!--eaze:egShowValues="false" />-->
161 <com.github.mikephil.charting.charts.BarChart 161 <com.github.mikephil.charting.charts.BarChart
162 android:id="@+id/chart" 162 android:id="@+id/chart"
163 android:layout_width="match_parent" 163 android:layout_width="match_parent"
164 android:layout_height="match_parent" /> 164 android:layout_height="match_parent" />
165 165
166 166
167 </LinearLayout> 167 </LinearLayout>
168 168
169 169
170 </LinearLayout> 170 </LinearLayout>
171 171
172 <LinearLayout 172 <LinearLayout
173 android:id="@+id/layout_bottom" 173 android:id="@+id/layout_bottom"
174 android:layout_width="match_parent" 174 android:layout_width="match_parent"
175 android:layout_height="56dp" 175 android:layout_height="56dp"
176 android:orientation="horizontal" 176 android:orientation="horizontal"
177 android:weightSum="5"> 177 android:weightSum="5">
178 178
179 <Button 179 <Button
180 android:id="@+id/btn_face" 180 android:id="@+id/btn_face"
181 style="@style/button_bot_page_7_style" 181 style="@style/button_bot_page_7_style"
182 android:layout_width="0dp" 182 android:layout_width="0dp"
183 android:layout_height="match_parent" 183 android:layout_height="match_parent"
184 android:layout_weight="1" 184 android:layout_weight="1"
185 android:background="@drawable/button_background" 185 android:background="@drawable/button_background"
186 android:lines="2" 186 android:lines="2"
187 android:layout_margin="2dp"
187 android:text="@string/facebook" /> 188 android:text="@string/facebook" />
188 189
189 <Button 190 <Button
190 android:id="@+id/btn_twitter" 191 android:id="@+id/btn_twitter"
191 style="@style/button_bot_page_7_style" 192 style="@style/button_bot_page_7_style"
192 android:layout_width="0dp" 193 android:layout_width="0dp"
193 android:layout_height="match_parent" 194 android:layout_height="match_parent"
194 android:layout_weight="1" 195 android:layout_weight="1"
195 android:background="@drawable/button_background" 196 android:background="@drawable/button_background"
196 android:lines="2" 197 android:lines="2"
198 android:layout_margin="2dp"
197 android:text="@string/twitter" /> 199 android:text="@string/twitter" />
198 200
199 <Button 201 <Button
200 android:id="@+id/btn_line" 202 android:id="@+id/btn_line"
201 style="@style/button_bot_page_7_style" 203 style="@style/button_bot_page_7_style"
202 android:layout_width="0dp" 204 android:layout_width="0dp"
203 android:layout_height="match_parent" 205 android:layout_height="match_parent"
204 android:layout_weight="1" 206 android:layout_weight="1"
205 android:background="@drawable/button_background" 207 android:background="@drawable/button_background"
206 android:lines="2" 208 android:lines="2"
209 android:layout_margin="2dp"
207 android:text="@string/line" /> 210 android:text="@string/line" />
208 211
209 <Button 212 <Button
210 android:id="@+id/btn_email" 213 android:id="@+id/btn_email"
211 style="@style/button_bot_page_7_style" 214 style="@style/button_bot_page_7_style"
212 android:layout_width="0dp" 215 android:layout_width="0dp"
213 android:layout_height="match_parent" 216 android:layout_height="match_parent"
214 android:layout_weight="1" 217 android:layout_weight="1"
215 android:background="@drawable/button_background" 218 android:background="@drawable/button_background"
216 android:lines="2" 219 android:lines="2"
220 android:layout_margin="2dp"
217 android:text="@string/mail" /> 221 android:text="@string/mail" />
218 222
219 <Button 223 <Button
220 android:id="@+id/btn_other" 224 android:id="@+id/btn_other"
221 style="@style/button_bot_page_7_style" 225 style="@style/button_bot_page_7_style"
222 android:layout_width="0dp" 226 android:layout_width="0dp"
223 android:layout_height="match_parent" 227 android:layout_height="match_parent"
224 android:layout_weight="1" 228 android:layout_weight="1"
225 android:background="@drawable/button_background" 229 android:background="@drawable/button_background"
226 android:lines="2" 230 android:lines="2"
231 android:layout_margin="2dp"
227 android:text="@string/other" /> 232 android:text="@string/other" />
228 233
229 </LinearLayout> 234 </LinearLayout>
230 235
231 </LinearLayout> 236 </LinearLayout>
232 </ScrollView> 237 </ScrollView>
233 238
234 <include layout="@layout/type_step" /> 239 <include layout="@layout/type_step" />
235 </RelativeLayout> 240 </RelativeLayout>
236 241
1 // Top-level build file where you can add configuration options common to all sub-projects/modules. 1 // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 2
3 buildscript { 3 buildscript {
4 repositories { 4 repositories {
5 jcenter() 5 jcenter()
6 maven {
7 url 'https://maven.google.com/'
8 name 'Google'
9 }
6 } 10 }
7 dependencies { 11 dependencies {
8 classpath 'com.android.tools.build:gradle:2.3.3' 12 classpath 'com.android.tools.build:gradle:3.0.0'
9 13
10 // NOTE: Do not place your application dependencies here; they belong 14 // NOTE: Do not place your application dependencies here; they belong
11 // in the individual module build.gradle files 15 // in the individual module build.gradle files
12 } 16 }
13 } 17 }
14 18
15 allprojects { 19 allprojects {
16 repositories { 20 repositories {
17 jcenter() 21 jcenter()
18 maven { url "https://jitpack.io" } 22 maven { url "https://jitpack.io" }
23 maven {
24 url 'https://maven.google.com/'
25 name 'Google'
26 }
19 } 27 }
20 } 28 }
21 29
22 task clean(type: Delete) { 30 task clean(type: Delete) {
23 delete rootProject.buildDir 31 delete rootProject.buildDir
24 } 32 }
25 33
gradle/wrapper/gradle-wrapper.properties
1 #Thu Jul 27 00:11:14 ICT 2017 1 #Thu Nov 16 22:05:25 ICT 2017
2 distributionBase=GRADLE_USER_HOME 2 distributionBase=GRADLE_USER_HOME
3 distributionPath=wrapper/dists 3 distributionPath=wrapper/dists
4 zipStoreBase=GRADLE_USER_HOME 4 zipStoreBase=GRADLE_USER_HOME
5 zipStorePath=wrapper/dists 5 zipStorePath=wrapper/dists
6 distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip 6 distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
7 7