Commit 6b038e4433703087576aaa067062438a7616b652

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

update

Showing 50 changed files with 575 additions and 135 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="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_new.iml" filepath="$PROJECT_DIR$/lifelog_new.iml" />
7 <module fileurl="file://D:\Project\Git\lifelog_android\lifelogpedometer.iml" filepath="D:\Project\Git\lifelog_android\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 '26.0.2' 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 16
17 //flavorDimensions "default" 17 //flavorDimensions "default"
18 18
19 buildTypes { 19 buildTypes {
20 release { 20 release {
21 minifyEnabled false 21 minifyEnabled false
22 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23 } 23 }
24 } 24 }
25 25
26 signingConfigs { 26 signingConfigs {
27 dev { 27 dev {
28 storeFile file("../keystores/...") 28 storeFile file("../keystores/...")
29 storePassword 'android' 29 storePassword 'android'
30 keyAlias 'androiddebugkey' 30 keyAlias 'androiddebugkey'
31 keyPassword 'android' 31 keyPassword 'android'
32 } 32 }
33 33
34 product { 34 product {
35 storeFile file("..keystores/...") 35 storeFile file("..keystores/...")
36 storePassword 'android' 36 storePassword 'android'
37 keyAlias 'androiddebugkey' 37 keyAlias 'androiddebugkey'
38 keyPassword 'android' 38 keyPassword 'android'
39 } 39 }
40 } 40 }
41 41
42 productFlavors { 42 productFlavors {
43 43
44 dev { 44 dev {
45 applicationId "com.dinhcv.lifelogpedometer" 45 applicationId "com.dinhcv.lifelogpedometer"
46 applicationIdSuffix "dev" 46 applicationIdSuffix "dev"
47 minSdkVersion 19 47 minSdkVersion 19
48 buildConfigField 'String', 'BASE_URL', '"http://clover.timesfun.jp:9001/"' 48 buildConfigField 'String', 'BASE_URL', '"http://clover.timesfun.jp:9001/"'
49 } 49 }
50 50
51 product { 51 product {
52 applicationId "com.dinhcv.lifelogpedometer" 52 applicationId "com.dinhcv.lifelogpedometer"
53 minSdkVersion 19 53 minSdkVersion 19
54 buildConfigField 'String', 'BASE_URL', '"http://clover.timesfun.jp:9001/"' 54 buildConfigField 'String', 'BASE_URL', '"http://clover.timesfun.jp:9001/"'
55 } 55 }
56 } 56 }
57 } 57 }
58 58
59 dependencies { 59 dependencies {
60 compile fileTree(include: ['*.jar'], dir: 'libs') 60 compile fileTree(include: ['*.jar'], dir: 'libs')
61 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 61 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
62 exclude group: 'com.android.support', module: 'support-annotations' 62 exclude group: 'com.android.support', module: 'support-annotations'
63 }) 63 })
64 64
65 // Retrofit 65 // Retrofit
66 // JSON Parsing 66 // JSON Parsing
67 compile 'com.squareup.retrofit2:converter-gson:2.1.0' 67 compile 'com.squareup.retrofit2:converter-gson:2.1.0'
68 compile 'com.android.support:appcompat-v7:25.3.1' 68 compile 'com.android.support:appcompat-v7:25.3.1'
69 compile 'com.github.j4velin.colorpicker:colorpicker:1.2.3' 69 compile 'com.github.j4velin.colorpicker:colorpicker:1.2.3'
70 compile 'com.github.j4velin.EazeGraph:EazeGraph:1.0.2' 70 compile 'com.github.j4velin.EazeGraph:EazeGraph:1.0.2'
71 compile 'com.google.android.apps.dashclock:dashclock-api:2.0.0' 71 compile 'com.google.android.apps.dashclock:dashclock-api:2.0.0'
72 compile 'com.android.support:design:25.3.1' 72 compile 'com.android.support:design:25.3.1'
73 compile 'com.github.PhilJay:MPAndroidChart:v3.0.2' 73 compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
74 compile 'com.google.android.gms:play-services:11.0.4' 74 compile 'com.google.android.gms:play-services:11.0.4'
75 compile 'com.google.code.gson:gson:2.7' 75 compile 'com.google.code.gson:gson:2.7'
76 compile 'com.squareup.retrofit2:converter-gson:2.1.0' 76 compile 'com.squareup.retrofit2:converter-gson:2.1.0'
77 compile 'de.hdodenhof:circleimageview:2.1.0' 77 compile 'de.hdodenhof:circleimageview:2.1.0'
78 compile 'com.jakewharton:butterknife:8.6.0' 78 compile 'com.jakewharton:butterknife:8.6.0'
79 testCompile 'junit:junit:4.12' 79 testCompile 'junit:junit:4.12'
80 // Retrofit 80 // Retrofit
81
81 compile 'com.squareup.retrofit2:retrofit:2.1.0' 82 compile 'com.squareup.retrofit2:retrofit:2.1.0'
82 compile 'com.squareup.picasso:picasso:2.5.2' 83 compile 'com.squareup.picasso:picasso:2.5.2'
83 compile 'de.hdodenhof:circleimageview:2.1.0' 84 compile 'de.hdodenhof:circleimageview:2.1.0'
84 compile 'com.jakewharton:butterknife:8.6.0' 85 compile 'com.jakewharton:butterknife:8.6.0'
85 compile 'com.squareup.retrofit2:retrofit:2.1.0' 86 compile 'com.squareup.retrofit2:retrofit:2.1.0'
86 compile 'com.squareup.picasso:picasso:2.5.2' 87 compile 'com.squareup.picasso:picasso:2.5.2'
87 compile 'com.android.support:support-v4:25.3.1' 88 compile 'com.android.support:support-v4:25.3.1'
88 testCompile 'junit:junit:4.12' 89 testCompile 'junit:junit:4.12'
89 90
90 compile 'com.android.support:multidex:1.0.1' 91 compile 'com.android.support:multidex:1.0.1'
91 92
92 annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0' 93 annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
93 } 94 }
94 95
app/src/main/AndroidManifest.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.dinhcv.lifelogpedometer"> 3 package="com.dinhcv.lifelogpedometer">
4 4
5 <uses-feature 5 <uses-feature
6 android:name="android.hardware.sensor.stepcounter" 6 android:name="android.hardware.sensor.stepcounter"
7 android:required="true" /> 7 android:required="true" />
8 8
9 <uses-permission android:name="android.permission.INTERNET" /> 9 <uses-permission android:name="android.permission.INTERNET" />
10 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 10 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
11 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 11 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
12 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 12 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
13 <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 13 <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
14 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 14 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
15 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
15 16
16 <application 17 <application
17 android:name=".LifeLogApplication" 18 android:name=".LifeLogApplication"
18 android:allowBackup="true" 19 android:allowBackup="true"
19 android:icon="@mipmap/ic_launcher" 20 android:icon="@mipmap/ic_launcher"
20 android:label="@string/app_name" 21 android:label="@string/app_name"
21 android:roundIcon="@mipmap/ic_launcher_round" 22 android:roundIcon="@mipmap/ic_launcher_round"
22 android:supportsRtl="true" 23 android:supportsRtl="true"
23 android:largeHeap="true" 24 android:largeHeap="true"
24 android:theme="@style/AppTheme"> 25 android:theme="@style/AppTheme">
25 <meta-data 26 <meta-data
26 android:name="com.google.android.maps.v2.API_KEY" 27 android:name="com.google.android.maps.v2.API_KEY"
27 android:value="AIzaSyCDKYsvb0iDXSRm9YnQ8kh5Gzpbpzcpz4s" /> 28 android:value="AIzaSyCDKYsvb0iDXSRm9YnQ8kh5Gzpbpzcpz4s" />
28 29
29 <activity 30 <activity
30 android:name=".activity.WelcomeActivity" 31 android:name=".activity.WelcomeActivity"
31 android:screenOrientation="portrait" 32 android:screenOrientation="portrait"
32 android:theme="@style/AppNoActionBar"> 33 android:theme="@style/AppNoActionBar">
33 <intent-filter> 34 <intent-filter>
34 <action android:name="android.intent.action.MAIN" /> 35 <action android:name="android.intent.action.MAIN" />
35 36
36 <category android:name="android.intent.category.LAUNCHER" /> 37 <category android:name="android.intent.category.LAUNCHER" />
37 </intent-filter> 38 </intent-filter>
38 </activity> 39 </activity>
39 <activity 40 <activity
40 android:name=".activity.LoginActivity" 41 android:name=".activity.LoginActivity"
41 android:screenOrientation="portrait" 42 android:screenOrientation="portrait"
42 android:theme="@style/AppNoActionBar"/> 43 android:theme="@style/AppNoActionBar"/>
43 44
44 <activity 45 <activity
45 android:name=".activity.PedometerActivity" 46 android:name=".activity.PedometerActivity"
46 android:screenOrientation="portrait" 47 android:screenOrientation="portrait"
47 android:theme="@style/AppNoActionBar"/> 48 android:theme="@style/AppNoActionBar"/>
48 <activity 49 <activity
49 android:name=".activity.RegisterActivity" 50 android:name=".activity.RegisterActivity"
50 android:screenOrientation="portrait" 51 android:screenOrientation="portrait"
51 android:theme="@style/AppNoActionBar"/> 52 android:theme="@style/AppNoActionBar"/>
52 <activity 53 <activity
53 android:name=".activity.InputConfirmCodeActivity" 54 android:name=".activity.InputConfirmCodeActivity"
54 android:screenOrientation="portrait" 55 android:screenOrientation="portrait"
55 android:theme="@style/AppNoActionBar"/> 56 android:theme="@style/AppNoActionBar"/>
56 57
57 58
58 <!--<activity--> 59 <!--<activity-->
59 <!--android:name=".activity.HistoryFragment"--> 60 <!--android:name=".activity.HistoryFragment"-->
60 <!--android:screenOrientation="portrait"--> 61 <!--android:screenOrientation="portrait"-->
61 <!--android:theme="@style/AppNoActionBar"></activity>--> 62 <!--android:theme="@style/AppNoActionBar"></activity>-->
62 63
63 </application> 64 </application>
64 65
65 </manifest> 66 </manifest>
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.ImageView;
14 import android.widget.LinearLayout; 15 import android.widget.LinearLayout;
15 import android.widget.TextView; 16 import android.widget.TextView;
16 17
17 import com.dinhcv.lifelogpedometer.R; 18 import com.dinhcv.lifelogpedometer.R;
18 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 19 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
19 import com.dinhcv.lifelogpedometer.model.structure.history.HistoryInfo; 20 import com.dinhcv.lifelogpedometer.model.structure.history.HistoryInfo;
20 import com.dinhcv.lifelogpedometer.portal.ApiServices; 21 import com.dinhcv.lifelogpedometer.portal.ApiServices;
21 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 22 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
22 import com.dinhcv.lifelogpedometer.utils.Const; 23 import com.dinhcv.lifelogpedometer.utils.Const;
23 import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter; 24 import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter;
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 import com.github.mikephil.charting.charts.BarChart; 27 import com.github.mikephil.charting.charts.BarChart;
27 import com.github.mikephil.charting.components.XAxis; 28 import com.github.mikephil.charting.components.XAxis;
28 import com.github.mikephil.charting.components.YAxis; 29 import com.github.mikephil.charting.components.YAxis;
29 import com.github.mikephil.charting.data.BarData; 30 import com.github.mikephil.charting.data.BarData;
30 import com.github.mikephil.charting.data.BarDataSet; 31 import com.github.mikephil.charting.data.BarDataSet;
31 import com.github.mikephil.charting.data.BarEntry; 32 import com.github.mikephil.charting.data.BarEntry;
32 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; 33 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
33 34
34 import org.json.JSONException; 35 import org.json.JSONException;
35 import org.json.JSONObject; 36 import org.json.JSONObject;
36 37
37 import java.util.ArrayList; 38 import java.util.ArrayList;
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 46
46 import static com.github.mikephil.charting.utils.ColorTemplate.rgb; 47 import static com.github.mikephil.charting.utils.ColorTemplate.rgb;
47 48
48 public class HistoryContentFragment extends FragmentBase { 49 public class HistoryContentFragment extends FragmentBase {
49 50
50 @BindView(R.id.btn_left_date) 51 @BindView(R.id.btn_left_date)
51 ImageButton btnLeftDate; 52 ImageButton btnLeftDate;
52 @BindView(R.id.btn_right_date) 53 @BindView(R.id.btn_right_date)
53 ImageButton btnRightDate; 54 ImageButton btnRightDate;
54 @BindView(R.id.tv_date) 55 @BindView(R.id.tv_date)
55 TextView tvDate; 56 TextView tvDate;
56 @BindView(R.id.tv_week_day) 57 @BindView(R.id.tv_week_day)
57 TextView tvWeekDay; 58 TextView tvWeekDay;
58 private Button btnFace; 59 private ImageView btnFace;
59 private Button btnTwitter; 60 private ImageView btnTwitter;
60 private Button btnLine; 61 private ImageView btnLine;
61 private Button btnEmail; 62 private ImageView btnEmail;
62 private Button btnOther; 63 private ImageView btnOther;
63 @BindView(R.id.tv_steps) 64 @BindView(R.id.tv_steps)
64 TextView tvStep; 65 TextView tvStep;
65 @BindView(R.id.tv_remainingStep) 66 @BindView(R.id.tv_remainingStep)
66 TextView tvRemain; 67 TextView tvRemain;
67 @BindView(R.id.tv_stepRateDone) 68 @BindView(R.id.tv_stepRateDone)
68 TextView tvRateDone; 69 TextView tvRateDone;
69 @BindView(R.id.tv_smallRemain) 70 @BindView(R.id.tv_smallRemain)
70 TextView tvSmallRemain; 71 TextView tvSmallRemain;
71 @BindView(R.id.tv_stepGoal) 72 @BindView(R.id.tv_stepGoal)
72 TextView tvGoal; 73 TextView tvGoal;
73 74
74 @BindView(R.id.tv_caloConsumned) 75 @BindView(R.id.tv_caloConsumned)
75 TextView tvCaloConsumned; 76 TextView tvCaloConsumned;
76 @BindView(R.id.tv_distance) 77 @BindView(R.id.tv_distance)
77 TextView tvDistance; 78 TextView tvDistance;
78 @BindView(R.id.tv_time) 79 @BindView(R.id.tv_time)
79 TextView tvTime; 80 TextView tvTime;
80 81
81 @BindView(R.id.ll_bike) 82 @BindView(R.id.ll_bike)
82 LinearLayout llBike; 83 LinearLayout llBike;
83 @BindView(R.id.ll_walking) 84 @BindView(R.id.ll_walking)
84 LinearLayout llWalking; 85 LinearLayout llWalking;
85 @BindView(R.id.ll_running) 86 @BindView(R.id.ll_running)
86 LinearLayout llRunning; 87 LinearLayout llRunning;
87 @BindView(R.id.btn_oneDay) 88 @BindView(R.id.btn_oneDay)
88 Button btnOneDay; 89 Button btnOneDay;
89 @BindView(R.id.btn_oneWeek) 90 @BindView(R.id.btn_oneWeek)
90 Button btnOneWeek; 91 Button btnOneWeek;
91 @BindView(R.id.btn_oneMonth) 92 @BindView(R.id.btn_oneMonth)
92 Button btnOneMonth; 93 Button btnOneMonth;
93 @BindView(R.id.btn_threeMonth) 94 @BindView(R.id.btn_threeMonth)
94 Button btnThreeMonth; 95 Button btnThreeMonth;
95 @BindView(R.id.btn_sixMonth) 96 @BindView(R.id.btn_sixMonth)
96 Button btnSixMonth; 97 Button btnSixMonth;
97 98
98 // bar chart 99 // bar chart
99 private BarChart mBarChart; 100 private BarChart mBarChart;
100 private List<String> dateList; 101 private List<String> dateList;
101 private String[] mParties; 102 private String[] mParties;
102 private Integer[] mStep; 103 private Integer[] mStep;
103 104
104 private Date mAnaDate; 105 private Date mAnaDate;
105 private Calendar mCalendar; 106 private Calendar mCalendar;
106 107
107 private int mAnaDay; 108 private int mAnaDay;
108 private int mAnaMonth; 109 private int mAnaMonth;
109 private int mAnaYear; 110 private int mAnaYear;
110 111
111 private HistoryInfo mDataModWalking = new HistoryInfo(); 112 private HistoryInfo mDataModWalking = new HistoryInfo();
112 private HistoryInfo mDataModRunning = new HistoryInfo(); 113 private HistoryInfo mDataModRunning = new HistoryInfo();
113 private HistoryInfo mDataModBike = new HistoryInfo(); 114 private HistoryInfo mDataModBike = new HistoryInfo();
114 private HistoryInfo mDataCurrent = new HistoryInfo(); 115 private HistoryInfo mDataCurrent = new HistoryInfo();
115 116
116 private Const.DATA_TYPE dataType; 117 private Const.DATA_TYPE dataType;
117 private Const.STEP_TYPE stepType; 118 private Const.STEP_TYPE stepType;
118 119
119 private Context mContext; 120 private Context mContext;
120 private View mRootView; 121 private View mRootView;
121 122
122 private HistoryFragment mHistoryFragment; 123 private HistoryFragment mHistoryFragment;
123 124
124 public void setRootFragment(HistoryFragment frag) { 125 public void setRootFragment(HistoryFragment frag) {
125 this.mHistoryFragment = frag; 126 this.mHistoryFragment = frag;
126 } 127 }
127 128
128 @Override 129 @Override
129 public View onCreateView(final LayoutInflater inflater, final ViewGroup container, 130 public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
130 final Bundle savedInstanceState) { 131 final Bundle savedInstanceState) {
131 mRootView = inflater.inflate(R.layout.fragment_history_content, null); 132 mRootView = inflater.inflate(R.layout.fragment_history_content, null);
132 ButterKnife.bind(this, mRootView); 133 ButterKnife.bind(this, mRootView);
133 mContext = getActivity(); 134 mContext = getActivity();
134 initView(mRootView); 135 initView(mRootView);
135 initData(); 136 initData();
136 137
137 return mRootView; 138 return mRootView;
138 } 139 }
139 140
140 141
141 private void initView(View view) { 142 private void initView(View view) {
142 btnFace = (Button) view.findViewById(R.id.btn_face); 143 btnFace = (ImageView) view.findViewById(R.id.btn_face);
143 btnTwitter = (Button) view.findViewById(R.id.btn_twitter); 144 btnTwitter = (ImageView) view.findViewById(R.id.btn_twitter);
144 btnLine = (Button) view.findViewById(R.id.btn_line); 145 btnLine = (ImageView) view.findViewById(R.id.btn_line);
145 btnEmail = (Button) view.findViewById(R.id.btn_email); 146 btnEmail = (ImageView) view.findViewById(R.id.btn_email);
146 btnOther = (Button) view.findViewById(R.id.btn_other); 147 btnOther = (ImageView) view.findViewById(R.id.btn_other);
147 148
148 mBarChart = (BarChart) view.findViewById(R.id.chart); 149 mBarChart = (BarChart) view.findViewById(R.id.chart);
149 } 150 }
150 151
151 152
152 /** 153 /**
153 * Show date picker dialog 154 * Show date picker dialog
154 */ 155 */
155 private void handleAnaDatePicker() { 156 private void handleAnaDatePicker() {
156 157
157 new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() { 158 new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {
158 @Override 159 @Override
159 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 160 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
160 161
161 mCalendar = Calendar.getInstance(); 162 mCalendar = Calendar.getInstance();
162 mCalendar.set(year, monthOfYear, dayOfMonth); 163 mCalendar.set(year, monthOfYear, dayOfMonth);
163 mAnaYear = year; 164 mAnaYear = year;
164 mAnaMonth = monthOfYear; 165 mAnaMonth = monthOfYear;
165 mAnaDay = dayOfMonth; 166 mAnaDay = dayOfMonth;
166 Date date = mCalendar.getTime(); 167 Date date = mCalendar.getTime();
167 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 168 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
168 tvWeekDay.setText(Utils.getWeekdayFromDate(date)); 169 tvWeekDay.setText(Utils.getWeekdayFromDate(date));
169 mAnaDate = date; 170 mAnaDate = date;
170 getHistoryData(dataType, mAnaDate); 171 getHistoryData(dataType, mAnaDate);
171 } 172 }
172 }, mAnaYear, mAnaMonth, mAnaDay).show(); 173 }, mAnaYear, mAnaMonth, mAnaDay).show();
173 174
174 } 175 }
175 176
176 177
177 /** 178 /**
178 * init data for 179 * init data for
179 */ 180 */
180 private void initData() { 181 private void initData() {
181 mCalendar = Calendar.getInstance(); 182 mCalendar = Calendar.getInstance();
182 mCalendar.setTime(new Date()); 183 mCalendar.setTime(new Date());
183 mAnaDate = mCalendar.getTime(); 184 mAnaDate = mCalendar.getTime();
184 mAnaYear = mCalendar.get(Calendar.YEAR); 185 mAnaYear = mCalendar.get(Calendar.YEAR);
185 mAnaMonth = mCalendar.get(Calendar.MONTH); 186 mAnaMonth = mCalendar.get(Calendar.MONTH);
186 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); 187 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH);
187 188
188 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); 189 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate));
189 tvWeekDay.setText(Utils.getWeekdayFromDate(mAnaDate)); 190 tvWeekDay.setText(Utils.getWeekdayFromDate(mAnaDate));
190 191
191 dataType = Const.DATA_TYPE.ONE_DAY; 192 dataType = Const.DATA_TYPE.ONE_DAY;
192 stepType = Const.STEP_TYPE.WALKING; 193 stepType = Const.STEP_TYPE.WALKING;
193 updateUiType(); 194 updateUiType();
194 updateUiStepType(false, true, false); 195 updateUiStepType(false, true, false);
195 196
196 getHistoryData(dataType, mAnaDate); 197 getHistoryData(dataType, mAnaDate);
197 } 198 }
198 199
199 private void updateUiType() { 200 private void updateUiType() {
200 if (dataType == Const.DATA_TYPE.ONE_DAY) { 201 if (dataType == Const.DATA_TYPE.ONE_DAY) {
201 setButtonSelected(true, false, false, false, false); 202 setButtonSelected(true, false, false, false, false);
202 } else if (dataType == Const.DATA_TYPE.ONE_WEEK) { 203 } else if (dataType == Const.DATA_TYPE.ONE_WEEK) {
203 setButtonSelected(false, true, false, false, false); 204 setButtonSelected(false, true, false, false, false);
204 } else if (dataType == Const.DATA_TYPE.ONE_MONTH) { 205 } else if (dataType == Const.DATA_TYPE.ONE_MONTH) {
205 setButtonSelected(false, false, true, false, false); 206 setButtonSelected(false, false, true, false, false);
206 } else if (dataType == Const.DATA_TYPE.THREE_MONTH){ 207 } else if (dataType == Const.DATA_TYPE.THREE_MONTH){
207 setButtonSelected(false, false, false, true, false); 208 setButtonSelected(false, false, false, true, false);
208 } else if (dataType == Const.DATA_TYPE.SIX_MONTH){ 209 } else if (dataType == Const.DATA_TYPE.SIX_MONTH){
209 setButtonSelected(false, false, false, false, true); 210 setButtonSelected(false, false, false, false, true);
210 } 211 }
211 } 212 }
212 213
213 private void setButtonSelected(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5 ) { 214 private void setButtonSelected(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5 ) {
214 btnOneDay.setSelected(b1); 215 btnOneDay.setSelected(b1);
215 btnOneWeek.setSelected(b2); 216 btnOneWeek.setSelected(b2);
216 btnOneMonth.setSelected(b3); 217 btnOneMonth.setSelected(b3);
217 btnThreeMonth.setSelected(b4); 218 btnThreeMonth.setSelected(b4);
218 btnSixMonth.setSelected(b5); 219 btnSixMonth.setSelected(b5);
219 } 220 }
220 221
221 private void updateUiStepType(boolean b1, boolean b2, boolean b3) { 222 private void updateUiStepType(boolean b1, boolean b2, boolean b3) {
222 llBike.setSelected(b1); 223 llBike.setSelected(b1);
223 llWalking.setSelected(b2); 224 llWalking.setSelected(b2);
224 llRunning.setSelected(b3); 225 llRunning.setSelected(b3);
225 } 226 }
226 227
227 private void getHistoryData(Const.DATA_TYPE dataType, Date toDate){ 228 private void getHistoryData(Const.DATA_TYPE dataType, Date toDate){
228 229
229 Date fromDate = Utils.getFromDate(mAnaDate, dataType); 230 Date fromDate = Utils.getFromDate(mAnaDate, dataType);
230 231
231 showDialog(mContext); 232 showDialog(mContext);
232 ApiServices.history(fromDate, toDate, new LLAPIManagerListener() { 233 ApiServices.history(fromDate, toDate, new LLAPIManagerListener() {
233 @Override 234 @Override
234 public void onError(Error error) { 235 public void onError(Error error) {
235 Debug.error("Get data history error"); 236 Debug.error("Get data history error");
236 hiddenDialog(); 237 hiddenDialog();
237 showDialogNotData(); 238 showDialogNotData();
238 } 239 }
239 240
240 @Override 241 @Override
241 public void onSuccess(String json) { 242 public void onSuccess(String json) {
242 Debug.error("Get data history success"); 243 Debug.error("Get data history success");
243 hiddenDialog(); 244 hiddenDialog();
244 loadDataDone(json); 245 loadDataDone(json);
245 } 246 }
246 247
247 @Override 248 @Override
248 public void onSuccess(JSONObject object) { 249 public void onSuccess(JSONObject object) {
249 Debug.error("Get data history success"); 250 Debug.error("Get data history success");
250 hiddenDialog(); 251 hiddenDialog();
251 } 252 }
252 }); 253 });
253 } 254 }
254 255
255 private void showDialogNotData(){ 256 private void showDialogNotData(){
256 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); 257 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data));
257 } 258 }
258 259
259 private void loadDataDone(String jsonString) { 260 private void loadDataDone(String jsonString) {
260 JSONObject jsonObject = null; 261 JSONObject jsonObject = null;
261 try { 262 try {
262 jsonObject = new JSONObject(jsonString); 263 jsonObject = new JSONObject(jsonString);
263 int status = jsonObject.optInt("status"); 264 int status = jsonObject.optInt("status");
264 if (status == 1) { 265 if (status == 1) {
265 JSONObject jsonObject1 = jsonObject.optJSONObject("result"); 266 JSONObject jsonObject1 = jsonObject.optJSONObject("result");
266 JSONObject jsonMod1 = jsonObject1.getJSONObject("mode_1"); 267 JSONObject jsonMod1 = jsonObject1.getJSONObject("mode_1");
267 JSONObject jsonMod2 = jsonObject1.getJSONObject("mode_2"); 268 JSONObject jsonMod2 = jsonObject1.getJSONObject("mode_2");
268 JSONObject jsonMod3 = jsonObject1.getJSONObject("mode_3"); 269 JSONObject jsonMod3 = jsonObject1.getJSONObject("mode_3");
269 addDataModWalking(jsonMod1); 270 addDataModWalking(jsonMod1);
270 addDataModRunning(jsonMod2); 271 addDataModRunning(jsonMod2);
271 addDataModBike(jsonMod3); 272 addDataModBike(jsonMod3);
272 273
273 } 274 }
274 } catch (JSONException e) { 275 } catch (JSONException e) {
275 e.printStackTrace(); 276 e.printStackTrace();
276 mDataModWalking = new HistoryInfo(); 277 mDataModWalking = new HistoryInfo();
277 mDataModRunning = new HistoryInfo();; 278 mDataModRunning = new HistoryInfo();;
278 mDataModBike = new HistoryInfo();; 279 mDataModBike = new HistoryInfo();;
279 } 280 }
280 281
281 if (stepType == Const.STEP_TYPE.WALKING){ 282 if (stepType == Const.STEP_TYPE.WALKING){
282 mDataCurrent = mDataModWalking; 283 mDataCurrent = mDataModWalking;
283 }else if (stepType == Const.STEP_TYPE.RUNNING){ 284 }else if (stepType == Const.STEP_TYPE.RUNNING){
284 mDataCurrent = mDataModRunning; 285 mDataCurrent = mDataModRunning;
285 }else { 286 }else {
286 mDataCurrent = mDataModBike; 287 mDataCurrent = mDataModBike;
287 } 288 }
288 289
289 updateUI(); 290 updateUI();
290 } 291 }
291 292
292 private void updateUI(){ 293 private void updateUI(){
293 // get data server 294 // get data server
294 tvGoal.setText(getResources().getString(R.string.step_unit, mDataCurrent.getTaget())); 295 tvGoal.setText(getResources().getString(R.string.step_unit, mDataCurrent.getTaget()));
295 tvStep.setText(getResources().getString(R.string.step_unit, mDataCurrent.getSteps())); 296 tvStep.setText(getResources().getString(R.string.step_unit, mDataCurrent.getSteps()));
296 tvSmallRemain.setText(getResources().getString(R.string.step_unit_1, mDataCurrent.getStepRemain())); 297 tvSmallRemain.setText(getResources().getString(R.string.step_unit_1, mDataCurrent.getStepRemain()));
297 tvRemain.setText(getResources().getString(R.string.step_unit, mDataCurrent.getStepRemain())); 298 tvRemain.setText(getResources().getString(R.string.step_unit, mDataCurrent.getStepRemain()));
298 tvRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(mDataCurrent.getCompletePercent()))); 299 tvRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(mDataCurrent.getCompletePercent())));
299 tvCaloConsumned.setText(getResources().getString(R.string.kcal_unit, Utils.convert2String2Decimal(mDataCurrent.getKcal()))); 300 tvCaloConsumned.setText(getResources().getString(R.string.kcal_unit, Utils.convert2String2Decimal(mDataCurrent.getKcal())));
300 tvDistance.setText(getResources().getString(R.string.distance_unit, Utils.convert2String2Decimal(mDataCurrent.getDistance()))); 301 tvDistance.setText(getResources().getString(R.string.distance_unit, Utils.convert2String2Decimal(mDataCurrent.getDistance())));
301 tvTime.setText(getResources().getString(R.string.time_unit, Utils.convertTimeStringFromString(mDataCurrent.getTime()))); 302 tvTime.setText(getResources().getString(R.string.time_unit, Utils.convertTimeStringFromString(mDataCurrent.getTime())));
302 303
303 // update bar 304 // update bar
304 if (mDataCurrent.getDataChart() != null && mDataCurrent.getDataChart().size() == 24) { 305 if (mDataCurrent.getDataChart() != null && mDataCurrent.getDataChart().size() == 24) {
305 updateBars(); 306 updateBars();
306 } 307 }
307 308
308 } 309 }
309 310
310 private void updateBars() { 311 private void updateBars() {
311 dateList = new ArrayList<>(); 312 dateList = new ArrayList<>();
312 List<Integer> stepList = new ArrayList<>(); 313 List<Integer> stepList = new ArrayList<>();
313 314
314 stepList = mDataCurrent.getDataChart(); 315 stepList = mDataCurrent.getDataChart();
315 for (int i = 0; i < 24; i++){ 316 for (int i = 0; i < 24; i++){
316 dateList.add(String.valueOf(i)); 317 dateList.add(String.valueOf(i));
317 } 318 }
318 319
319 mStep = stepList.toArray(new Integer[0]); 320 mStep = stepList.toArray(new Integer[0]);
320 mParties = dateList.toArray(new String[0]); 321 mParties = dateList.toArray(new String[0]);
321 322
322 initGraph(); 323 initGraph();
323 } 324 }
324 325
325 private void initGraph(){ 326 private void initGraph(){
326 327
327 mBarChart.setDrawBarShadow(false); 328 mBarChart.setDrawBarShadow(false);
328 mBarChart.setDrawValueAboveBar(true); 329 mBarChart.setDrawValueAboveBar(true);
329 330
330 // if more than 60 entries are displayed in the chart, no values will be 331 // if more than 60 entries are displayed in the chart, no values will be
331 // drawn 332 // drawn
332 mBarChart.setMaxVisibleValueCount(60); 333 mBarChart.setMaxVisibleValueCount(60);
333 334
334 mBarChart.getDescription().setEnabled(false); 335 mBarChart.getDescription().setEnabled(false);
335 // scaling can now only be done on x- and y-axis separately 336 // scaling can now only be done on x- and y-axis separately
336 mBarChart.setPinchZoom(false); 337 mBarChart.setPinchZoom(false);
337 338
338 mBarChart.setDrawGridBackground(false); 339 mBarChart.setDrawGridBackground(false);
339 // mChart.setDrawYLabels(false); 340 // mChart.setDrawYLabels(false);
340 341
341 DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(dateList); 342 DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(dateList);
342 343
343 XAxis xAxis = mBarChart.getXAxis(); 344 XAxis xAxis = mBarChart.getXAxis();
344 xAxis.setLabelRotationAngle(0); 345 xAxis.setLabelRotationAngle(0);
345 xAxis.setPosition(XAxis.XAxisPosition.TOP); 346 xAxis.setPosition(XAxis.XAxisPosition.TOP);
346 xAxis.setDrawGridLines(true); 347 xAxis.setDrawGridLines(true);
347 xAxis.setLabelCount(10); 348 xAxis.setLabelCount(10);
348 xAxis.setTextColor(Color.WHITE); 349 xAxis.setTextColor(Color.WHITE);
349 xAxis.setValueFormatter(xValueFormatter); 350 xAxis.setValueFormatter(xValueFormatter);
350 351
351 352
352 YAxis leftAxis = mBarChart.getAxisLeft(); 353 YAxis leftAxis = mBarChart.getAxisLeft();
353 leftAxis.setDrawLabels(false); 354 leftAxis.setDrawLabels(false);
354 leftAxis.setDrawGridLines(false); 355 leftAxis.setDrawGridLines(false);
355 leftAxis.setAxisMinimum(0f); 356 leftAxis.setAxisMinimum(0f);
356 leftAxis.setAxisMaximum(10000f); 357 leftAxis.setAxisMaximum(10000f);
357 leftAxis.setDrawZeroLine(false); 358 leftAxis.setDrawZeroLine(false);
358 359
359 leftAxis.setEnabled(false); 360 leftAxis.setEnabled(false);
360 mBarChart.setDrawValueAboveBar(false); 361 mBarChart.setDrawValueAboveBar(false);
361 mBarChart.getAxisRight().setEnabled(false); 362 mBarChart.getAxisRight().setEnabled(false);
362 363
363 // set auto scale min max 364 // set auto scale min max
364 mBarChart.setAutoScaleMinMaxEnabled(true); 365 mBarChart.setAutoScaleMinMaxEnabled(true);
365 mBarChart.notifyDataSetChanged(); 366 mBarChart.notifyDataSetChanged();
366 367
367 // Set enimate y 368 // Set enimate y
368 mBarChart.animateY(2000); 369 mBarChart.animateY(2000);
369 370
370 setData(); 371 setData();
371 372
372 mBarChart.getLegend().setEnabled(false); 373 mBarChart.getLegend().setEnabled(false);
373 } 374 }
374 375
375 376
376 private void setData() { 377 private void setData() {
377 378
378 ArrayList<String> xVals = new ArrayList<>(); 379 ArrayList<String> xVals = new ArrayList<>();
379 for (int i = 0; i < mStep.length; i++) { 380 for (int i = 0; i < mStep.length; i++) {
380 xVals.add(mParties[i % mStep.length]); 381 xVals.add(mParties[i % mStep.length]);
381 } 382 }
382 383
383 ArrayList<BarEntry> yVals1 = new ArrayList<>(); 384 ArrayList<BarEntry> yVals1 = new ArrayList<>();
384 for (int i = 0; i < mStep.length; i++) { 385 for (int i = 0; i < mStep.length; i++) {
385 float val = (float) (mStep[i]*1); 386 float val = (float) (mStep[i]*1);
386 yVals1.add(new BarEntry(i, val)); 387 yVals1.add(new BarEntry(i, val));
387 } 388 }
388 389
389 BarDataSet set1; 390 BarDataSet set1;
390 391
391 if (mBarChart.getData() != null && mBarChart.getData().getDataSetCount() > 0) { 392 if (mBarChart.getData() != null && mBarChart.getData().getDataSetCount() > 0) {
392 set1 = (BarDataSet)mBarChart.getData().getDataSetByIndex(0); 393 set1 = (BarDataSet)mBarChart.getData().getDataSetByIndex(0);
393 set1.setValues(yVals1); 394 set1.setValues(yVals1);
394 mBarChart.getData().notifyDataChanged(); 395 mBarChart.getData().notifyDataChanged();
395 mBarChart.notifyDataSetChanged(); 396 mBarChart.notifyDataSetChanged();
396 } else { 397 } else {
397 ArrayList<Integer> colors = new ArrayList<>(); 398 ArrayList<Integer> colors = new ArrayList<>();
398 399
399 400
400 int[] MATERIAL_COLORS = {rgb("#40CDEF")}; 401 int[] MATERIAL_COLORS = {rgb("#40CDEF")};
401 402
402 for (int c : MATERIAL_COLORS) 403 for (int c : MATERIAL_COLORS)
403 colors.add(c); 404 colors.add(c);
404 405
405 set1 = new BarDataSet(yVals1, null); 406 set1 = new BarDataSet(yVals1, null);
406 407
407 set1.setColors(colors); 408 set1.setColors(colors);
408 409
409 ArrayList<IBarDataSet> dataSets = new ArrayList<>(); 410 ArrayList<IBarDataSet> dataSets = new ArrayList<>();
410 dataSets.add(set1); 411 dataSets.add(set1);
411 412
412 BarData data = new BarData(dataSets); 413 BarData data = new BarData(dataSets);
413 data.setValueTextSize(10f); 414 data.setValueTextSize(10f);
414 415
415 mBarChart.setData(data); 416 mBarChart.setData(data);
416 } 417 }
417 } 418 }
418 419
419 private void addDataModWalking(JSONObject jsonObject){ 420 private void addDataModWalking(JSONObject jsonObject){
420 if (jsonObject == null) return; 421 if (jsonObject == null) return;
421 mDataModWalking.setTaget(jsonObject.optInt("target")); 422 mDataModWalking.setTaget(jsonObject.optInt("target"));
422 mDataModWalking.setSteps(jsonObject.optInt("steps")); 423 mDataModWalking.setSteps(jsonObject.optInt("steps"));
423 mDataModWalking.setStepRemain(jsonObject.optInt("step_remain")); 424 mDataModWalking.setStepRemain(jsonObject.optInt("step_remain"));
424 mDataModWalking.setCompletePercent(jsonObject.optDouble("complete_percent")); 425 mDataModWalking.setCompletePercent(jsonObject.optDouble("complete_percent"));
425 mDataModWalking.setTime(jsonObject.optInt("time")); 426 mDataModWalking.setTime(jsonObject.optInt("time"));
426 mDataModWalking.setDistance(jsonObject.optInt("distance")); 427 mDataModWalking.setDistance(jsonObject.optInt("distance"));
427 mDataModWalking.setKcal(jsonObject.optInt("kcal")); 428 mDataModWalking.setKcal(jsonObject.optInt("kcal"));
428 429
429 JSONObject dataChart = jsonObject.optJSONObject("data_chart"); 430 JSONObject dataChart = jsonObject.optJSONObject("data_chart");
430 ArrayList<Integer> dataChartList = new ArrayList<>(); 431 ArrayList<Integer> dataChartList = new ArrayList<>();
431 dataChartList.add(dataChart.optInt("0")); 432 dataChartList.add(dataChart.optInt("0"));
432 dataChartList.add(dataChart.optInt("1")); 433 dataChartList.add(dataChart.optInt("1"));
433 dataChartList.add(dataChart.optInt("2")); 434 dataChartList.add(dataChart.optInt("2"));
434 dataChartList.add(dataChart.optInt("3")); 435 dataChartList.add(dataChart.optInt("3"));
435 dataChartList.add(dataChart.optInt("4")); 436 dataChartList.add(dataChart.optInt("4"));
436 dataChartList.add(dataChart.optInt("5")); 437 dataChartList.add(dataChart.optInt("5"));
437 dataChartList.add(dataChart.optInt("6")); 438 dataChartList.add(dataChart.optInt("6"));
438 dataChartList.add(dataChart.optInt("7")); 439 dataChartList.add(dataChart.optInt("7"));
439 dataChartList.add(dataChart.optInt("8")); 440 dataChartList.add(dataChart.optInt("8"));
440 dataChartList.add(dataChart.optInt("9")); 441 dataChartList.add(dataChart.optInt("9"));
441 dataChartList.add(dataChart.optInt("10")); 442 dataChartList.add(dataChart.optInt("10"));
442 dataChartList.add(dataChart.optInt("11")); 443 dataChartList.add(dataChart.optInt("11"));
443 dataChartList.add(dataChart.optInt("12")); 444 dataChartList.add(dataChart.optInt("12"));
444 dataChartList.add(dataChart.optInt("13")); 445 dataChartList.add(dataChart.optInt("13"));
445 dataChartList.add(dataChart.optInt("14")); 446 dataChartList.add(dataChart.optInt("14"));
446 dataChartList.add(dataChart.optInt("15")); 447 dataChartList.add(dataChart.optInt("15"));
447 dataChartList.add(dataChart.optInt("16")); 448 dataChartList.add(dataChart.optInt("16"));
448 dataChartList.add(dataChart.optInt("17")); 449 dataChartList.add(dataChart.optInt("17"));
449 dataChartList.add(dataChart.optInt("18")); 450 dataChartList.add(dataChart.optInt("18"));
450 dataChartList.add(dataChart.optInt("19")); 451 dataChartList.add(dataChart.optInt("19"));
451 dataChartList.add(dataChart.optInt("20")); 452 dataChartList.add(dataChart.optInt("20"));
452 dataChartList.add(dataChart.optInt("21")); 453 dataChartList.add(dataChart.optInt("21"));
453 dataChartList.add(dataChart.optInt("22")); 454 dataChartList.add(dataChart.optInt("22"));
454 dataChartList.add(dataChart.optInt("23")); 455 dataChartList.add(dataChart.optInt("23"));
455 456
456 mDataModWalking.setDataChart(dataChartList); 457 mDataModWalking.setDataChart(dataChartList);
457 } 458 }
458 459
459 private void addDataModRunning(JSONObject jsonObject){ 460 private void addDataModRunning(JSONObject jsonObject){
460 if (jsonObject == null) return; 461 if (jsonObject == null) return;
461 mDataModRunning.setTaget(jsonObject.optInt("target")); 462 mDataModRunning.setTaget(jsonObject.optInt("target"));
462 mDataModRunning.setSteps(jsonObject.optInt("steps")); 463 mDataModRunning.setSteps(jsonObject.optInt("steps"));
463 mDataModRunning.setStepRemain(jsonObject.optInt("step_remain")); 464 mDataModRunning.setStepRemain(jsonObject.optInt("step_remain"));
464 mDataModRunning.setCompletePercent(jsonObject.optDouble("complete_percent")); 465 mDataModRunning.setCompletePercent(jsonObject.optDouble("complete_percent"));
465 mDataModRunning.setTime(jsonObject.optInt("time")); 466 mDataModRunning.setTime(jsonObject.optInt("time"));
466 mDataModRunning.setDistance(jsonObject.optInt("distance")); 467 mDataModRunning.setDistance(jsonObject.optInt("distance"));
467 mDataModRunning.setKcal(jsonObject.optInt("kcal")); 468 mDataModRunning.setKcal(jsonObject.optInt("kcal"));
468 469
469 JSONObject dataChart = jsonObject.optJSONObject("data_chart"); 470 JSONObject dataChart = jsonObject.optJSONObject("data_chart");
470 ArrayList<Integer> dataChartList = new ArrayList<>(); 471 ArrayList<Integer> dataChartList = new ArrayList<>();
471 dataChartList.add(dataChart.optInt("0")); 472 dataChartList.add(dataChart.optInt("0"));
472 dataChartList.add(dataChart.optInt("1")); 473 dataChartList.add(dataChart.optInt("1"));
473 dataChartList.add(dataChart.optInt("2")); 474 dataChartList.add(dataChart.optInt("2"));
474 dataChartList.add(dataChart.optInt("3")); 475 dataChartList.add(dataChart.optInt("3"));
475 dataChartList.add(dataChart.optInt("4")); 476 dataChartList.add(dataChart.optInt("4"));
476 dataChartList.add(dataChart.optInt("5")); 477 dataChartList.add(dataChart.optInt("5"));
477 dataChartList.add(dataChart.optInt("6")); 478 dataChartList.add(dataChart.optInt("6"));
478 dataChartList.add(dataChart.optInt("7")); 479 dataChartList.add(dataChart.optInt("7"));
479 dataChartList.add(dataChart.optInt("8")); 480 dataChartList.add(dataChart.optInt("8"));
480 dataChartList.add(dataChart.optInt("9")); 481 dataChartList.add(dataChart.optInt("9"));
481 dataChartList.add(dataChart.optInt("10")); 482 dataChartList.add(dataChart.optInt("10"));
482 dataChartList.add(dataChart.optInt("11")); 483 dataChartList.add(dataChart.optInt("11"));
483 dataChartList.add(dataChart.optInt("12")); 484 dataChartList.add(dataChart.optInt("12"));
484 dataChartList.add(dataChart.optInt("13")); 485 dataChartList.add(dataChart.optInt("13"));
485 dataChartList.add(dataChart.optInt("14")); 486 dataChartList.add(dataChart.optInt("14"));
486 dataChartList.add(dataChart.optInt("15")); 487 dataChartList.add(dataChart.optInt("15"));
487 dataChartList.add(dataChart.optInt("16")); 488 dataChartList.add(dataChart.optInt("16"));
488 dataChartList.add(dataChart.optInt("17")); 489 dataChartList.add(dataChart.optInt("17"));
489 dataChartList.add(dataChart.optInt("18")); 490 dataChartList.add(dataChart.optInt("18"));
490 dataChartList.add(dataChart.optInt("19")); 491 dataChartList.add(dataChart.optInt("19"));
491 dataChartList.add(dataChart.optInt("20")); 492 dataChartList.add(dataChart.optInt("20"));
492 dataChartList.add(dataChart.optInt("21")); 493 dataChartList.add(dataChart.optInt("21"));
493 dataChartList.add(dataChart.optInt("22")); 494 dataChartList.add(dataChart.optInt("22"));
494 dataChartList.add(dataChart.optInt("23")); 495 dataChartList.add(dataChart.optInt("23"));
495 496
496 mDataModRunning.setDataChart(dataChartList); 497 mDataModRunning.setDataChart(dataChartList);
497 } 498 }
498 499
499 private void addDataModBike(JSONObject jsonObject){ 500 private void addDataModBike(JSONObject jsonObject){
500 if (jsonObject == null) return; 501 if (jsonObject == null) return;
501 mDataModBike.setTaget(jsonObject.optInt("target")); 502 mDataModBike.setTaget(jsonObject.optInt("target"));
502 mDataModBike.setSteps(jsonObject.optInt("steps")); 503 mDataModBike.setSteps(jsonObject.optInt("steps"));
503 mDataModBike.setStepRemain(jsonObject.optInt("step_remain")); 504 mDataModBike.setStepRemain(jsonObject.optInt("step_remain"));
504 mDataModBike.setCompletePercent(jsonObject.optDouble("complete_percent")); 505 mDataModBike.setCompletePercent(jsonObject.optDouble("complete_percent"));
505 mDataModBike.setTime(jsonObject.optInt("time")); 506 mDataModBike.setTime(jsonObject.optInt("time"));
506 mDataModBike.setDistance(jsonObject.optInt("distance")); 507 mDataModBike.setDistance(jsonObject.optInt("distance"));
507 mDataModBike.setKcal(jsonObject.optInt("kcal")); 508 mDataModBike.setKcal(jsonObject.optInt("kcal"));
508 509
509 JSONObject dataChart = jsonObject.optJSONObject("data_chart"); 510 JSONObject dataChart = jsonObject.optJSONObject("data_chart");
510 ArrayList<Integer> dataChartList = new ArrayList<>(); 511 ArrayList<Integer> dataChartList = new ArrayList<>();
511 dataChartList.add(dataChart.optInt("0")); 512 dataChartList.add(dataChart.optInt("0"));
512 dataChartList.add(dataChart.optInt("1")); 513 dataChartList.add(dataChart.optInt("1"));
513 dataChartList.add(dataChart.optInt("2")); 514 dataChartList.add(dataChart.optInt("2"));
514 dataChartList.add(dataChart.optInt("3")); 515 dataChartList.add(dataChart.optInt("3"));
515 dataChartList.add(dataChart.optInt("4")); 516 dataChartList.add(dataChart.optInt("4"));
516 dataChartList.add(dataChart.optInt("5")); 517 dataChartList.add(dataChart.optInt("5"));
517 dataChartList.add(dataChart.optInt("6")); 518 dataChartList.add(dataChart.optInt("6"));
518 dataChartList.add(dataChart.optInt("7")); 519 dataChartList.add(dataChart.optInt("7"));
519 dataChartList.add(dataChart.optInt("8")); 520 dataChartList.add(dataChart.optInt("8"));
520 dataChartList.add(dataChart.optInt("9")); 521 dataChartList.add(dataChart.optInt("9"));
521 dataChartList.add(dataChart.optInt("10")); 522 dataChartList.add(dataChart.optInt("10"));
522 dataChartList.add(dataChart.optInt("11")); 523 dataChartList.add(dataChart.optInt("11"));
523 dataChartList.add(dataChart.optInt("12")); 524 dataChartList.add(dataChart.optInt("12"));
524 dataChartList.add(dataChart.optInt("13")); 525 dataChartList.add(dataChart.optInt("13"));
525 dataChartList.add(dataChart.optInt("14")); 526 dataChartList.add(dataChart.optInt("14"));
526 dataChartList.add(dataChart.optInt("15")); 527 dataChartList.add(dataChart.optInt("15"));
527 dataChartList.add(dataChart.optInt("16")); 528 dataChartList.add(dataChart.optInt("16"));
528 dataChartList.add(dataChart.optInt("17")); 529 dataChartList.add(dataChart.optInt("17"));
529 dataChartList.add(dataChart.optInt("18")); 530 dataChartList.add(dataChart.optInt("18"));
530 dataChartList.add(dataChart.optInt("19")); 531 dataChartList.add(dataChart.optInt("19"));
531 dataChartList.add(dataChart.optInt("20")); 532 dataChartList.add(dataChart.optInt("20"));
532 dataChartList.add(dataChart.optInt("21")); 533 dataChartList.add(dataChart.optInt("21"));
533 dataChartList.add(dataChart.optInt("22")); 534 dataChartList.add(dataChart.optInt("22"));
534 dataChartList.add(dataChart.optInt("23")); 535 dataChartList.add(dataChart.optInt("23"));
535 536
536 mDataModBike.setDataChart(dataChartList); 537 mDataModBike.setDataChart(dataChartList);
537 } 538 }
538 539
539 @OnClick({R.id.btn_oneDay, R.id.btn_oneWeek, R.id.btn_oneMonth, R.id.btn_threeMonth, 540 @OnClick({R.id.btn_oneDay, R.id.btn_oneWeek, R.id.btn_oneMonth, R.id.btn_threeMonth,
540 R.id.btn_sixMonth, R.id.btn_left_date, R.id.btn_right_date, R.id.ll_bike, 541 R.id.btn_sixMonth, R.id.btn_left_date, R.id.btn_right_date, R.id.ll_bike,
541 R.id.ll_walking, R.id.ll_running, R.id.rl_stepView}) 542 R.id.ll_walking, R.id.ll_running, R.id.rl_stepView})
542 public void onClick(View v){ 543 public void onClick(View v){
543 switch (v.getId()){ 544 switch (v.getId()){
544 case R.id.btn_left_date: 545 case R.id.btn_left_date:
545 mCalendar = Calendar.getInstance(); 546 mCalendar = Calendar.getInstance();
546 mCalendar.setTime(mAnaDate); 547 mCalendar.setTime(mAnaDate);
547 mCalendar.add(Calendar.DAY_OF_MONTH, -1); 548 mCalendar.add(Calendar.DAY_OF_MONTH, -1);
548 Date date = mCalendar.getTime(); 549 Date date = mCalendar.getTime();
549 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 550 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
550 tvWeekDay.setText(Utils.getWeekdayFromDate(date)); 551 tvWeekDay.setText(Utils.getWeekdayFromDate(date));
551 mAnaDate = date; 552 mAnaDate = date;
552 getHistoryData(dataType, mAnaDate); 553 getHistoryData(dataType, mAnaDate);
553 break; 554 break;
554 555
555 case R.id.btn_right_date: 556 case R.id.btn_right_date:
556 mCalendar = Calendar.getInstance(); 557 mCalendar = Calendar.getInstance();
557 mCalendar.setTime(mAnaDate); 558 mCalendar.setTime(mAnaDate);
558 mCalendar.add(Calendar.DAY_OF_MONTH, +1); 559 mCalendar.add(Calendar.DAY_OF_MONTH, +1);
559 Date date1 = mCalendar.getTime(); 560 Date date1 = mCalendar.getTime();
560 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date1)); 561 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date1));
561 tvWeekDay.setText(Utils.getWeekdayFromDate(date1)); 562 tvWeekDay.setText(Utils.getWeekdayFromDate(date1));
562 mAnaDate = date1; 563 mAnaDate = date1;
563 getHistoryData(dataType, mAnaDate); 564 getHistoryData(dataType, mAnaDate);
564 break; 565 break;
565 566
566 case R.id.btn_oneDay: 567 case R.id.btn_oneDay:
567 dataType = Const.DATA_TYPE.ONE_DAY; 568 dataType = Const.DATA_TYPE.ONE_DAY;
568 updateUiType(); 569 updateUiType();
569 getHistoryData(dataType, mAnaDate); 570 getHistoryData(dataType, mAnaDate);
570 break; 571 break;
571 572
572 case R.id.btn_oneWeek: 573 case R.id.btn_oneWeek:
573 dataType = Const.DATA_TYPE.ONE_WEEK; 574 dataType = Const.DATA_TYPE.ONE_WEEK;
574 updateUiType(); 575 updateUiType();
575 getHistoryData(dataType, mAnaDate); 576 getHistoryData(dataType, mAnaDate);
576 break; 577 break;
577 578
578 case R.id.btn_oneMonth: 579 case R.id.btn_oneMonth:
579 dataType = Const.DATA_TYPE.ONE_MONTH; 580 dataType = Const.DATA_TYPE.ONE_MONTH;
580 updateUiType(); 581 updateUiType();
581 getHistoryData(dataType, mAnaDate); 582 getHistoryData(dataType, mAnaDate);
582 break; 583 break;
583 584
584 case R.id.btn_threeMonth: 585 case R.id.btn_threeMonth:
585 dataType = Const.DATA_TYPE.THREE_MONTH; 586 dataType = Const.DATA_TYPE.THREE_MONTH;
586 updateUiType(); 587 updateUiType();
587 getHistoryData(dataType, mAnaDate); 588 getHistoryData(dataType, mAnaDate);
588 break; 589 break;
589 590
590 case R.id.btn_sixMonth: 591 case R.id.btn_sixMonth:
591 dataType = Const.DATA_TYPE.SIX_MONTH; 592 dataType = Const.DATA_TYPE.SIX_MONTH;
592 updateUiType(); 593 updateUiType();
593 getHistoryData(dataType, mAnaDate); 594 getHistoryData(dataType, mAnaDate);
594 break; 595 break;
595 596
596 case R.id.tv_date: 597 case R.id.tv_date:
597 handleAnaDatePicker(); 598 handleAnaDatePicker();
598 break; 599 break;
599 600
600 case R.id.ll_bike: 601 case R.id.ll_bike:
601 stepType = Const.STEP_TYPE.BIKE; 602 stepType = Const.STEP_TYPE.BIKE;
602 updateUiStepType(true, false, false); 603 updateUiStepType(true, false, false);
603 // add data 604 // add data
604 mDataCurrent = mDataModBike; 605 mDataCurrent = mDataModBike;
605 updateUI(); 606 updateUI();
606 break; 607 break;
607 608
608 case R.id.ll_walking: 609 case R.id.ll_walking:
609 stepType = Const.STEP_TYPE.WALKING; 610 stepType = Const.STEP_TYPE.WALKING;
610 updateUiStepType(false, true, false); 611 updateUiStepType(false, true, false);
611 // add data 612 // add data
612 mDataCurrent = mDataModWalking; 613 mDataCurrent = mDataModWalking;
613 updateUI(); 614 updateUI();
614 break; 615 break;
615 616
616 case R.id.ll_running: 617 case R.id.ll_running:
617 stepType = Const.STEP_TYPE.RUNNING; 618 stepType = Const.STEP_TYPE.RUNNING;
618 updateUiStepType(false, false, true); 619 updateUiStepType(false, false, true);
619 // add 620 // add
620 mDataCurrent = mDataModRunning; 621 mDataCurrent = mDataModRunning;
621 updateUI(); 622 updateUI();
622 break; 623 break;
623 624
624 case R.id.rl_stepView: 625 case R.id.rl_stepView:
625 mHistoryFragment.showDetailFragment(); 626 mHistoryFragment.showDetailFragment();
626 break; 627 break;
627 628
628 default: 629 default:
629 break; 630 break;
630 } 631 }
631 } 632 }
632 633
633 @Override 634 @Override
634 public void onActivityResult(int requestCode, int resultCode, Intent data) { 635 public void onActivityResult(int requestCode, int resultCode, Intent data) {
635 super.onActivityResult(requestCode, resultCode, data); 636 super.onActivityResult(requestCode, resultCode, data);
636 637
637 } 638 }
638 } 639 }
639 640
app/src/main/java/com/dinhcv/lifelogpedometer/activity/MapFragment.java
1 package com.dinhcv.lifelogpedometer.activity; 1 package com.dinhcv.lifelogpedometer.activity;
2 2
3 import android.Manifest;
3 import android.app.Activity; 4 import android.app.Activity;
4 import android.content.Context; 5 import android.content.Context;
6 import android.content.pm.PackageManager;
7 import android.location.Location;
8 import android.location.LocationListener;
9 import android.location.LocationManager;
5 import android.os.Bundle; 10 import android.os.Bundle;
6 import android.support.annotation.Nullable; 11 import android.support.annotation.Nullable;
12 import android.support.v4.app.ActivityCompat;
13 import android.support.v4.content.ContextCompat;
7 import android.support.v4.app.Fragment; 14 import android.support.v4.app.Fragment;
8 import android.util.Log; 15 import android.util.Log;
9 import android.view.LayoutInflater; 16 import android.view.LayoutInflater;
10 import android.view.View; 17 import android.view.View;
11 import android.view.ViewGroup; 18 import android.view.ViewGroup;
12 19
13 import com.dinhcv.lifelogpedometer.R; 20 import com.dinhcv.lifelogpedometer.R;
21 import com.google.android.gms.maps.CameraUpdateFactory;
14 import com.google.android.gms.maps.GoogleMap; 22 import com.google.android.gms.maps.GoogleMap;
15 import com.google.android.gms.maps.OnMapReadyCallback; 23 import com.google.android.gms.maps.OnMapReadyCallback;
24 import com.google.android.gms.maps.SupportMapFragment;
25 import com.google.android.gms.maps.model.LatLng;
26 import com.google.android.gms.maps.model.MarkerOptions;
27 import com.google.android.gms.maps.model.PolylineOptions;
16 28
29 import static android.content.Context.LOCATION_SERVICE;
30
17 public class MapFragment extends Fragment implements SettingFragmentPresenter, OnMapReadyCallback { 31 public class MapFragment extends Fragment implements SettingFragmentPresenter, OnMapReadyCallback {
18 private View mRootView; 32 private View mRootView;
33 private PolylineOptions polylineOptions = new PolylineOptions();
34 private LocationManager mLocationManager;
35 // The minimum distance to change Updates in meters
36 private static final long LOCATION_REFRESH_DISTANCE = 10;
19 37
38 // The minimum time between updates in milliseconds
39 private static final long LOCATION_REFRESH_TIME = 10000;
40
41 private double lat = 0;
42 private double log = 0;
43
44 private SupportMapFragment mapFragment;
45 private GoogleMap googleMap;
46
20 @Override 47 @Override
21 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 48 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
22 savedInstanceState) { 49 savedInstanceState) {
23 // Inflate the layout for this fragment 50 // Inflate the layout for this fragment
24 mRootView = inflater.inflate(R.layout.fragment_map, container, false); 51 mRootView = inflater.inflate(R.layout.fragment_map, container, false);
25 52
26 initView(mRootView); 53 initView(mRootView);
27 54
28 initData(); 55 initData();
29 56
30 return mRootView; 57 return mRootView;
31 } 58 }
32 59
33 /** 60 /**
34 * init view 61 * init view
35 * 62 *
36 * @param rootView view 63 * @param rootView view
37 */ 64 */
38 private void initView(View rootView) { 65 private void initView(View rootView) {
66 mapFragment = (SupportMapFragment) getChildFragmentManager()
67 .findFragmentById(R.id.map);
39 68
69 polylineOptions.color(ContextCompat.getColor(getActivity(),android.R.color.holo_red_dark));
70
40 } 71 }
41 72
42 /** 73 /**
43 * Init data 74 * Init data
44 */ 75 */
45 private void initData() { 76 private void initData() {
77 mLocationManager = (LocationManager) getActivity().getSystemService(LOCATION_SERVICE);
46 78
79 if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
80 return;
81 }
82 mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REFRESH_TIME,
83 LOCATION_REFRESH_DISTANCE, mLocationListener);
47 } 84 }
48 85
86 private final LocationListener mLocationListener = new LocationListener() {
87 @Override
88 public void onLocationChanged(final Location location) {
89 //your code here
90 lat = location.getLatitude();
91 log = location.getLongitude();
92 polylineOptions.add(new LatLng(lat, log));
93 if (googleMap!= null) {
94 googleMap.addPolyline(polylineOptions);
95 }
96 //update
97 update();
98 }
49 99
100 @Override
101 public void onStatusChanged(String s, int i, Bundle bundle) {
102
103 }
104
105 @Override
106 public void onProviderEnabled(String s) {
107
108 }
109
110 @Override
111 public void onProviderDisabled(String s) {
112
113 }
114 };
115
116 private void update(){
117 mapFragment.getMapAsync(this);
118 }
119
120 private void updateLine(){
121 LatLng sydney = new LatLng(-34, 151);
122 LatLng melbourne=new LatLng(37.813, 144.9631);
123 LatLng auckland=new LatLng(36.8485, 174.7633);
124
125 polylineOptions.add(new LatLng[]{sydney,melbourne,auckland});
126 if (googleMap!= null) {
127 googleMap.addPolyline(polylineOptions);
128 }
129 }
130
50 @Override 131 @Override
51 public void onAttach(Context context) { 132 public void onAttach(Context context) {
52 super.onAttach(context); 133 super.onAttach(context);
53 if (context instanceof Activity) { 134 if (context instanceof Activity) {
54 135
55 } 136 }
56 } 137 }
57 138
58 139
59 /** 140 /**
60 * Save data 141 * Save data
61 */ 142 */
62 @Override 143 @Override
63 public void onSaveData() { 144 public void onSaveData() {
64 } 145 }
65 146
66 @Override 147 @Override
67 public void onInvalidate(boolean isInit) { 148 public void onInvalidate(boolean isInit) {
68 initData(); 149 initData();
69 } 150 }
70 151
71 152
72 @Override 153 @Override
73 public void onViewStateRestored(@Nullable Bundle savedInstanceState) { 154 public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
74 super.onViewStateRestored(savedInstanceState); 155 super.onViewStateRestored(savedInstanceState);
75 156
76 initData(); 157 initData();
77 } 158 }
78 159
79 @Override 160 @Override
80 public void onMapReady(GoogleMap googleMap) { 161 public void onMapReady(GoogleMap gm) {
162
163 googleMap = gm;
164 LatLng pos=new LatLng(lat, log);
165 googleMap.addMarker(new MarkerOptions()
166 .position(pos));
167 googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(pos, 15.0f));
168
81 Log.i("SonLT","Readdy"); 169 Log.i("SonLT","Readdy");
170
171 //updateLine();
82 } 172 }
83 } 173 }
84 174
app/src/main/java/com/dinhcv/lifelogpedometer/activity/PedometerActivity.java
1 package com.dinhcv.lifelogpedometer.activity; 1 package com.dinhcv.lifelogpedometer.activity;
2 2
3 import android.Manifest; 3 import android.Manifest;
4 import android.content.Context;
4 import android.content.Intent; 5 import android.content.Intent;
5 import android.os.Build; 6 import android.os.Build;
6 import android.os.Bundle; 7 import android.os.Bundle;
7 import android.support.design.widget.TabLayout; 8 import android.support.design.widget.TabLayout;
8 import android.support.v4.app.Fragment; 9 import android.support.v4.app.Fragment;
9 import android.support.v4.app.FragmentManager; 10 import android.support.v4.app.FragmentManager;
10 import android.support.v4.app.FragmentPagerAdapter; 11 import android.support.v4.app.FragmentPagerAdapter;
11 import android.support.v4.content.PermissionChecker; 12 import android.support.v4.content.PermissionChecker;
12 import android.support.v4.view.ViewPager; 13 import android.support.v4.view.ViewPager;
13 import android.support.v7.widget.PopupMenu; 14 import android.support.v7.widget.PopupMenu;
14 import android.support.v7.widget.Toolbar; 15 import android.support.v7.widget.Toolbar;
15 import android.view.Gravity; 16 import android.view.Gravity;
17 import android.view.LayoutInflater;
16 import android.view.MenuItem; 18 import android.view.MenuItem;
17 import android.view.View; 19 import android.view.View;
18 import android.view.Window; 20 import android.view.Window;
19 import android.view.WindowManager; 21 import android.view.WindowManager;
20 import android.widget.ImageView; 22 import android.widget.ImageView;
21 import android.widget.PopupWindow; 23 import android.widget.PopupWindow;
24 import android.widget.TabHost;
22 import android.widget.TextView; 25 import android.widget.TextView;
23 import android.widget.Toast; 26 import android.widget.Toast;
24 27
25 import com.dinhcv.lifelogpedometer.R; 28 import com.dinhcv.lifelogpedometer.R;
26 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; 29 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
27 import com.dinhcv.lifelogpedometer.utils.Debug; 30 import com.dinhcv.lifelogpedometer.utils.Debug;
28 import com.dinhcv.lifelogpedometer.utils.Utils; 31 import com.dinhcv.lifelogpedometer.utils.Utils;
29 32
30 import java.util.ArrayList; 33 import java.util.ArrayList;
31 import java.util.List; 34 import java.util.List;
32 35
33 public class PedometerActivity extends ActivityBase { 36 public class PedometerActivity extends ActivityBase {
34 private Toolbar mToolBar; 37 private Toolbar mToolBar;
35 private ViewPager mViewPager; 38 private ViewPager mViewPager;
36 private int mCurrentTab = 0; 39 private int mCurrentTab = 0;
37 private TabLayout mTabLayout; 40 private TabLayout mTabLayout;
38 private TextView tvPageTitle; 41 private TextView tvPageTitle;
39 private ImageView ivHome; 42 private ImageView ivHome;
40 private ImageView imvMenu; 43 private ImageView imvMenu;
41 44
42 private TopFragment mTopFragment; 45 private TopFragment mTopFragment;
43 private HistoryFragment mHistoryFragment; 46 private HistoryFragment mHistoryFragment;
44 private SnsFragment mSnsFragment; 47 private SnsFragment mSnsFragment;
45 48
46 private int[] tabIcons = { 49 private int[] tabIcons = {
47 com.dinhcv.lifelogpedometer.R.drawable.ic_date, 50 R.drawable.today_ic,
48 R.drawable.ic_history, 51 R.drawable.history_ic,
49 R.drawable.ic_rank, 52 R.drawable.rank_ic,
50 R.drawable.ic_map, 53 R.drawable.map_ic,
51 R.drawable.ic_sns 54 R.drawable.sns_ic
52 }; 55 };
53 56
54 public enum TAB { 57 public enum TAB {
55 DATE_TAB(0), 58 DATE_TAB(0),
56 HISTORY_TAB(1), 59 HISTORY_TAB(1),
57 RANK_TAB(2), 60 RANK_TAB(2),
58 MAP_TAB(3), 61 MAP_TAB(3),
59 SNS_TAB(4); 62 SNS_TAB(4);
60 63
61 private final int index; 64 private final int index;
62 65
63 TAB(int index) { 66 TAB(int index) {
64 this.index = index; 67 this.index = index;
65 } 68 }
66 69
67 public int getValue() { 70 public int getValue() {
68 return index; 71 return index;
69 } 72 }
70 } 73 }
71 74
72 @Override 75 @Override
73 protected void onCreate(Bundle savedInstanceState) { 76 protected void onCreate(Bundle savedInstanceState) {
74 super.onCreate(savedInstanceState); 77 super.onCreate(savedInstanceState);
75 78
76 setContentView(R.layout.activity_pedometer); 79 setContentView(R.layout.activity_pedometer);
77 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 80 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
78 81
79 initView(); 82 initView();
80 83
81 if (android.support.v4.BuildConfig.DEBUG && Build.VERSION.SDK_INT >= 23 && PermissionChecker 84 if (android.support.v4.BuildConfig.DEBUG && Build.VERSION.SDK_INT >= 23 && PermissionChecker
82 .checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != 85 .checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
83 PermissionChecker.PERMISSION_GRANTED) { 86 PermissionChecker.PERMISSION_GRANTED) {
84 requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); 87 requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
85 } 88 }
86 } 89 }
87 90
88 private void initView() { 91 private void initView() {
89 92
90 tvPageTitle = (TextView) findViewById(R.id.tv_pageTitle); 93 tvPageTitle = (TextView) findViewById(R.id.tv_pageTitle);
91 ivHome = (ImageView) findViewById(R.id.iv_home); 94 ivHome = (ImageView) findViewById(R.id.iv_home);
92 imvMenu = (ImageView) findViewById(R.id.imv_menu); 95 imvMenu = (ImageView) findViewById(R.id.imv_menu);
93 96
94 mViewPager = (ViewPager) findViewById(R.id.viewpager); 97 mViewPager = (ViewPager) findViewById(R.id.viewpager);
95 mViewPager.setOffscreenPageLimit(5); 98 mViewPager.setOffscreenPageLimit(5);
96 setupViewPager(mViewPager); 99 setupViewPager(mViewPager);
97 mTabLayout = (TabLayout) findViewById(R.id.tabs); 100 mTabLayout = (TabLayout) findViewById(R.id.tabs);
98 mTabLayout.setupWithViewPager(mViewPager); 101 mTabLayout.setupWithViewPager(mViewPager);
99 //Set tab selected 102 //Set tab selected
100 TabLayout.Tab tab = mTabLayout.getTabAt(mCurrentTab); 103 TabLayout.Tab tab = mTabLayout.getTabAt(mCurrentTab);
101 if (tab != null) { 104 if (tab != null) {
102 tab.select(); 105 tab.select();
103 } 106 }
107 //mTabLayout.addTab();
108 View view1 = getLayoutInflater().inflate(R.layout.customtab, null);
109 view1.findViewById(R.id.icon).setBackgroundResource(R.drawable.today_ic);
110 //mTabLayout.addTab(mTabLayout.newTab().setCustomView(view1));
104 111
112
113 View view2 = getLayoutInflater().inflate(R.layout.customtab, null);
114 view2.findViewById(R.id.icon).setBackgroundResource(R.drawable.history_ic);
115 //mTabLayout.addTab(mTabLayout.newTab().setCustomView(view2));
116
117
118 View view3 = getLayoutInflater().inflate(R.layout.customtab, null);
119 view3.findViewById(R.id.icon).setBackgroundResource(R.drawable.rank_ic);
120 //mTabLayout.addTab(mTabLayout.newTab().setCustomView(view3));
121
122
123 View view4 = getLayoutInflater().inflate(R.layout.customtab, null);
124 view4.findViewById(R.id.icon).setBackgroundResource(R.drawable.map_ic);
125 //mTabLayout.addTab(mTabLayout.newTab().setCustomView(view4));
126
127
128 View view5 = getLayoutInflater().inflate(R.layout.customtab, null);
129 view5.findViewById(R.id.icon).setBackgroundResource(R.drawable.sns_ic);
130 //mTabLayout.addTab(mTabLayout.newTab().setCustomView(view5));
131
132
133 mTabLayout.getTabAt(0).setCustomView(view1);
134 mTabLayout.getTabAt(1).setCustomView(view2);
135 mTabLayout.getTabAt(2).setCustomView(view3);
136 mTabLayout.getTabAt(3).setCustomView(view4);
137 mTabLayout.getTabAt(4).setCustomView(view5);
138
105 changeColorStatusBar(); 139 changeColorStatusBar();
106 setupTabIcons(); 140 //setupTabIcons();
107 141
108 //SonLT Add 142 //SonLT Add
109 ivHome.setOnClickListener(new View.OnClickListener() { 143 ivHome.setOnClickListener(new View.OnClickListener() {
110 @Override 144 @Override
111 public void onClick(View v) { 145 public void onClick(View v) {
112 switch (mCurrentTab){ 146 switch (mCurrentTab){
113 case 0: mTopFragment.clickBackToHome(); break; 147 case 0: mTopFragment.clickBackToHome(); break;
114 case 1: mHistoryFragment.clickBackToHome(); break; 148 case 1: mHistoryFragment.clickBackToHome(); break;
115 case 4: mSnsFragment.handleToolbarClick(0); break; 149 case 4: mSnsFragment.handleToolbarClick(0); break;
116 default: break; 150 default: break;
117 } 151 }
118 } 152 }
119 }); 153 });
120 154
121 imvMenu.setOnClickListener(new View.OnClickListener() { 155 imvMenu.setOnClickListener(new View.OnClickListener() {
122 @Override 156 @Override
123 public void onClick(View v) { 157 public void onClick(View v) {
124 //Creating the instance of PopupMenu 158 //Creating the instance of PopupMenu
125 PopupMenu popup = new PopupMenu(PedometerActivity.this, imvMenu); 159 PopupMenu popup = new PopupMenu(PedometerActivity.this, imvMenu);
126 //Inflating the Popup using xml file 160 //Inflating the Popup using xml file
127 popup.getMenuInflater().inflate(R.menu.main, popup.getMenu()); 161 popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());
128 162
129 //registering popup with OnMenuItemClickListener 163 //registering popup with OnMenuItemClickListener
130 popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 164 popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
131 public boolean onMenuItemClick(MenuItem item) { 165 public boolean onMenuItemClick(MenuItem item) {
132 switch (item.getItemId()){ 166 switch (item.getItemId()){
133 case R.id.action_setting: 167 case R.id.action_setting:
134 Toast.makeText( 168 Toast.makeText(
135 PedometerActivity.this, 169 PedometerActivity.this,
136 "Have not spec : " + item.getTitle(), 170 "Have not spec : " + item.getTitle(),
137 Toast.LENGTH_SHORT 171 Toast.LENGTH_SHORT
138 ).show(); 172 ).show();
139 break; 173 break;
140 case R.id.action_profile: 174 case R.id.action_profile:
141 Toast.makeText( 175 Toast.makeText(
142 PedometerActivity.this, 176 PedometerActivity.this,
143 "Have not spec : " + item.getTitle(), 177 "Have not spec : " + item.getTitle(),
144 Toast.LENGTH_SHORT 178 Toast.LENGTH_SHORT
145 ).show(); 179 ).show();
146 break; 180 break;
147 case R.id.action_logout: 181 case R.id.action_logout:
148 logout(); 182 logout();
149 break; 183 break;
150 default: 184 default:
151 Debug.warn("Not run here"); 185 Debug.warn("Not run here");
152 break; 186 break;
153 } 187 }
154 188
155 return true; 189 return true;
156 } 190 }
157 }); 191 });
158 192
159 popup.show(); //showing popup menu 193 popup.show(); //showing popup menu
160 } 194 }
161 }); //closing the setOnClickListener method 195 }); //closing the setOnClickListener method
162 } 196 }
163 197
198 public TabHost.TabSpec setIndicator(Context ctx, TabHost.TabSpec spec, int viewId, int resId, String name) {
199 View v = LayoutInflater.from(ctx).inflate(R.layout.customtab, null);
200 ImageView imgTab = (ImageView) v.findViewById(viewId);
201 imgTab.setImageDrawable(getResources().getDrawable(resId));
202
203 return spec.setIndicator(v);
204 }
205
164 private void setupTabIcons() { 206 private void setupTabIcons() {
165 mTabLayout.getTabAt(0).setIcon(tabIcons[0]); 207 mTabLayout.getTabAt(0).setCustomView(tabIcons[0]);
166 mTabLayout.getTabAt(1).setIcon(tabIcons[1]); 208 mTabLayout.getTabAt(1).setIcon(tabIcons[1]);
167 mTabLayout.getTabAt(2).setIcon(tabIcons[2]); 209 mTabLayout.getTabAt(2).setIcon(tabIcons[2]);
168 mTabLayout.getTabAt(3).setIcon(tabIcons[3]); 210 mTabLayout.getTabAt(3).setIcon(tabIcons[3]);
169 mTabLayout.getTabAt(4).setIcon(tabIcons[4]); 211 mTabLayout.getTabAt(4).setIcon(tabIcons[4]);
170 } 212 }
171 213
172 214
173 private void setTabView() { 215 private void setTabView() {
174 216
175 for (int i = 0; i < mTabLayout.getTabCount(); i++) { 217 for (int i = 0; i < mTabLayout.getTabCount(); i++) {
176 TextView tv = (TextView) mTabLayout.getChildAt(0).findViewById(android.R.id.title); 218 TextView tv = (TextView) mTabLayout.getChildAt(0).findViewById(android.R.id.title);
177 //tv.setTextColor(Color.BLACK); 219 //tv.setTextColor(Color.BLACK);
178 tv.setPadding(10, 10, 10, 15); 220 tv.setPadding(10, 10, 10, 15);
179 tv.setTextSize((float) 20.0); 221 tv.setTextSize((float) 20.0);
180 //tv.setTypeface(null, Typeface.BOLD); 222 //tv.setTypeface(null, Typeface.BOLD);
181 //tv.setBackgroundResource(R.drawable.icon); 223 //tv.setBackgroundResource(R.drawable.icon);
182 tv.setHeight(100); 224 tv.setHeight(100);
183 tv.setWidth(100); 225 tv.setWidth(100);
184 } 226 }
185 227
186 } 228 }
187 229
188 private void changeColorStatusBar() { 230 private void changeColorStatusBar() {
189 if (android.os.Build.VERSION.SDK_INT >= 21) { 231 if (android.os.Build.VERSION.SDK_INT >= 21) {
190 Window window = this.getWindow(); 232 Window window = this.getWindow();
191 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 233 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
192 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 234 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
193 // window.setStatusBarColor(Utils.getColorWrapper(this, R.color.white)); 235 // window.setStatusBarColor(Utils.getColorWrapper(this, R.color.white));
194 } 236 }
195 } 237 }
196 238
197 // @Override 239 // @Override
198 // public boolean onCreateOptionsMenu(Menu menu) { 240 // public boolean onCreateOptionsMenu(Menu menu) {
199 // getMenuInflater().inflate(R.menu.setting_menu, menu); 241 // getMenuInflater().inflate(R.menu.setting_menu, menu);
200 // return true; 242 // return true;
201 // } 243 // }
202 244
203 @Override 245 @Override
204 public boolean onOptionsItemSelected(MenuItem item) { 246 public boolean onOptionsItemSelected(MenuItem item) {
205 return super.onOptionsItemSelected(item); 247 return super.onOptionsItemSelected(item);
206 } 248 }
207 249
208 /** 250 /**
209 * Setup pager 251 * Setup pager
210 * 252 *
211 * @param viewPager: view pager 253 * @param viewPager: view pager
212 */ 254 */
213 private void setupViewPager(ViewPager viewPager) { 255 private void setupViewPager(ViewPager viewPager) {
214 ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 256 ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
215 mTopFragment = new TopFragment(); 257 mTopFragment = new TopFragment();
216 adapter.addFragment(mTopFragment, getString(R.string.date)); 258 adapter.addFragment(mTopFragment, getString(R.string.date));
217 mHistoryFragment = new HistoryFragment(); 259 mHistoryFragment = new HistoryFragment();
218 adapter.addFragment(mHistoryFragment, getString(R.string.history)); 260 adapter.addFragment(mHistoryFragment, getString(R.string.history));
219 adapter.addFragment(new RankFragment(), getString(R.string.ranking)); 261 adapter.addFragment(new RankFragment(), getString(R.string.ranking));
220 adapter.addFragment(new MapFragment(), getString(R.string.map)); 262 adapter.addFragment(new MapFragment(), getString(R.string.map));
221 mSnsFragment = new SnsFragment(); 263 mSnsFragment = new SnsFragment();
222 adapter.addFragment(mSnsFragment, getString(R.string.sns)); 264 adapter.addFragment(mSnsFragment, getString(R.string.sns));
223 viewPager.setAdapter(adapter); 265 viewPager.setAdapter(adapter);
224 } 266 }
225 267
226 /** 268 /**
227 * Class FragmentPagerAdapter 269 * Class FragmentPagerAdapter
228 */ 270 */
229 class ViewPagerAdapter extends FragmentPagerAdapter { 271 class ViewPagerAdapter extends FragmentPagerAdapter {
230 private final List<Fragment> mFragmentList = new ArrayList<>(); 272 private final List<Fragment> mFragmentList = new ArrayList<>();
231 private final List<String> mFragmentTitleList = new ArrayList<>(); 273 private final List<String> mFragmentTitleList = new ArrayList<>();
232 274
233 public ViewPagerAdapter(FragmentManager manager) { 275 public ViewPagerAdapter(FragmentManager manager) {
234 super(manager); 276 super(manager);
235 } 277 }
236 278
237 @Override 279 @Override
238 public Fragment getItem(int position) { 280 public Fragment getItem(int position) {
239 return mFragmentList.get(position); 281 return mFragmentList.get(position);
240 } 282 }
241 283
242 @Override 284 @Override
243 public int getCount() { 285 public int getCount() {
244 return mFragmentList.size(); 286 return mFragmentList.size();
245 } 287 }
246 288
247 private void addFragment(Fragment fragment, String title) { 289 private void addFragment(Fragment fragment, String title) {
248 mFragmentList.add(fragment); 290 mFragmentList.add(fragment);
249 mFragmentTitleList.add(title); 291 mFragmentTitleList.add(title);
250 } 292 }
251 293
252 @Override 294 @Override
253 public CharSequence getPageTitle(int position) { 295 public CharSequence getPageTitle(int position) {
254 return mFragmentTitleList.get(position); 296 //return mFragmentTitleList.get(position);
297 return null;
255 } 298 }
256 } 299 }
257 300
258 @Override 301 @Override
259 protected void onResume() { 302 protected void onResume() {
260 super.onResume(); 303 super.onResume();
261 mViewPager.addOnPageChangeListener(mPageChangeListener); 304 mViewPager.addOnPageChangeListener(mPageChangeListener);
262 } 305 }
263 306
264 @Override 307 @Override
265 protected void onPause() { 308 protected void onPause() {
266 super.onPause(); 309 super.onPause();
267 mViewPager.removeOnPageChangeListener(mPageChangeListener); 310 mViewPager.removeOnPageChangeListener(mPageChangeListener);
268 } 311 }
269 312
270 private int mLastTab = 0; 313 private int mLastTab = 0;
271 private final ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager 314 private final ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager
272 .OnPageChangeListener 315 .OnPageChangeListener
273 () { 316 () {
274 @Override 317 @Override
275 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 318 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
276 //Nothing here 319 //Nothing here
277 } 320 }
278 321
279 @Override 322 @Override
280 public void onPageSelected(int position) { 323 public void onPageSelected(int position) {
281 ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter(); 324 ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter();
282 SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter.getItem 325 SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter.getItem
283 (position); 326 (position);
284 327
285 switch (position) { 328 switch (position) {
286 case 4: 329 case 4:
287 tvPageTitle.setText(getString(R.string.sns_fragment)); 330 tvPageTitle.setText(getString(R.string.sns_fragment));
288 ivHome.setVisibility(View.VISIBLE); 331 ivHome.setVisibility(View.VISIBLE);
289 break; 332 break;
290 case 1: 333 case 1:
291 tvPageTitle.setText(getString(R.string.today)); 334 tvPageTitle.setText(getString(R.string.today));
292 ivHome.setVisibility(View.VISIBLE); 335 ivHome.setVisibility(View.VISIBLE);
293 break; 336 break;
294 337
295 case 0: 338 case 0:
296 tvPageTitle.setText(getString(R.string.home)); 339 tvPageTitle.setText(getString(R.string.home));
297 ivHome.setVisibility(View.GONE); 340 ivHome.setVisibility(View.GONE);
298 break; 341 break;
299 342
300 default: 343 default:
301 tvPageTitle.setText(getString(R.string.home)); 344 tvPageTitle.setText(getString(R.string.home));
302 ivHome.setVisibility(View.GONE); 345 ivHome.setVisibility(View.GONE);
303 break; 346 break;
304 } 347 }
305 // if (position == 1){ 348 // if (position == 1){
306 // tvPageTitle.setText(getString(R.string.today)); 349 // tvPageTitle.setText(getString(R.string.today));
307 // ivHome.setVisibility(View.VISIBLE); 350 // ivHome.setVisibility(View.VISIBLE);
308 // }else { 351 // }else {
309 // tvPageTitle.setText(getString(R.string.home)); 352 // tvPageTitle.setText(getString(R.string.home));
310 // ivHome.setVisibility(View.GONE); 353 // ivHome.setVisibility(View.GONE);
311 // } 354 // }
312 355
313 presenter.onInvalidate(false); 356 presenter.onInvalidate(false);
314 mLastTab = position; 357 mLastTab = position;
315 mCurrentTab = position; 358 mCurrentTab = position;
316 } 359 }
317 360
318 @Override 361 @Override
319 public void onPageScrollStateChanged(int state) { 362 public void onPageScrollStateChanged(int state) {
320 //Nothing here 363 //Nothing here
321 if (state == ViewPager.SCROLL_STATE_SETTLING) { 364 if (state == ViewPager.SCROLL_STATE_SETTLING) {
322 if (mLastTab >= 0) { 365 if (mLastTab >= 0) {
323 ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter(); 366 ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter();
324 SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter 367 SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter
325 .getItem(mLastTab); 368 .getItem(mLastTab);
326 369
327 Debug.normal("Save data in tab:" + mLastTab); 370 Debug.normal("Save data in tab:" + mLastTab);
328 presenter.onSaveData(); 371 presenter.onSaveData();
329 } 372 }
330 } 373 }
331 } 374 }
332 }; 375 };
333 376
334 public void setVisibleIconHome(boolean isVisible){ 377 public void setVisibleIconHome(boolean isVisible){
335 if (isVisible) { 378 if (isVisible) {
336 ivHome.setVisibility(View.VISIBLE); 379 ivHome.setVisibility(View.VISIBLE);
337 }else { 380 }else {
338 ivHome.setVisibility(View.GONE); 381 ivHome.setVisibility(View.GONE);
339 } 382 }
340 383
341 setTitleTop(isVisible); 384 setTitleTop(isVisible);
342 } 385 }
343 386
344 public void setTitleTop(boolean isVisible){ 387 public void setTitleTop(boolean isVisible){
345 if (isVisible) { 388 if (isVisible) {
346 tvPageTitle.setText(getString(R.string.today)); 389 tvPageTitle.setText(getString(R.string.today));
347 }else { 390 }else {
348 tvPageTitle.setText(getString(R.string.home)); 391 tvPageTitle.setText(getString(R.string.home));
349 } 392 }
350 } 393 }
351 394
352 395
353 396
354 private void logout(){ 397 private void logout(){
355 // clear data 398 // clear data
356 Setting.clearUserIdSharepre(PedometerActivity.this); 399 Setting.clearUserIdSharepre(PedometerActivity.this);
357 // go to login 400 // go to login
358 Intent intent = new Intent(PedometerActivity.this, LoginActivity.class); 401 Intent intent = new Intent(PedometerActivity.this, LoginActivity.class);
359 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 402 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
360 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 403 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
361 startActivity(intent); 404 startActivity(intent);
362 } 405 }
363 406
364 } 407 }
365 408
app/src/main/java/com/dinhcv/lifelogpedometer/activity/RankFragment.java
1 package com.dinhcv.lifelogpedometer.activity; 1 package com.dinhcv.lifelogpedometer.activity;
2 2
3 import android.os.Bundle; 3 import android.os.Bundle;
4 import android.support.annotation.Nullable; 4 import android.support.annotation.Nullable;
5 import android.support.v4.widget.SwipeRefreshLayout; 5 import android.support.v4.widget.SwipeRefreshLayout;
6 import android.support.v7.widget.LinearLayoutManager; 6 import android.support.v7.widget.LinearLayoutManager;
7 import android.support.v7.widget.RecyclerView; 7 import android.support.v7.widget.RecyclerView;
8 import android.util.Log; 8 import android.util.Log;
9 import android.view.LayoutInflater; 9 import android.view.LayoutInflater;
10 import android.view.View; 10 import android.view.View;
11 import android.view.ViewGroup; 11 import android.view.ViewGroup;
12 import android.widget.Button; 12 import android.widget.Button;
13 import android.widget.ImageButton; 13 import android.widget.ImageButton;
14 import android.widget.ImageView; 14 import android.widget.ImageView;
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.RankingAdapter; 18 import com.dinhcv.lifelogpedometer.adapter.RankingAdapter;
19 import com.dinhcv.lifelogpedometer.model.structure.pojo.RankingInfo; 19 import com.dinhcv.lifelogpedometer.model.structure.pojo.RankingInfo;
20 import com.dinhcv.lifelogpedometer.model.structure.pojo.ResultResponse; 20 import com.dinhcv.lifelogpedometer.model.structure.pojo.ResultResponse;
21 import com.dinhcv.lifelogpedometer.model.structure.pojo.SnsTopicResponse; 21 import com.dinhcv.lifelogpedometer.model.structure.pojo.SnsTopicResponse;
22 import com.dinhcv.lifelogpedometer.network.ApiService; 22 import com.dinhcv.lifelogpedometer.network.ApiService;
23 import com.dinhcv.lifelogpedometer.network.ApiUtils; 23 import com.dinhcv.lifelogpedometer.network.ApiUtils;
24 import com.dinhcv.lifelogpedometer.portal.APIResponse; 24 import com.dinhcv.lifelogpedometer.portal.APIResponse;
25 import com.dinhcv.lifelogpedometer.utils.Utils; 25 import com.dinhcv.lifelogpedometer.utils.Utils;
26 26
27 import java.text.DateFormat; 27 import java.text.DateFormat;
28 import java.text.SimpleDateFormat; 28 import java.text.SimpleDateFormat;
29 import java.util.ArrayList; 29 import java.util.ArrayList;
30 import java.util.Calendar; 30 import java.util.Calendar;
31 import java.util.Date; 31 import java.util.Date;
32 import java.util.GregorianCalendar; 32 import java.util.GregorianCalendar;
33 import java.util.HashMap; 33 import java.util.HashMap;
34 import java.util.List; 34 import java.util.List;
35 import java.util.Map; 35 import java.util.Map;
36 36
37 import butterknife.BindView; 37 import butterknife.BindView;
38 import butterknife.ButterKnife; 38 import butterknife.ButterKnife;
39 import butterknife.OnClick; 39 import butterknife.OnClick;
40 import retrofit2.Call; 40 import retrofit2.Call;
41 import retrofit2.Callback; 41 import retrofit2.Callback;
42 import retrofit2.Response; 42 import retrofit2.Response;
43 43
44 public class RankFragment extends FragmentBase implements SettingFragmentPresenter { 44 public class RankFragment extends FragmentBase implements SettingFragmentPresenter {
45 45
46 private enum Mode { 46 private enum Mode {
47 WALK(1), 47 WALK(1),
48 RUN(2), 48 RUN(2),
49 BIKE(3), 49 BIKE(3),
50 ALL(0); 50 ALL(0);
51 51
52 private int mode; 52 private int mode;
53 53
54 Mode(int mode) { 54 Mode(int mode) {
55 this.mode = mode; 55 this.mode = mode;
56 } 56 }
57 57
58 public int getValue() { 58 public int getValue() {
59 return mode; 59 return mode;
60 } 60 }
61 61
62 public Mode valueOf(int value) { 62 public Mode valueOf(int value) {
63 switch (mode) { 63 switch (mode) {
64 case 0: 64 case 0:
65 return ALL; 65 return ALL;
66 case 1: 66 case 1:
67 return WALK; 67 return WALK;
68 case 2: 68 case 2:
69 return RUN; 69 return RUN;
70 case 3: 70 case 3:
71 return BIKE; 71 return BIKE;
72 default: 72 default:
73 return ALL; 73 return ALL;
74 } 74 }
75 } 75 }
76 } 76 }
77 77
78 private enum TypeJump { 78 private enum TypeJump {
79 DAILY(1), 79 DAILY(1),
80 WEEKLY(7), 80 WEEKLY(7),
81 MONTHLY(30), 81 MONTHLY(30),
82 YEARLY(365); 82 YEARLY(365);
83 private int jump; 83 private int jump;
84 84
85 TypeJump(int jump) { 85 TypeJump(int jump) {
86 this.jump = jump; 86 this.jump = jump;
87 } 87 }
88 88
89 public int getValue() { 89 public int getValue() {
90 return jump; 90 return jump;
91 } 91 }
92 } 92 }
93 93
94 @BindView(R.id.tv_start_date) 94 @BindView(R.id.tv_start_date)
95 TextView mTvStartDate; 95 TextView mTvStartDate;
96 @BindView(R.id.tv_end_date) 96 @BindView(R.id.tv_end_date)
97 TextView mTvEndDate; 97 TextView mTvEndDate;
98 @BindView(R.id.btn_back) 98 @BindView(R.id.btn_back)
99 ImageButton mBtnBack; 99 ImageView mBtnBack;
100 @BindView(R.id.btn_next) 100 @BindView(R.id.btn_next)
101 ImageView mBtnNext; 101 ImageView mBtnNext;
102 102
103 @BindView(R.id.btn_daily) 103 @BindView(R.id.btn_daily)
104 Button mBtnDaily; 104 Button mBtnDaily;
105 @BindView(R.id.btn_weekly) 105 @BindView(R.id.btn_weekly)
106 Button mBtnWeekly; 106 Button mBtnWeekly;
107 @BindView(R.id.btn_monthly) 107 @BindView(R.id.btn_monthly)
108 Button mBtnMonthly; 108 Button mBtnMonthly;
109 @BindView(R.id.btn_yearly) 109 @BindView(R.id.btn_yearly)
110 Button mBtnYearly; 110 Button mBtnYearly;
111 @BindView(R.id.btn_walk) 111 @BindView(R.id.btn_walk)
112 Button mBtnWalk; 112 Button mBtnWalk;
113 @BindView(R.id.btn_run) 113 @BindView(R.id.btn_run)
114 Button mBtnRun; 114 Button mBtnRun;
115 @BindView(R.id.btn_bike) 115 @BindView(R.id.btn_bike)
116 Button mBtnBike; 116 Button mBtnBike;
117 @BindView(R.id.btn_all) 117 @BindView(R.id.btn_all)
118 Button mBtnAll; 118 Button mBtnAll;
119 119
120 private ApiService mService; 120 private ApiService mService;
121 121
122 private Mode mCurrentMode = Mode.WALK; 122 private Mode mCurrentMode = Mode.WALK;
123 private TypeJump mCurrentJump = TypeJump.DAILY; 123 private TypeJump mCurrentJump = TypeJump.DAILY;
124 private int mCurrentPage = 1; 124 private int mCurrentPage = 1;
125 125
126 private View mRootView; 126 private View mRootView;
127 private List<RankingInfo> mRankList = new ArrayList<>(); 127 private List<RankingInfo> mRankList = new ArrayList<>();
128 128
129 private SwipeRefreshLayout mSwipeRefreshTopic; 129 private SwipeRefreshLayout mSwipeRefreshTopic;
130 private RecyclerView mRcvRank; 130 private RecyclerView mRcvRank;
131 private RankingAdapter mAdapter; 131 private RankingAdapter mAdapter;
132 private Date mStartDate = new Date(); 132 private Date mStartDate = new Date();
133 private Date mEndDate = new Date(); 133 private Date mEndDate = new Date();
134 134
135 private static final DateFormat FORMAT_DATE = new SimpleDateFormat("yyyyMMdd"); 135 private static final DateFormat FORMAT_DATE = new SimpleDateFormat("yyyyMMdd");
136 private static final String TAG = "RankFragment"; 136 private static final String TAG = "RankFragment";
137 137
138 @Override 138 @Override
139 public View onCreateView(LayoutInflater inflater, ViewGroup container, 139 public View onCreateView(LayoutInflater inflater, ViewGroup container,
140 Bundle savedInstanceState) { 140 Bundle savedInstanceState) {
141 // Inflate the layout for this fragment 141 // Inflate the layout for this fragment
142 mRootView = inflater.inflate(R.layout.fragment_rank, container, false); 142 mRootView = inflater.inflate(R.layout.fragment_rank, container, false);
143 ButterKnife.bind(this, mRootView); 143 ButterKnife.bind(this, mRootView);
144 mRcvRank = (RecyclerView) mRootView.findViewById(R.id.rcv_rank); 144 mRcvRank = (RecyclerView) mRootView.findViewById(R.id.rcv_rank);
145 145
146 initView(); 146 initView();
147 initData(); 147 initData();
148 148
149 return mRootView; 149 return mRootView;
150 } 150 }
151 151
152 private void initView() { 152 private void initView() {
153 mSwipeRefreshTopic = (SwipeRefreshLayout) mRootView.findViewById(R.id.swipe_ranking); 153 mSwipeRefreshTopic = (SwipeRefreshLayout) mRootView.findViewById(R.id.swipe_ranking);
154 mSwipeRefreshTopic.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 154 mSwipeRefreshTopic.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
155 @Override 155 @Override
156 public void onRefresh() { 156 public void onRefresh() {
157 handleLoadRankList(); 157 handleLoadRankList();
158 } 158 }
159 }); 159 });
160 160
161 mAdapter = new RankingAdapter(getActivity(), mRankList); 161 mAdapter = new RankingAdapter(getActivity(), mRankList);
162 RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this.getContext()); 162 RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this.getContext());
163 mRcvRank.setLayoutManager(mLayoutManager); 163 mRcvRank.setLayoutManager(mLayoutManager);
164 mRcvRank.setAdapter(mAdapter); 164 mRcvRank.setAdapter(mAdapter);
165 165
166 initButtonStatus(); 166 initButtonStatus();
167 } 167 }
168 168
169 private void initData() { 169 private void initData() {
170 initStartDate(); 170 initStartDate();
171 showDateData(); 171 showDateData();
172 handleLoadRankList(); 172 handleLoadRankList();
173 } 173 }
174 174
175 private void showDateData() { 175 private void showDateData() {
176 mTvStartDate.setText(Utils.dateToStringFormatDayMonthYearJp(mStartDate)); 176 mTvStartDate.setText(Utils.dateToStringFormatDayMonthYearJp(mStartDate));
177 mTvEndDate.setText(Utils.dateToStringFormatDayMonthYearJp(mEndDate)); 177 mTvEndDate.setText(Utils.dateToStringFormatDayMonthYearJp(mEndDate));
178 } 178 }
179 179
180 @OnClick(R.id.btn_daily) 180 @OnClick(R.id.btn_daily)
181 public void clickDaily() { 181 public void clickDaily() {
182 mCurrentJump = TypeJump.DAILY; 182 mCurrentJump = TypeJump.DAILY;
183 initButtonStatus(); 183 initButtonStatus();
184 handleLoadRankList(); 184 handleLoadRankList();
185 } 185 }
186 186
187 @OnClick(R.id.btn_weekly) 187 @OnClick(R.id.btn_weekly)
188 public void clickWeekly() { 188 public void clickWeekly() {
189 mCurrentJump = TypeJump.WEEKLY; 189 mCurrentJump = TypeJump.WEEKLY;
190 initButtonStatus(); 190 initButtonStatus();
191 handleLoadRankList(); 191 handleLoadRankList();
192 } 192 }
193 193
194 @OnClick(R.id.btn_monthly) 194 @OnClick(R.id.btn_monthly)
195 public void clickMonthly() { 195 public void clickMonthly() {
196 mCurrentJump = TypeJump.MONTHLY; 196 mCurrentJump = TypeJump.MONTHLY;
197 initButtonStatus(); 197 initButtonStatus();
198 handleLoadRankList(); 198 handleLoadRankList();
199 } 199 }
200 200
201 @OnClick(R.id.btn_yearly) 201 @OnClick(R.id.btn_yearly)
202 public void clickYearly() { 202 public void clickYearly() {
203 mCurrentJump = TypeJump.YEARLY; 203 mCurrentJump = TypeJump.YEARLY;
204 initButtonStatus(); 204 initButtonStatus();
205 handleLoadRankList(); 205 handleLoadRankList();
206 } 206 }
207 207
208 @OnClick(R.id.btn_walk) 208 @OnClick(R.id.btn_walk)
209 public void clickWalk() { 209 public void clickWalk() {
210 mCurrentMode = Mode.WALK; 210 mCurrentMode = Mode.WALK;
211 initButtonStatus(); 211 initButtonStatus();
212 handleLoadRankList(); 212 handleLoadRankList();
213 } 213 }
214 214
215 @OnClick(R.id.btn_run) 215 @OnClick(R.id.btn_run)
216 public void clickRun() { 216 public void clickRun() {
217 mCurrentMode = Mode.RUN; 217 mCurrentMode = Mode.RUN;
218 initButtonStatus(); 218 initButtonStatus();
219 handleLoadRankList(); 219 handleLoadRankList();
220 } 220 }
221 221
222 @OnClick(R.id.btn_bike) 222 @OnClick(R.id.btn_bike)
223 public void clickBike() { 223 public void clickBike() {
224 mCurrentMode = Mode.BIKE; 224 mCurrentMode = Mode.BIKE;
225 initButtonStatus(); 225 initButtonStatus();
226 handleLoadRankList(); 226 handleLoadRankList();
227 } 227 }
228 228
229 @OnClick(R.id.btn_all) 229 @OnClick(R.id.btn_all)
230 public void clickAll() { 230 public void clickAll() {
231 mCurrentMode = Mode.ALL; 231 mCurrentMode = Mode.ALL;
232 initButtonStatus(); 232 initButtonStatus();
233 handleLoadRankList(); 233 handleLoadRankList();
234 } 234 }
235 235
236 @OnClick(R.id.btn_back) 236 @OnClick(R.id.btn_back)
237 public void clickBack() { 237 public void clickBack() {
238 mEndDate = mStartDate; 238 mEndDate = mStartDate;
239 mStartDate = calDateByStep(mEndDate, -mCurrentJump.getValue()); 239 mStartDate = calDateByStep(mEndDate, -mCurrentJump.getValue());
240 showDateData(); 240 showDateData();
241 handleLoadRankList(); 241 handleLoadRankList();
242 } 242 }
243 243
244 @OnClick(R.id.btn_next) 244 @OnClick(R.id.btn_next)
245 public void clickNext() { 245 public void clickNext() {
246 mStartDate = mEndDate; 246 mStartDate = mEndDate;
247 mEndDate = calDateByStep(mStartDate, mCurrentJump.getValue()); 247 mEndDate = calDateByStep(mStartDate, mCurrentJump.getValue());
248 showDateData(); 248 showDateData();
249 handleLoadRankList(); 249 handleLoadRankList();
250 } 250 }
251 251
252 private void initStartDate() { 252 private void initStartDate() {
253 mStartDate = calDateByStep(mEndDate, -mCurrentJump.getValue()); 253 mStartDate = calDateByStep(mEndDate, -mCurrentJump.getValue());
254 } 254 }
255 255
256 private void initButtonStatus() { 256 private void initButtonStatus() {
257 switch (mCurrentMode) { 257 switch (mCurrentMode) {
258 case WALK: 258 case WALK:
259 showButtonStatusByMode(1); 259 showButtonStatusByMode(1);
260 break; 260 break;
261 case RUN: 261 case RUN:
262 showButtonStatusByMode(2); 262 showButtonStatusByMode(2);
263 break; 263 break;
264 case BIKE: 264 case BIKE:
265 showButtonStatusByMode(3); 265 showButtonStatusByMode(3);
266 break; 266 break;
267 case ALL: 267 case ALL:
268 showButtonStatusByMode(4); 268 showButtonStatusByMode(4);
269 break; 269 break;
270 } 270 }
271 271
272 switch (mCurrentJump) { 272 switch (mCurrentJump) {
273 case DAILY: 273 case DAILY:
274 showButtonStatusByTypeJump(1); 274 showButtonStatusByTypeJump(1);
275 break; 275 break;
276 case WEEKLY: 276 case WEEKLY:
277 showButtonStatusByTypeJump(2); 277 showButtonStatusByTypeJump(2);
278 break; 278 break;
279 case MONTHLY: 279 case MONTHLY:
280 showButtonStatusByTypeJump(3); 280 showButtonStatusByTypeJump(3);
281 break; 281 break;
282 case YEARLY: 282 case YEARLY:
283 showButtonStatusByTypeJump(4); 283 showButtonStatusByTypeJump(4);
284 break; 284 break;
285 } 285 }
286 } 286 }
287 287
288 private void showButtonStatusByMode(int position) { 288 private void showButtonStatusByMode(int position) {
289 mBtnWalk.setEnabled(true); 289 mBtnWalk.setEnabled(true);
290 mBtnRun.setEnabled(true); 290 mBtnRun.setEnabled(true);
291 mBtnBike.setEnabled(true); 291 mBtnBike.setEnabled(true);
292 mBtnAll.setEnabled(true); 292 mBtnAll.setEnabled(true);
293 293
294 switch (position) { 294 switch (position) {
295 case 1: 295 case 1:
296 mBtnWalk.setEnabled(false); 296 mBtnWalk.setEnabled(false);
297 break; 297 break;
298 case 2: 298 case 2:
299 mBtnRun.setEnabled(false); 299 mBtnRun.setEnabled(false);
300 break; 300 break;
301 case 3: 301 case 3:
302 mBtnBike.setEnabled(false); 302 mBtnBike.setEnabled(false);
303 break; 303 break;
304 case 4: 304 case 4:
305 mBtnAll.setEnabled(false); 305 mBtnAll.setEnabled(false);
306 ; 306 ;
307 break; 307 break;
308 } 308 }
309 } 309 }
310 310
311 private void showButtonStatusByTypeJump(int position) { 311 private void showButtonStatusByTypeJump(int position) {
312 mBtnDaily.setEnabled(true); 312 mBtnDaily.setEnabled(true);
313 mBtnWeekly.setEnabled(true); 313 mBtnWeekly.setEnabled(true);
314 mBtnMonthly.setEnabled(true); 314 mBtnMonthly.setEnabled(true);
315 mBtnYearly.setEnabled(true); 315 mBtnYearly.setEnabled(true);
316 316
317 switch (position) { 317 switch (position) {
318 case 1: 318 case 1:
319 mBtnDaily.setEnabled(false); 319 mBtnDaily.setEnabled(false);
320 break; 320 break;
321 case 2: 321 case 2:
322 mBtnWeekly.setEnabled(false); 322 mBtnWeekly.setEnabled(false);
323 break; 323 break;
324 case 3: 324 case 3:
325 mBtnMonthly.setEnabled(false); 325 mBtnMonthly.setEnabled(false);
326 break; 326 break;
327 case 4: 327 case 4:
328 mBtnYearly.setEnabled(false); 328 mBtnYearly.setEnabled(false);
329 break; 329 break;
330 } 330 }
331 } 331 }
332 332
333 private Date calDateByStep(Date date, int numDay) { 333 private Date calDateByStep(Date date, int numDay) {
334 Calendar myCal = new GregorianCalendar(); 334 Calendar myCal = new GregorianCalendar();
335 myCal.setTime(date); 335 myCal.setTime(date);
336 myCal.add(Calendar.DATE, numDay); 336 myCal.add(Calendar.DATE, numDay);
337 return myCal.getTime(); 337 return myCal.getTime();
338 } 338 }
339 339
340 @Override 340 @Override
341 public void onSaveData() { 341 public void onSaveData() {
342 342
343 } 343 }
344 344
345 @Override 345 @Override
346 public void onInvalidate(boolean isInit) { 346 public void onInvalidate(boolean isInit) {
347 347
348 } 348 }
349 349
350 @Override 350 @Override
351 public void onViewStateRestored(@Nullable Bundle savedInstanceState) { 351 public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
352 super.onViewStateRestored(savedInstanceState); 352 super.onViewStateRestored(savedInstanceState);
353 353
354 initData(); 354 initData();
355 } 355 }
356 356
357 public void handleLoadRankList() { 357 public void handleLoadRankList() {
358 mRankList.clear(); 358 mRankList.clear();
359 mAdapter.clearData(); 359 mAdapter.clearData();
360 mAdapter.notifyDataSetChanged(); 360 mAdapter.notifyDataSetChanged();
361 361
362 String startDate = FORMAT_DATE.format(mStartDate); 362 String startDate = FORMAT_DATE.format(mStartDate);
363 String endDate = FORMAT_DATE.format(mEndDate); 363 String endDate = FORMAT_DATE.format(mEndDate);
364 getRankList(mCurrentMode.getValue(), startDate, endDate, mCurrentPage); 364 getRankList(mCurrentMode.getValue(), startDate, endDate, mCurrentPage);
365 } 365 }
366 366
367 public void getRankList(int mode, String startDate, String endDate, int page) { 367 public void getRankList(int mode, String startDate, String endDate, int page) {
368 if (!mSwipeRefreshTopic.isRefreshing()) { 368 if (!mSwipeRefreshTopic.isRefreshing()) {
369 mSwipeRefreshTopic.setRefreshing(true); 369 mSwipeRefreshTopic.setRefreshing(true);
370 } 370 }
371 Map<String, String> header = new HashMap<>(); 371 Map<String, String> header = new HashMap<>();
372 header.put("token", APIResponse.getInstance().getToken()); 372 header.put("token", APIResponse.getInstance().getToken());
373 373
374 mService = ApiUtils.getApiService(); 374 mService = ApiUtils.getApiService();
375 mService.getRankingList(header, mode, startDate, endDate, page).enqueue(new Callback<ResultResponse<RankingInfo>>() { 375 mService.getRankingList(header, mode, startDate, endDate, page).enqueue(new Callback<ResultResponse<RankingInfo>>() {
376 @Override 376 @Override
377 public void onResponse(Call<ResultResponse<RankingInfo>> call, Response<ResultResponse<RankingInfo>> response) { 377 public void onResponse(Call<ResultResponse<RankingInfo>> call, Response<ResultResponse<RankingInfo>> response) {
378 if (response.isSuccessful()) { 378 if (response.isSuccessful()) {
379 mRankList = response.body().getResult(); 379 mRankList = response.body().getResult();
380 mAdapter.updateData(mRankList); 380 mAdapter.updateData(mRankList);
381 mAdapter.notifyDataSetChanged(); 381 mAdapter.notifyDataSetChanged();
382 Log.i("SonLT", "Success" + mRankList.size()); 382 Log.i("SonLT", "Success" + mRankList.size());
383 } else { 383 } else {
384 int statusCode = response.code(); 384 int statusCode = response.code();
385 // handle request errors depending on status code 385 // handle request errors depending on status code
386 Log.i("SonLT", "Fail " + statusCode); 386 Log.i("SonLT", "Fail " + statusCode);
387 } 387 }
388 if (mSwipeRefreshTopic.isRefreshing()) { 388 if (mSwipeRefreshTopic.isRefreshing()) {
389 mSwipeRefreshTopic.setRefreshing(false); 389 mSwipeRefreshTopic.setRefreshing(false);
390 } 390 }
391 } 391 }
392 392
393 @Override 393 @Override
394 public void onFailure(Call<ResultResponse<RankingInfo>> call, Throwable t) { 394 public void onFailure(Call<ResultResponse<RankingInfo>> call, Throwable t) {
395 Log.i("SonLT", "Success"); 395 Log.i("SonLT", "Success");
396 if (mSwipeRefreshTopic.isRefreshing()) { 396 if (mSwipeRefreshTopic.isRefreshing()) {
397 mSwipeRefreshTopic.setRefreshing(false); 397 mSwipeRefreshTopic.setRefreshing(false);
398 } 398 }
399 } 399 }
400 }); 400 });
401 } 401 }
402 } 402 }
403 403
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.ApiServices;
23 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 23 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
24 import com.dinhcv.lifelogpedometer.utils.Const; 24 import com.dinhcv.lifelogpedometer.utils.Const;
25 import com.dinhcv.lifelogpedometer.utils.Debug; 25 import com.dinhcv.lifelogpedometer.utils.Debug;
26 import com.dinhcv.lifelogpedometer.utils.Utils; 26 import com.dinhcv.lifelogpedometer.utils.Utils;
27 27
28 import org.json.JSONArray; 28 import org.json.JSONArray;
29 import org.json.JSONException; 29 import org.json.JSONException;
30 import org.json.JSONObject; 30 import org.json.JSONObject;
31 31
32 import java.util.ArrayList; 32 import java.util.ArrayList;
33 import java.util.Calendar; 33 import java.util.Calendar;
34 import java.util.Date; 34 import java.util.Date;
35 import java.util.List; 35 import java.util.List;
36 36
37 import de.hdodenhof.circleimageview.CircleImageView;
38
37 public class TopDateFragment extends FragmentBase implements SettingFragmentPresenter { 39 public class TopDateFragment extends FragmentBase implements SettingFragmentPresenter {
38 40
39 private TextView tvDate; 41 private TextView tvDate;
40 private TextView tvStep; 42 private TextView tvStep;
41 private TextView tvRemain; 43 private TextView tvRemain;
42 private TextView tvRateDone; 44 private TextView tvRateDone;
43 private ImageView ivBack; 45 private ImageView ivBack;
44 private ImageView ivNext; 46 private ImageView ivNext;
45 47
46 private LinearLayout llBike; 48 private LinearLayout llBike;
47 private LinearLayout llWalking; 49 private LinearLayout llWalking;
48 private LinearLayout llRunning; 50 private LinearLayout llRunning;
49 51
50 private Date mAnaDate; 52 private Date mAnaDate;
51 private Calendar mCalendar; 53 private Calendar mCalendar;
52 54
53 private int mAnaDay; 55 private int mAnaDay;
54 private int mAnaMonth; 56 private int mAnaMonth;
55 private int mAnaYear; 57 private int mAnaYear;
56 private Context mContext; 58 private Context mContext;
57 59
58 private Const.STEP_TYPE stepType; 60 private Const.STEP_TYPE stepType;
59 private TagetInfo mTagetInfo = new TagetInfo(); 61 private TagetInfo mTagetInfo = new TagetInfo();
60 private ImageView ivToDay; 62 private CircleImageView ivToDay;
61 private ExpandableListCustomView lvNotice; 63 private ExpandableListCustomView lvNotice;
62 private NoticeAdapter mNoticeAdapter; 64 private NoticeAdapter mNoticeAdapter;
63 private View mRootview; 65 private View mRootview;
64 private TopFragment mTopFragment; 66 private TopFragment mTopFragment;
65 67
66 public void setRootFragment(TopFragment frag) { 68 public void setRootFragment(TopFragment frag) {
67 this.mTopFragment = frag; 69 this.mTopFragment = frag;
68 } 70 }
69 71
70 @Override 72 @Override
71 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 73 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
72 savedInstanceState) { 74 savedInstanceState) {
73 // Inflate the layout for this fragment 75 // Inflate the layout for this fragment
74 mRootview = inflater.inflate(R.layout.fragment_top_date, container, false); 76 mRootview = inflater.inflate(R.layout.fragment_top_date, container, false);
75 mContext = getActivity(); 77 mContext = getActivity();
76 initView(mRootview); 78 initView(mRootview);
77 initData(); 79 initData();
78 return mRootview; 80 return mRootview;
79 } 81 }
80 82
81 83
82 private void initView(View rootView) { 84 private void initView(View rootView) {
83 tvDate = (TextView) rootView.findViewById(R.id.tv_date); 85 tvDate = (TextView) rootView.findViewById(R.id.tv_date);
84 tvStep = (TextView) rootView.findViewById(R.id.tv_step); 86 tvStep = (TextView) rootView.findViewById(R.id.tv_step);
85 tvRemain = (TextView) rootView.findViewById(R.id.tv_remainingStep); 87 tvRemain = (TextView) rootView.findViewById(R.id.tv_remainingStep);
86 tvRateDone = (TextView) rootView.findViewById(R.id.tv_completeRate); 88 tvRateDone = (TextView) rootView.findViewById(R.id.tv_completeRate);
87 ivBack = (ImageView) rootView.findViewById(R.id.iv_back); 89 ivBack = (ImageView) rootView.findViewById(R.id.iv_back);
88 ivNext = (ImageView) rootView.findViewById(R.id.iv_next); 90 ivNext = (ImageView) rootView.findViewById(R.id.iv_next);
89 91
90 llBike = (LinearLayout) rootView.findViewById(R.id.ll_bike); 92 llBike = (LinearLayout) rootView.findViewById(R.id.ll_bike);
91 llWalking = (LinearLayout) rootView.findViewById(R.id.ll_walking); 93 llWalking = (LinearLayout) rootView.findViewById(R.id.ll_walking);
92 llRunning = (LinearLayout) rootView.findViewById(R.id.ll_running); 94 llRunning = (LinearLayout) rootView.findViewById(R.id.ll_running);
93 95
94 ivToDay = (ImageView) rootView.findViewById(R.id.iv_toDay); 96 ivToDay = (CircleImageView) rootView.findViewById(R.id.iv_toDay);
95 lvNotice = (ExpandableListCustomView) rootView.findViewById(R.id.lv_notice); 97 lvNotice = (ExpandableListCustomView) rootView.findViewById(R.id.lv_notice);
96 98
97 handleEvent(); 99 handleEvent();
98 } 100 }
99 101
100 private void handleEvent(){ 102 private void handleEvent(){
101 tvDate.setOnClickListener(new View.OnClickListener() { 103 tvDate.setOnClickListener(new View.OnClickListener() {
102 @Override 104 @Override
103 public void onClick(View view) { 105 public void onClick(View view) {
104 handleAnaDatePicker(); 106 handleAnaDatePicker();
105 } 107 }
106 }); 108 });
107 109
108 ivBack.setOnClickListener(new View.OnClickListener() { 110 ivBack.setOnClickListener(new View.OnClickListener() {
109 @Override 111 @Override
110 public void onClick(View view) { 112 public void onClick(View view) {
111 mCalendar = Calendar.getInstance(); 113 mCalendar = Calendar.getInstance();
112 mCalendar.setTime(mAnaDate); 114 mCalendar.setTime(mAnaDate);
113 mCalendar.add(Calendar.DAY_OF_MONTH, -1); 115 mCalendar.add(Calendar.DAY_OF_MONTH, -1);
114 Date date = mCalendar.getTime(); 116 Date date = mCalendar.getTime();
115 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 117 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
116 mAnaDate = date; 118 mAnaDate = date;
117 getHomePage(mAnaDate, stepType); 119 getHomePage(mAnaDate, stepType);
118 getNews(mAnaDate); 120 getNews(mAnaDate);
119 } 121 }
120 }); 122 });
121 123
122 ivNext.setOnClickListener(new View.OnClickListener() { 124 ivNext.setOnClickListener(new View.OnClickListener() {
123 @Override 125 @Override
124 public void onClick(View view) { 126 public void onClick(View view) {
125 mCalendar = Calendar.getInstance(); 127 mCalendar = Calendar.getInstance();
126 mCalendar.setTime(mAnaDate); 128 mCalendar.setTime(mAnaDate);
127 mCalendar.add(Calendar.DAY_OF_MONTH, +1); 129 mCalendar.add(Calendar.DAY_OF_MONTH, +1);
128 Date date = mCalendar.getTime(); 130 Date date = mCalendar.getTime();
129 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 131 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
130 mAnaDate = date; 132 mAnaDate = date;
131 getHomePage(mAnaDate, stepType); 133 getHomePage(mAnaDate, stepType);
132 getNews(mAnaDate); 134 getNews(mAnaDate);
133 } 135 }
134 }); 136 });
135 137
136 138
137 llWalking.setOnClickListener(new View.OnClickListener() { 139 llWalking.setOnClickListener(new View.OnClickListener() {
138 @Override 140 @Override
139 public void onClick(View view) { 141 public void onClick(View view) {
140 stepType = Const.STEP_TYPE.WALKING; 142 stepType = Const.STEP_TYPE.WALKING;
141 updateUiStepType(false, true, false); 143 updateUiStepType(false, true, false);
142 // add data 144 // add data
143 getHomePage(mAnaDate, stepType); 145 getHomePage(mAnaDate, stepType);
144 } 146 }
145 }); 147 });
146 148
147 llRunning.setOnClickListener(new View.OnClickListener() { 149 llRunning.setOnClickListener(new View.OnClickListener() {
148 @Override 150 @Override
149 public void onClick(View view) { 151 public void onClick(View view) {
150 stepType = Const.STEP_TYPE.RUNNING; 152 stepType = Const.STEP_TYPE.RUNNING;
151 updateUiStepType(false, false, true); 153 updateUiStepType(false, false, true);
152 // add 154 // add
153 getHomePage(mAnaDate, stepType); 155 getHomePage(mAnaDate, stepType);
154 } 156 }
155 }); 157 });
156 158
157 llBike.setOnClickListener(new View.OnClickListener() { 159 llBike.setOnClickListener(new View.OnClickListener() {
158 @Override 160 @Override
159 public void onClick(View view) { 161 public void onClick(View view) {
160 stepType = Const.STEP_TYPE.BIKE; 162 stepType = Const.STEP_TYPE.BIKE;
161 updateUiStepType(true, false, false); 163 updateUiStepType(true, false, false);
162 // add data 164 // add data
163 getHomePage(mAnaDate, stepType); 165 getHomePage(mAnaDate, stepType);
164 } 166 }
165 }); 167 });
166 168
167 ivToDay.setOnClickListener(new View.OnClickListener() { 169 ivToDay.setOnClickListener(new View.OnClickListener() {
168 @Override 170 @Override
169 public void onClick(View view) { 171 public void onClick(View view) {
170 mTopFragment.showDetailFragment(); 172 mTopFragment.showDetailFragment();
171 } 173 }
172 }); 174 });
173 175
174 } 176 }
175 177
176 private void updateUiStepType(boolean b1, boolean b2, boolean b3) { 178 private void updateUiStepType(boolean b1, boolean b2, boolean b3) {
177 llBike.setSelected(b1); 179 llBike.setSelected(b1);
178 llWalking.setSelected(b2); 180 llWalking.setSelected(b2);
179 llRunning.setSelected(b3); 181 llRunning.setSelected(b3);
180 } 182 }
181 183
182 /** 184 /**
183 * Show date picker dialog 185 * Show date picker dialog
184 */ 186 */
185 private void handleAnaDatePicker() { 187 private void handleAnaDatePicker() {
186 188
187 new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { 189 new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
188 @Override 190 @Override
189 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 191 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
190 192
191 mCalendar = Calendar.getInstance(); 193 mCalendar = Calendar.getInstance();
192 mCalendar.set(year, monthOfYear, dayOfMonth); 194 mCalendar.set(year, monthOfYear, dayOfMonth);
193 mAnaYear = year; 195 mAnaYear = year;
194 mAnaMonth = monthOfYear; 196 mAnaMonth = monthOfYear;
195 mAnaDay = dayOfMonth; 197 mAnaDay = dayOfMonth;
196 Date date = mCalendar.getTime(); 198 Date date = mCalendar.getTime();
197 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); 199 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date));
198 mAnaDate = date; 200 mAnaDate = date;
199 201
200 getHomePage(mAnaDate, stepType); 202 getHomePage(mAnaDate, stepType);
201 getNews(mAnaDate); 203 getNews(mAnaDate);
202 } 204 }
203 }, mAnaYear, mAnaMonth, mAnaDay).show(); 205 }, mAnaYear, mAnaMonth, mAnaDay).show();
204 206
205 } 207 }
206 208
207 209
208 /** 210 /**
209 * init data for 211 * init data for
210 */ 212 */
211 private void initData() { 213 private void initData() {
212 mCalendar = Calendar.getInstance(); 214 mCalendar = Calendar.getInstance();
213 mCalendar.setTime(new Date()); 215 mCalendar.setTime(new Date());
214 mAnaDate = mCalendar.getTime(); 216 mAnaDate = mCalendar.getTime();
215 mAnaYear = mCalendar.get(Calendar.YEAR); 217 mAnaYear = mCalendar.get(Calendar.YEAR);
216 mAnaMonth = mCalendar.get(Calendar.MONTH); 218 mAnaMonth = mCalendar.get(Calendar.MONTH);
217 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); 219 mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH);
218 220
219 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); 221 tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate));
220 222
221 stepType = Const.STEP_TYPE.WALKING; 223 stepType = Const.STEP_TYPE.WALKING;
222 updateUiStepType(false, true, false); 224 updateUiStepType(false, true, false);
223 getHomePage(mAnaDate, stepType); 225 getHomePage(mAnaDate, stepType);
224 getNews(mAnaDate); 226 getNews(mAnaDate);
225 } 227 }
226 228
227 229
228 private void getHomePage(Date date, Const.STEP_TYPE stepType){ 230 private void getHomePage(Date date, Const.STEP_TYPE stepType){
229 231
230 showDialog(mContext); 232 showDialog(mContext);
231 ApiServices.homePage(date, stepType, new LLAPIManagerListener() { 233 ApiServices.homePage(date, stepType, new LLAPIManagerListener() {
232 @Override 234 @Override
233 public void onError(Error error) { 235 public void onError(Error error) {
234 Debug.error("Get data history error"); 236 Debug.error("Get data history error");
235 hiddenDialog(); 237 hiddenDialog();
236 showDialogNotData(); 238 showDialogNotData();
237 } 239 }
238 240
239 @Override 241 @Override
240 public void onSuccess(String json) { 242 public void onSuccess(String json) {
241 Debug.error("Get data history success"); 243 Debug.error("Get data history success");
242 hiddenDialog(); 244 hiddenDialog();
243 loadDataDone(json); 245 loadDataDone(json);
244 } 246 }
245 247
246 @Override 248 @Override
247 public void onSuccess(JSONObject object) { 249 public void onSuccess(JSONObject object) {
248 Debug.error("Get data history success"); 250 Debug.error("Get data history success");
249 hiddenDialog(); 251 hiddenDialog();
250 } 252 }
251 }); 253 });
252 } 254 }
253 255
254 private void showDialogNotData(){ 256 private void showDialogNotData(){
255 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); 257 showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data));
256 } 258 }
257 259
258 private void loadDataDone(String jsonString) { 260 private void loadDataDone(String jsonString) {
259 JSONObject jsonObject = null; 261 JSONObject jsonObject = null;
260 try { 262 try {
261 jsonObject = new JSONObject(jsonString); 263 jsonObject = new JSONObject(jsonString);
262 int status = jsonObject.optInt("status"); 264 int status = jsonObject.optInt("status");
263 if (status == 1) { 265 if (status == 1) {
264 JSONObject jsonObject1 = jsonObject.optJSONObject("result"); 266 JSONObject jsonObject1 = jsonObject.optJSONObject("result");
265 JSONObject targetInf = jsonObject1.getJSONObject("targetInf"); 267 JSONObject targetInf = jsonObject1.getJSONObject("targetInf");
266 JSONArray listNotice = jsonObject1.getJSONArray("listNotice"); 268 JSONArray listNotice = jsonObject1.getJSONArray("listNotice");
267 269
268 if (targetInf != null){ 270 if (targetInf != null){
269 String target = targetInf.optString("target_step"); 271 String target = targetInf.optString("target_step");
270 Debug.normal("Target: "+ target); 272 Debug.normal("Target: "+ target);
271 mTagetInfo.setTaget(targetInf.optString("target_step")); 273 mTagetInfo.setTaget(targetInf.optString("target_step"));
272 mTagetInfo.setSteps(targetInf.optString("num_step")); 274 mTagetInfo.setSteps(targetInf.optString("num_step"));
273 mTagetInfo.setStepRemain(targetInf.optString("remaining_step")); 275 mTagetInfo.setStepRemain(targetInf.optString("remaining_step"));
274 mTagetInfo.setCompletePercent(targetInf.optString("complete_percent")); 276 mTagetInfo.setCompletePercent(targetInf.optString("complete_percent"));
275 } 277 }
276 278
277 if (listNotice != null && listNotice.length() > 0) { 279 if (listNotice != null && listNotice.length() > 0) {
278 List<NoticeInfo> infoLists = new ArrayList<>(); 280 List<NoticeInfo> infoLists = new ArrayList<>();
279 for (int i = 0; i < listNotice.length(); i++){ 281 for (int i = 0; i < listNotice.length(); i++){
280 NoticeInfo noticeInfo = new NoticeInfo(); 282 NoticeInfo noticeInfo = new NoticeInfo();
281 JSONObject ob = (JSONObject) listNotice.get(i); 283 JSONObject ob = (JSONObject) listNotice.get(i);
282 noticeInfo.setId(ob.optInt("id")); 284 noticeInfo.setId(ob.optInt("id"));
283 noticeInfo.setContent(ob.optString("notice_content")); 285 noticeInfo.setContent(ob.optString("notice_content"));
284 infoLists.add(noticeInfo); 286 infoLists.add(noticeInfo);
285 } 287 }
286 288
287 mTagetInfo.setNoticeList(infoLists); 289 mTagetInfo.setNoticeList(infoLists);
288 } 290 }
289 291
290 } 292 }
291 } catch (JSONException e) { 293 } catch (JSONException e) {
292 e.printStackTrace(); 294 e.printStackTrace();
293 mTagetInfo = new TagetInfo();; 295 mTagetInfo = new TagetInfo();;
294 } 296 }
295 297
296 loadUI(); 298 loadUI();
297 } 299 }
298 300
299 301
300 private void loadUI(){ 302 private void loadUI(){
301 tvStep.setText(String.valueOf(mTagetInfo.getSteps())); 303 tvStep.setText(String.valueOf(mTagetInfo.getSteps()));
302 tvRemain.setText(String.valueOf(mTagetInfo.getStepRemain())); 304 tvRemain.setText(String.valueOf(mTagetInfo.getStepRemain()));
303 tvRateDone.setText(mContext.getResources().getString(R.string.percent_unit, mTagetInfo.getCompletePercent())); 305 tvRateDone.setText(mContext.getResources().getString(R.string.percent_unit, mTagetInfo.getCompletePercent()));
304 } 306 }
305 307
306 private void getNews(Date date){ 308 private void getNews(Date date){
307 309
308 ApiServices.getNews(date, new LLAPIManagerListener() { 310 ApiServices.getNews(date, new LLAPIManagerListener() {
309 @Override 311 @Override
310 public void onError(Error error) { 312 public void onError(Error error) {
311 Debug.error("Get data news error"); 313 Debug.error("Get data news error");
312 } 314 }
313 315
314 @Override 316 @Override
315 public void onSuccess(String json) { 317 public void onSuccess(String json) {
316 Debug.error("Get data news success"); 318 Debug.error("Get data news success");
317 loadNewsDone(json); 319 loadNewsDone(json);
318 } 320 }
319 321
320 @Override 322 @Override
321 public void onSuccess(JSONObject object) { 323 public void onSuccess(JSONObject object) {
322 Debug.error("Get data news success"); 324 Debug.error("Get data news success");
323 } 325 }
324 }); 326 });
325 } 327 }
326 328
327 private void loadNewsDone(String jsonString) { 329 private void loadNewsDone(String jsonString) {
328 330
329 List<NoticeInfo> contentList = new ArrayList<>(); 331 List<NoticeInfo> contentList = new ArrayList<>();
330 JSONObject jsonObject = null; 332 JSONObject jsonObject = null;
331 try { 333 try {
332 jsonObject = new JSONObject(jsonString); 334 jsonObject = new JSONObject(jsonString);
333 int status = jsonObject.optInt("status"); 335 int status = jsonObject.optInt("status");
334 if (status == 1) { 336 if (status == 1) {
335 JSONObject jsonResult = jsonObject.optJSONObject("result"); 337 JSONObject jsonResult = jsonObject.optJSONObject("result");
336 JSONArray listNotice = jsonResult.getJSONArray("listNotice"); 338 JSONArray listNotice = jsonResult.getJSONArray("listNotice");
337 339
338 if (listNotice != null) { 340 if (listNotice != null) {
339 341
340 for (int i = 0; i < listNotice.length(); i++) { 342 for (int i = 0; i < listNotice.length(); i++) {
341 JSONObject obContent = (JSONObject) listNotice.get(i); 343 JSONObject obContent = (JSONObject) listNotice.get(i);
342 String content = obContent.optString("notice_content"); 344 String content = obContent.optString("notice_content");
343 Debug.normal("Content: " + content); 345 Debug.normal("Content: " + content);
344 contentList.add(new NoticeInfo(i+1,content)); 346 contentList.add(new NoticeInfo(i+1,content));
345 } 347 }
346 } 348 }
347 349
348 } 350 }
349 } catch (JSONException e) { 351 } catch (JSONException e) {
350 e.printStackTrace(); 352 e.printStackTrace();
351 } 353 }
352 354
353 addNews(contentList); 355 addNews(contentList);
354 } 356 }
355 357
356 private void addNews(List<NoticeInfo> noticeInfos){ 358 private void addNews(List<NoticeInfo> noticeInfos){
357 if (noticeInfos != null && noticeInfos.size() >0){ 359 if (noticeInfos != null && noticeInfos.size() >0){
358 mNoticeAdapter = new NoticeAdapter(mContext, noticeInfos); 360 mNoticeAdapter = new NoticeAdapter(mContext, noticeInfos);
359 lvNotice.setAdapter(mNoticeAdapter); 361 lvNotice.setAdapter(mNoticeAdapter);
360 lvNotice.setExpanded(true); 362 lvNotice.setExpanded(true);
361 }else { 363 }else {
362 lvNotice.setAdapter(null); 364 lvNotice.setAdapter(null);
363 } 365 }
364 } 366 }
365 367
366 368
367 369
368 @Override 370 @Override
369 public void onAttach(Context context) { 371 public void onAttach(Context context) {
370 super.onAttach(context); 372 super.onAttach(context);
371 373
372 } 374 }
373 375
374 376
375 @Override 377 @Override
376 public void onSaveData() { 378 public void onSaveData() {
377 379
378 } 380 }
379 381
380 @Override 382 @Override
381 public void onInvalidate(boolean isInit) { 383 public void onInvalidate(boolean isInit) {
382 initData(); 384 initData();
383 } 385 }
384 386
385 @Override 387 @Override
386 public void onViewStateRestored(@Nullable Bundle savedInstanceState) { 388 public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
387 super.onViewStateRestored(savedInstanceState); 389 super.onViewStateRestored(savedInstanceState);
388 390
389 initData(); 391 initData();
390 } 392 }
391 393
392 394
393 @Override 395 @Override
394 public void onActivityResult(int requestCode, int resultCode, Intent data) { 396 public void onActivityResult(int requestCode, int resultCode, Intent data) {
395 super.onActivityResult(requestCode, resultCode, data); 397 super.onActivityResult(requestCode, resultCode, data);
396 398
397 } 399 }
398 400
399 401
400 402
401 } 403 }
402 404
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.Manifest;
3 import android.app.ProgressDialog; 4 import android.app.ProgressDialog;
4 import android.content.DialogInterface; 5 import android.content.DialogInterface;
5 import android.content.Intent; 6 import android.content.Intent;
7 import android.content.pm.PackageManager;
6 import android.net.Uri; 8 import android.net.Uri;
9 import android.os.Build;
7 import android.os.Bundle; 10 import android.os.Bundle;
8 import android.os.Handler; 11 import android.os.Handler;
12 import android.support.v4.app.ActivityCompat;
13 import android.support.v4.content.ContextCompat;
9 import android.support.v7.app.AlertDialog; 14 import android.support.v7.app.AlertDialog;
15 import android.widget.Toast;
10 16
11 import com.dinhcv.lifelogpedometer.R; 17 import com.dinhcv.lifelogpedometer.R;
12 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; 18 import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener;
13 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; 19 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
14 import com.dinhcv.lifelogpedometer.portal.ApiServices; 20 import com.dinhcv.lifelogpedometer.portal.ApiServices;
15 import com.dinhcv.lifelogpedometer.portal.LLAPIManager; 21 import com.dinhcv.lifelogpedometer.portal.LLAPIManager;
16 import com.dinhcv.lifelogpedometer.utils.Debug; 22 import com.dinhcv.lifelogpedometer.utils.Debug;
17 23
18 import org.json.JSONArray; 24 import org.json.JSONArray;
19 import org.json.JSONObject; 25 import org.json.JSONObject;
20 26
21 27
22 public class WelcomeActivity extends ActivityBase implements Runnable { 28 public class WelcomeActivity extends ActivityBase implements Runnable {
23 private boolean isRefresh = false; 29 private boolean isRefresh = false;
30 private static final int PERMISSIONS_REQUEST = 999;
31
24 @Override 32 @Override
25 protected void onCreate(Bundle savedInstanceState) { 33 protected void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState); 34 super.onCreate(savedInstanceState);
27 setContentView(R.layout.activity_welcome); 35 setContentView(R.layout.activity_welcome);
28 checkRefreshToken(); 36 checkPermission();
29 } 37 }
30 38
31 private void checkRefreshToken(){ 39 private void checkRefreshToken(){
32 int id = Setting.getUserIdSharepre(WelcomeActivity.this); 40 int id = Setting.getUserIdSharepre(WelcomeActivity.this);
33 Debug.normal("String id: "+ id); 41 Debug.normal("String id: "+ id);
34 if (id != 0){ 42 if (id != 0){
35 handleRefreshToken(id); 43 handleRefreshToken(id);
36 }else { 44 }else {
37 refeshDone(); 45 refeshDone();
38 } 46 }
39 } 47 }
40 48
41 49
42 private void handleRefreshToken(int id) { 50 private void handleRefreshToken(int id) {
43 51
44 ApiServices.refreshToken(WelcomeActivity.this, id, new LLAPIManagerListener() { 52 ApiServices.refreshToken(WelcomeActivity.this, id, new LLAPIManagerListener() {
45 @Override 53 @Override
46 public void onError(Error error) { 54 public void onError(Error error) {
47 Debug.error("Version JSON result: ERROR " + error); 55 Debug.error("Version JSON result: ERROR " + error);
48 String err = getResources().getString(R.string.login_error); 56 String err = getResources().getString(R.string.login_error);
49 isRefresh = false; 57 isRefresh = false;
50 refeshDone(); 58 refeshDone();
51 } 59 }
52 60
53 @Override 61 @Override
54 public void onSuccess(String json) { 62 public void onSuccess(String json) {
55 Debug.warn("Version JSON result: " + json.toString()); 63 Debug.warn("Version JSON result: " + json.toString());
56 isRefresh = true; 64 isRefresh = true;
57 refeshDone(); 65 refeshDone();
58 } 66 }
59 67
60 @Override 68 @Override
61 public void onSuccess(JSONObject object) { 69 public void onSuccess(JSONObject object) {
62 Debug.warn("Version JSON object result: Success"); 70 Debug.warn("Version JSON object result: Success");
63 isRefresh = true; 71 isRefresh = true;
64 refeshDone(); 72 refeshDone();
65 } 73 }
66 }); 74 });
67 } 75 }
68 76
69 private void refeshDone(){ 77 private void refeshDone(){
70 Handler handler = new Handler(); 78 Handler handler = new Handler();
71 handler.postDelayed(WelcomeActivity.this, 2000); 79 handler.postDelayed(WelcomeActivity.this, 2000);
72 } 80 }
73 81
74 private void notifyErr(String err){ 82 private void notifyErr(String err){
75 AlertDialog.Builder alertDialog = new AlertDialog.Builder(WelcomeActivity.this); 83 AlertDialog.Builder alertDialog = new AlertDialog.Builder(WelcomeActivity.this);
76 alertDialog.setMessage(err); 84 alertDialog.setMessage(err);
77 alertDialog.setCancelable(false); 85 alertDialog.setCancelable(false);
78 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 86 alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
79 @Override 87 @Override
80 public void onClick(DialogInterface dialog, int which) { 88 public void onClick(DialogInterface dialog, int which) {
81 finish(); 89 finish();
82 } 90 }
83 }); 91 });
84 AlertDialog alert = alertDialog.create(); 92 AlertDialog alert = alertDialog.create();
85 alert.show(); 93 alert.show();
86 } 94 }
87 95
88 @Override 96 @Override
89 public void run() { 97 public void run() {
90 // go to main screen 98 // go to main screen
91 if ( isRefresh) { 99 if ( isRefresh) {
92 gotoActivity(PedometerActivity.class); 100 gotoActivity(PedometerActivity.class);
93 } else { 101 } else {
94 // Bundle bundle = new Bundle(); 102 // Bundle bundle = new Bundle();
95 // bundle.putString(Const.URL, url); 103 // bundle.putString(Const.URL, url);
96 gotoActivity(LoginActivity.class); 104 gotoActivity(LoginActivity.class);
97 } 105 }
98 finish(); 106 finish();
99 } 107 }
100 108
101 @Override 109 @Override
102 protected void onResume() { 110 protected void onResume() {
103 super.onResume(); 111 super.onResume();
112 }
113
114 private void checkPermission() {
115 // Check all permission in android 6.0
116 if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
117 if ((ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
118 == PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
119 == PackageManager.PERMISSION_GRANTED)) {
120 checkRefreshToken();
121
122 } else {
123 // Requset permisson of device
124 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission
125 .ACCESS_COARSE_LOCATION)
126 && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest
127 .permission.ACCESS_FINE_LOCATION)) {
128 ActivityCompat.requestPermissions(this,
129 new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
130 Manifest.permission.ACCESS_FINE_LOCATION},
131 PERMISSIONS_REQUEST);
132
133 } else {
134 ActivityCompat.requestPermissions(this,
135 new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
136 Manifest.permission.ACCESS_FINE_LOCATION},
137 PERMISSIONS_REQUEST);
138 }
139 }
140
141 } else {
142 checkRefreshToken();
143 }
144 }
145
146 @Override
147 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[]
148 grantResults) {
149 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
150
151 if (requestCode == PERMISSIONS_REQUEST) {
152 if (grantResults.length > 0) {
153 if (grantResults[0] == PackageManager.PERMISSION_GRANTED
154 && grantResults[1] == PackageManager.PERMISSION_GRANTED
155 && grantResults[2] == PackageManager.PERMISSION_GRANTED) {
156 checkRefreshToken();
157 return;
158 }
159 } else {
160 Toast.makeText(this, "Permission was not granted ", Toast.LENGTH_SHORT).show();
161 finish();
162 }
163 } else {
164 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
165 }
104 } 166 }
105 } 167 }
106 168
app/src/main/java/com/dinhcv/lifelogpedometer/adapter/RankingAdapter.java
1 package com.dinhcv.lifelogpedometer.adapter; 1 package com.dinhcv.lifelogpedometer.adapter;
2 2
3 import android.app.Activity; 3 import android.app.Activity;
4 import android.support.v7.widget.RecyclerView; 4 import android.support.v7.widget.RecyclerView;
5 import android.view.LayoutInflater; 5 import android.view.LayoutInflater;
6 import android.view.View; 6 import android.view.View;
7 import android.view.ViewGroup; 7 import android.view.ViewGroup;
8 import android.widget.ImageView; 8 import android.widget.ImageView;
9 import android.widget.TextView; 9 import android.widget.TextView;
10 10
11 import com.dinhcv.lifelogpedometer.R; 11 import com.dinhcv.lifelogpedometer.R;
12 import com.dinhcv.lifelogpedometer.model.structure.pojo.RankingInfo; 12 import com.dinhcv.lifelogpedometer.model.structure.pojo.RankingInfo;
13 import com.dinhcv.lifelogpedometer.network.ApiUtils; 13 import com.dinhcv.lifelogpedometer.network.ApiUtils;
14 import com.dinhcv.lifelogpedometer.utils.Utils; 14 import com.dinhcv.lifelogpedometer.utils.Utils;
15 import com.squareup.picasso.Picasso; 15 import com.squareup.picasso.Picasso;
16 16
17 import java.util.ArrayList; 17 import java.util.ArrayList;
18 import java.util.List; 18 import java.util.List;
19 19
20 import butterknife.BindView; 20 import butterknife.BindView;
21 import butterknife.ButterKnife; 21 import butterknife.ButterKnife;
22 22
23 /** 23 /**
24 * Created by Admin on 8/17/2017. 24 * Created by Admin on 8/17/2017.
25 */ 25 */
26 26
27 public class RankingAdapter extends RecyclerView.Adapter<RankingAdapter.MyViewHolder> { 27 public class RankingAdapter extends RecyclerView.Adapter<RankingAdapter.MyViewHolder> {
28 private List<RankingInfo> mRankingInfoList = new ArrayList<>(); 28 private List<RankingInfo> mRankingInfoList = new ArrayList<>();
29 private Activity mActivity; 29 private Activity mActivity;
30 30
31 public class MyViewHolder extends RecyclerView.ViewHolder { 31 public class MyViewHolder extends RecyclerView.ViewHolder {
32 @BindView(R.id.tv_position) 32 @BindView(R.id.tv_position)
33 TextView mTvPosition; 33 TextView mTvPosition;
34 @BindView(R.id.imv_user_icon) 34 @BindView(R.id.imv_user_icon)
35 ImageView mImvUserIcon; 35 ImageView mImvUserIcon;
36 @BindView(R.id.tv_time) 36 @BindView(R.id.tv_time)
37 TextView mTvTime; 37 TextView mTvTime;
38 @BindView(R.id.tv_steps) 38 @BindView(R.id.tv_steps)
39 TextView mTvSteps; 39 TextView mTvSteps;
40 @BindView(R.id.tv_distance) 40 @BindView(R.id.tv_distance)
41 TextView mTvDistance; 41 TextView mTvDistance;
42 @BindView(R.id.imv_position) 42 @BindView(R.id.imv_position)
43 ImageView mImvPosition; 43 ImageView mImvPosition;
44 44
45 public MyViewHolder(View view) { 45 public MyViewHolder(View view) {
46 super(view); 46 super(view);
47 ButterKnife.bind(this, view); 47 ButterKnife.bind(this, view);
48 } 48 }
49 } 49 }
50 50
51 public RankingAdapter(Activity activity, List<RankingInfo> list) { 51 public RankingAdapter(Activity activity, List<RankingInfo> list) {
52 mActivity = activity; 52 mActivity = activity;
53 mRankingInfoList.clear(); 53 mRankingInfoList.clear();
54 mRankingInfoList.addAll(list); 54 mRankingInfoList.addAll(list);
55 } 55 }
56 56
57 public void updateData(List<RankingInfo> list) { 57 public void updateData(List<RankingInfo> list) {
58 mRankingInfoList.clear(); 58 mRankingInfoList.clear();
59 mRankingInfoList.addAll(list); 59 mRankingInfoList.addAll(list);
60 } 60 }
61 61
62 public void clearData() { 62 public void clearData() {
63 mRankingInfoList.clear(); 63 mRankingInfoList.clear();
64 } 64 }
65 65
66 @Override 66 @Override
67 public RankingAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 67 public RankingAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
68 View itemView = LayoutInflater.from(parent.getContext()) 68 View itemView = LayoutInflater.from(parent.getContext())
69 .inflate(R.layout.layout_rank_row, parent, false); 69 .inflate(R.layout.layout_rank_row, parent, false);
70 70
71 return new RankingAdapter.MyViewHolder(itemView); 71 return new RankingAdapter.MyViewHolder(itemView);
72 } 72 }
73 73
74 @Override 74 @Override
75 public void onBindViewHolder(RankingAdapter.MyViewHolder holder, int position) { 75 public void onBindViewHolder(RankingAdapter.MyViewHolder holder, int position) {
76 RankingInfo rankingInfo = mRankingInfoList.get(position); 76 RankingInfo rankingInfo = mRankingInfoList.get(position);
77 holder.mTvPosition.setText(rankingInfo.getRank()+""); 77 holder.mTvPosition.setText(rankingInfo.getRank()+"");
78 holder.mTvTime.setText(Utils.convertSecond2HourMinSecString(rankingInfo.getTime())); 78 holder.mTvTime.setText(Utils.convertSecond2HourMinSecString(rankingInfo.getTime()));
79 holder.mTvSteps.setText(rankingInfo.getSteps() + " ๆญฉ"); 79 holder.mTvSteps.setText(rankingInfo.getSteps() + " ๆญฉ");
80 holder.mTvDistance.setText(rankingInfo.getDistance() + " km"); 80 holder.mTvDistance.setText(rankingInfo.getDistance() + " km");
81 if (rankingInfo.getProfileImage() != null && !rankingInfo.getProfileImage().toString().isEmpty()) { 81 if (rankingInfo.getProfileImage() != null && !rankingInfo.getProfileImage().toString().isEmpty()) {
82 Picasso.with(mActivity).load(ApiUtils.BASE_URL + rankingInfo.getProfileImage().toString()).into( 82 Picasso.with(mActivity).load(ApiUtils.BASE_URL + rankingInfo.getProfileImage().toString()).into(
83 holder.mImvUserIcon); 83 holder.mImvUserIcon);
84 } 84 }
85 switch (rankingInfo.getRank()) { 85 switch (rankingInfo.getRank()) {
86 case 1: 86 case 1:
87 holder.mImvPosition.setBackground(Utils.getDrawableWrapper(mActivity, R.drawable.ic_first)); 87 holder.mImvPosition.setBackground(Utils.getDrawableWrapper(mActivity, R.drawable.no1));
88 break; 88 break;
89 case 2: 89 case 2:
90 holder.mImvPosition.setBackground(Utils.getDrawableWrapper(mActivity, R.drawable.ic_second)); 90 holder.mImvPosition.setBackground(Utils.getDrawableWrapper(mActivity, R.drawable.no2));
91 break; 91 break;
92 case 3: 92 case 3:
93 holder.mImvPosition.setBackground(Utils.getDrawableWrapper(mActivity, R.drawable.ic_third)); 93 holder.mImvPosition.setBackground(Utils.getDrawableWrapper(mActivity, R.drawable.no3));
94 break; 94 break;
95 } 95 }
96 } 96 }
97 97
98 @Override 98 @Override
99 public int getItemCount() { 99 public int getItemCount() {
100 return mRankingInfoList.size(); 100 return mRankingInfoList.size();
101 } 101 }
102 } 102 }
103 103
app/src/main/java/com/dinhcv/lifelogpedometer/customview/CircularImageView.java
File was created 1 package com.dinhcv.lifelogpedometer.customview;
2
3
4 import android.annotation.SuppressLint;
5 import android.content.Context;
6 import android.graphics.Bitmap;
7 import android.graphics.BitmapShader;
8 import android.graphics.Canvas;
9 import android.graphics.Color;
10 import android.graphics.Matrix;
11 import android.graphics.Paint;
12 import android.graphics.Shader;
13 import android.graphics.drawable.BitmapDrawable;
14 import android.graphics.drawable.Drawable;
15 import android.util.AttributeSet;
16 import android.util.Log;
17 import android.widget.ImageView;
18
19
20 @SuppressLint("AppCompatCustomView")
21 public class CircularImageView extends ImageView {
22 private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;
23
24 private static final float DEFAULT_BORDER_WIDTH = 4;
25 private static final float DEFAULT_SHADOW_RADIUS = 8.0f;
26 private float borderWidth;
27 private int canvasSize;
28 private float shadowRadius;
29 private int shadowColor = Color.BLACK;
30
31 private Bitmap image;
32 private Drawable drawable;
33 private Paint paint;
34 private Paint paintBorder;
35
36 public CircularImageView(final Context context) {
37 this(context, null);
38 }
39
40 public CircularImageView(Context context, AttributeSet attrs) {
41 this(context, attrs, 0);
42 }
43
44 public CircularImageView(Context context, AttributeSet attrs, int defStyleAttr) {
45 super(context, attrs, defStyleAttr);
46 init(context, attrs, defStyleAttr);
47 }
48
49 private void init(Context context, AttributeSet attrs, int defStyleAttr) {
50 paint = new Paint();
51 paint.setAntiAlias(true);
52
53 paintBorder = new Paint();
54 paintBorder.setAntiAlias(true);
55 }
56
57 public void setBorderWidth(float borderWidth) {
58 this.borderWidth = borderWidth;
59 requestLayout();
60 invalidate();
61 }
62
63 public void setBorderColor(int borderColor) {
64 if (paintBorder != null)
65 paintBorder.setColor(borderColor);
66 invalidate();
67 }
68
69 public void addShadow() {
70 if (shadowRadius == 0)
71 shadowRadius = DEFAULT_SHADOW_RADIUS;
72 drawShadow(shadowRadius, shadowColor);
73 invalidate();
74 }
75
76 public void setShadowRadius(float shadowRadius) {
77 drawShadow(shadowRadius, shadowColor);
78 invalidate();
79 }
80
81 public void setShadowColor(int shadowColor) {
82 drawShadow(shadowRadius, shadowColor);
83 invalidate();
84 }
85
86 @Override
87 public ScaleType getScaleType() {
88 return SCALE_TYPE;
89 }
90
91 @Override
92 public void setScaleType(ScaleType scaleType) {
93 if (scaleType != SCALE_TYPE) {
94 throw new IllegalArgumentException(String.format("ScaleType %s not supported. ScaleType.CENTER_CROP is used by default. So you don't need to use ScaleType.", scaleType));
95 }
96 }
97
98 @Override
99 public void onDraw(Canvas canvas) {
100 loadBitmap();
101
102 if (image == null)
103 return;
104
105 if (!isInEditMode()) {
106 canvasSize = canvas.getWidth();
107 if (canvas.getHeight() < canvasSize) {
108 canvasSize = canvas.getHeight();
109 }
110 }
111
112 int circleCenter = (int) (canvasSize - (borderWidth * 2)) / 2;
113 canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth - (shadowRadius + shadowRadius / 2), paintBorder);
114 canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter - (shadowRadius + shadowRadius / 2), paint);
115 }
116
117 private void loadBitmap() {
118 if (this.drawable == getDrawable())
119 return;
120
121 this.drawable = getDrawable();
122 this.image = drawableToBitmap(this.drawable);
123 updateShader();
124 }
125
126 @Override
127 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
128 super.onSizeChanged(w, h, oldw, oldh);
129 canvasSize = w;
130 if (h < canvasSize)
131 canvasSize = h;
132 if (image != null)
133 updateShader();
134 }
135
136 private void drawShadow(float shadowRadius, int shadowColor) {
137 this.shadowRadius = shadowRadius;
138 this.shadowColor = shadowColor;
139 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
140 setLayerType(LAYER_TYPE_SOFTWARE, paintBorder);
141 }
142 paintBorder.setShadowLayer(shadowRadius, 0.0f, shadowRadius / 2, shadowColor);
143 }
144
145 private void updateShader() {
146 if (image == null)
147 return;
148
149 image = cropBitmap(image);
150
151 BitmapShader shader = new BitmapShader(image, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
152
153 Matrix matrix = new Matrix();
154 matrix.setScale((float) canvasSize / (float) image.getWidth(), (float) canvasSize / (float) image.getHeight());
155 shader.setLocalMatrix(matrix);
156
157 paint.setShader(shader);
158 }
159
160 private Bitmap cropBitmap(Bitmap bitmap) {
161 Bitmap bmp;
162 if (bitmap.getWidth() >= bitmap.getHeight()) {
163 bmp = Bitmap.createBitmap(
164 bitmap,
165 bitmap.getWidth() / 2 - bitmap.getHeight() / 2,
166 0,
167 bitmap.getHeight(), bitmap.getHeight());
168 } else {
169 bmp = Bitmap.createBitmap(
170 bitmap,
171 0,
172 bitmap.getHeight() / 2 - bitmap.getWidth() / 2,
173 bitmap.getWidth(), bitmap.getWidth());
174 }
175 return bmp;
176 }
177
178 private Bitmap drawableToBitmap(Drawable drawable) {
179 if (drawable == null) {
180 return null;
181 } else if (drawable instanceof BitmapDrawable) {
182 return ((BitmapDrawable) drawable).getBitmap();
183 }
184
185 int intrinsicWidth = drawable.getIntrinsicWidth();
186 int intrinsicHeight = drawable.getIntrinsicHeight();
187
188 if (!(intrinsicWidth > 0 && intrinsicHeight > 0))
189 return null;
190
191 try {
192 Bitmap bitmap = Bitmap.createBitmap(intrinsicWidth, intrinsicHeight, Bitmap.Config.ARGB_8888);
193 Canvas canvas = new Canvas(bitmap);
194 drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
195 drawable.draw(canvas);
196 return bitmap;
197 } catch (OutOfMemoryError e) {
198 Log.e(getClass().toString(), "Encountered OutOfMemoryError while generating bitmap!");
199 return null;
200 }
201 }
202
203 @Override
204 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
205 int width = measureWidth(widthMeasureSpec);
206 int height = measureHeight(heightMeasureSpec);
207 setMeasuredDimension(width, height);
208 }
209
210 private int measureWidth(int measureSpec) {
211 int result;
212 int specMode = MeasureSpec.getMode(measureSpec);
213 int specSize = MeasureSpec.getSize(measureSpec);
214
215 if (specMode == MeasureSpec.EXACTLY) {
216 result = specSize;
217 } else if (specMode == MeasureSpec.AT_MOST) {
218 result = specSize;
219 } else {
220 result = canvasSize;
221 }
222
223 return result;
224 }
225
226 private int measureHeight(int measureSpecHeight) {
227 int result;
228 int specMode = MeasureSpec.getMode(measureSpecHeight);
229 int specSize = MeasureSpec.getSize(measureSpecHeight);
230
231 if (specMode == MeasureSpec.EXACTLY) {
232 result = specSize;
233 } else if (specMode == MeasureSpec.AT_MOST) {
234 result = specSize;
235 } else {
236 result = canvasSize;
237 }
238
239 return (result + 2);
240 }
241 }
app/src/main/res/drawable/back_ic.PNG

1.95 KB | W: | H:

7.72 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/src/main/res/drawable/goout_ic.PNG