Commit 6b038e4433703087576aaa067062438a7616b652
1 parent
ba7d7409b2
Exists in
master
and in
1 other branch
update
Showing 50 changed files with 575 additions and 135 deletions Inline Diff
- .idea/modules.xml
- app/build.gradle
- app/src/main/AndroidManifest.xml
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/HistoryContentFragment.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/MapFragment.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/PedometerActivity.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/RankFragment.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/TopDateFragment.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/WelcomeActivity.java
- app/src/main/java/com/dinhcv/lifelogpedometer/adapter/RankingAdapter.java
- app/src/main/java/com/dinhcv/lifelogpedometer/customview/CircularImageView.java
- app/src/main/res/drawable/back_ic.PNG
- app/src/main/res/drawable/goout_ic.PNG
- app/src/main/res/drawable/home_ic.PNG
- app/src/main/res/drawable/list_ic.PNG
- app/src/main/res/drawable/next_ic.PNG
- app/src/main/res/drawable/step_type_enabled.xml
- app/src/main/res/drawable/tab_color_selector.xml
- app/src/main/res/drawable/test_selector.xml
- app/src/main/res/drawable/walking_ic.PNG
- app/src/main/res/layout/activity_pedometer.xml
- app/src/main/res/layout/customtab.xml
- app/src/main/res/layout/fragment_history.xml
- app/src/main/res/layout/fragment_history_content.xml
- app/src/main/res/layout/fragment_history_detail.xml
- app/src/main/res/layout/fragment_map.xml
- app/src/main/res/layout/fragment_rank.xml
- app/src/main/res/layout/fragment_sns.xml
- app/src/main/res/layout/fragment_sns_create_group.xml
- app/src/main/res/layout/fragment_sns_detail.xml
- app/src/main/res/layout/fragment_sns_my_group.xml
- app/src/main/res/layout/fragment_sns_search.xml
- app/src/main/res/layout/fragment_sns_topic.xml
- app/src/main/res/layout/fragment_top.xml
- app/src/main/res/layout/fragment_top_date.xml
- app/src/main/res/layout/fragment_top_today.xml
- app/src/main/res/layout/history_page_7_content.xml
- app/src/main/res/layout/layout_rank_row.xml
- app/src/main/res/layout/layout_sns_member_row.xml
- app/src/main/res/layout/layout_sns_search_row.xml
- app/src/main/res/layout/layout_sns_topic_row.xml
- app/src/main/res/layout/layout_toolbar.xml
- app/src/main/res/layout/notice_list_item.xml
- app/src/main/res/layout/type_step.xml
- app/src/main/res/mipmap-hdpi/ic_launcher.png
- app/src/main/res/mipmap-mdpi/ic_launcher.png
- app/src/main/res/mipmap-xhdpi/ic_launcher.png
- app/src/main/res/mipmap-xxhdpi/ic_launcher.png
- app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
- app/src/main/res/values/colors.xml
.idea/modules.xml
| 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> |
app/build.gradle
| 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
app/src/main/res/drawable/goout_ic.PNG