Commit cb2ba72a7e49da54339fed07eec14d148bd173f2
1 parent
383e854984
Exists in
master
and in
1 other branch
update handle count step
Showing 8 changed files with 46 additions and 24 deletions Inline Diff
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/TopFragment.java
- app/src/main/java/com/dinhcv/lifelogpedometer/activity/TopTodayFragment.java
- app/src/main/res/layout/fragment_top_today.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/java/com/dinhcv/lifelogpedometer/activity/TopFragment.java
| 1 | package com.dinhcv.lifelogpedometer.activity; | 1 | package com.dinhcv.lifelogpedometer.activity; |
| 2 | 2 | ||
| 3 | import android.content.Context; | 3 | import android.content.Context; |
| 4 | import android.os.Bundle; | 4 | import android.os.Bundle; |
| 5 | import android.support.annotation.Nullable; | 5 | import android.support.annotation.Nullable; |
| 6 | import android.support.v4.app.FragmentManager; | 6 | import android.support.v4.app.FragmentManager; |
| 7 | import android.support.v4.app.FragmentTransaction; | 7 | import android.support.v4.app.FragmentTransaction; |
| 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.FrameLayout; | 11 | import android.widget.FrameLayout; |
| 12 | 12 | ||
| 13 | import com.dinhcv.lifelogpedometer.R; | 13 | import com.dinhcv.lifelogpedometer.R; |
| 14 | import com.dinhcv.lifelogpedometer.utils.Debug; | ||
| 14 | 15 | ||
| 15 | public class TopFragment extends FragmentBase implements SettingFragmentPresenter { | 16 | public class TopFragment extends FragmentBase implements SettingFragmentPresenter { |
| 16 | public enum TopFragmentTag { | 17 | public enum TopFragmentTag { |
| 17 | TOP_DATE, | 18 | TOP_DATE, |
| 18 | TOP_TODAY, | 19 | TOP_TODAY, |
| 19 | } | 20 | } |
| 20 | 21 | ||
| 21 | private FragmentTransaction mFragmentTransaction; | 22 | private FragmentTransaction mFragmentTransaction; |
| 22 | private FragmentManager mFragmentManager; | 23 | private FragmentManager mFragmentManager; |
| 23 | 24 | ||
| 24 | private View mRootView; | 25 | private View mRootView; |
| 25 | private FrameLayout mTopLayout; | 26 | private FrameLayout mTopLayout; |
| 26 | private TopDateFragment mTopDateFragment; | 27 | private TopDateFragment mTopDateFragment; |
| 27 | private TopTodayFragment mTopTodayFragment; | 28 | private TopTodayFragment mTopTodayFragment; |
| 28 | 29 | ||
| 29 | public static final String TOP_DATE_TAG = "top_date"; | 30 | public static final String TOP_DATE_TAG = "top_date"; |
| 30 | public static final String TOP_TODAY_TAG = "top_today"; | 31 | public static final String TOP_TODAY_TAG = "top_today"; |
| 31 | 32 | ||
| 32 | public TopFragmentTag mCurrentFragment = TopFragmentTag.TOP_DATE; | 33 | public TopFragmentTag mCurrentFragment = TopFragmentTag.TOP_DATE; |
| 33 | 34 | ||
| 34 | @Override | 35 | @Override |
| 35 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle | 36 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle |
| 36 | savedInstanceState) { | 37 | savedInstanceState) { |
| 37 | // Inflate the layout for this fragment | 38 | // Inflate the layout for this fragment |
| 38 | mRootView = inflater.inflate(R.layout.fragment_top, container, false); | 39 | mRootView = inflater.inflate(R.layout.fragment_top, container, false); |
| 39 | mFragmentManager = getFragmentManager(); | 40 | mFragmentManager = getFragmentManager(); |
| 40 | mFragmentTransaction = mFragmentManager.beginTransaction(); | 41 | mFragmentTransaction = mFragmentManager.beginTransaction(); |
| 41 | 42 | ||
| 42 | initView(); | 43 | initView(); |
| 43 | initData(); | 44 | initData(); |
| 44 | 45 | ||
| 45 | return mRootView; | 46 | return mRootView; |
| 46 | } | 47 | } |
| 47 | 48 | ||
| 48 | /** | 49 | /** |
| 49 | */ | 50 | */ |
| 50 | private void initView() { | 51 | private void initView() { |
| 51 | mTopLayout = (FrameLayout) mRootView.findViewById(R.id.layout_top); | 52 | mTopLayout = (FrameLayout) mRootView.findViewById(R.id.layout_top); |
| 52 | 53 | ||
| 53 | mTopDateFragment = new TopDateFragment(); | 54 | mTopDateFragment = new TopDateFragment(); |
| 54 | mTopDateFragment.setRootFragment(this); | 55 | mTopDateFragment.setRootFragment(this); |
| 55 | mTopTodayFragment = new TopTodayFragment(); | 56 | mTopTodayFragment = new TopTodayFragment(); |
| 56 | mTopTodayFragment.setRootFragment(this); | 57 | mTopTodayFragment.setRootFragment(this); |
| 57 | 58 | ||
| 58 | showContentFragment(); | 59 | showContentFragment(); |
| 59 | } | 60 | } |
| 60 | 61 | ||
| 61 | public void showContentFragment() { | 62 | public void showContentFragment() { |
| 62 | ((PedometerActivity) getActivity()).setVisibleIconHome(false); | 63 | ((PedometerActivity) getActivity()).setVisibleIconHome(false); |
| 63 | mCurrentFragment = TopFragmentTag.TOP_DATE; | 64 | mCurrentFragment = TopFragmentTag.TOP_DATE; |
| 64 | mFragmentTransaction = mFragmentManager.beginTransaction(); | 65 | mFragmentTransaction = mFragmentManager.beginTransaction(); |
| 65 | mFragmentTransaction.replace(mTopLayout.getId(), mTopDateFragment, TOP_DATE_TAG); | 66 | mFragmentTransaction.replace(mTopLayout.getId(), mTopDateFragment, TOP_DATE_TAG); |
| 66 | mFragmentTransaction.commit(); | 67 | mFragmentTransaction.commit(); |
| 67 | } | 68 | } |
| 68 | 69 | ||
| 69 | public void showDetailFragment() { | 70 | public void showDetailFragment() { |
| 70 | ((PedometerActivity) getActivity()).setVisibleIconHome(true); | 71 | ((PedometerActivity) getActivity()).setVisibleIconHome(true); |
| 71 | mCurrentFragment = TopFragmentTag.TOP_TODAY; | 72 | mCurrentFragment = TopFragmentTag.TOP_TODAY; |
| 72 | mFragmentTransaction = mFragmentManager.beginTransaction(); | 73 | mFragmentTransaction = mFragmentManager.beginTransaction(); |
| 73 | mFragmentTransaction.replace(mTopLayout.getId(), mTopTodayFragment, TOP_TODAY_TAG); | 74 | mFragmentTransaction.replace(mTopLayout.getId(), mTopTodayFragment, TOP_TODAY_TAG); |
| 74 | mFragmentTransaction.commit(); | 75 | mFragmentTransaction.commit(); |
| 75 | } | 76 | } |
| 76 | 77 | ||
| 77 | public void clickBackToHome(){ | 78 | public void clickBackToHome(){ |
| 78 | switch (mCurrentFragment) { | 79 | switch (mCurrentFragment) { |
| 79 | case TOP_DATE: | 80 | case TOP_DATE: |
| 80 | break; | 81 | break; |
| 81 | case TOP_TODAY: | 82 | case TOP_TODAY: |
| 82 | showContentFragment(); | 83 | showContentFragment(); |
| 83 | break; | 84 | break; |
| 84 | default: | 85 | default: |
| 85 | break; | 86 | break; |
| 86 | } | 87 | } |
| 87 | } | 88 | } |
| 88 | 89 | ||
| 89 | /** | 90 | /** |
| 90 | * Init data | 91 | * Init data |
| 91 | */ | 92 | */ |
| 92 | private void initData() { | 93 | private void initData() { |
| 93 | 94 | Debug.normal("Current fragment : "+ mCurrentFragment); | |
| 95 | if (mCurrentFragment == TopFragmentTag.TOP_DATE){ | ||
| 96 | ((PedometerActivity) getActivity()).setVisibleIconHome(false); | ||
| 97 | }else { | ||
| 98 | ((PedometerActivity) getActivity()).setVisibleIconHome(true); | ||
| 99 | } | ||
| 94 | } | 100 | } |
| 95 | 101 | ||
| 96 | @Override | 102 | @Override |
| 97 | public void onAttach(Context context) { | 103 | public void onAttach(Context context) { |
| 98 | super.onAttach(context); | 104 | super.onAttach(context); |
| 99 | 105 | ||
| 100 | } | 106 | } |
| 101 | 107 | ||
| 102 | /** | 108 | /** |
| 103 | * Save data | 109 | * Save data |
| 104 | */ | 110 | */ |
| 105 | @Override | 111 | @Override |
| 106 | public void onSaveData() { | 112 | public void onSaveData() { |
| 107 | } | 113 | } |
| 108 | 114 | ||
| 109 | @Override | 115 | @Override |
| 110 | public void onInvalidate(boolean isInit) { | 116 | public void onInvalidate(boolean isInit) { |
| 111 | initData(); | 117 | initData(); |
| 112 | } | 118 | } |
| 113 | 119 | ||
| 114 | 120 | ||
| 115 | @Override | 121 | @Override |
| 116 | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { | 122 | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { |
| 117 | super.onViewStateRestored(savedInstanceState); | 123 | super.onViewStateRestored(savedInstanceState); |
| 118 | 124 | ||
| 119 | initData(); | 125 | initData(); |
| 120 | } | 126 | } |
| 121 | 127 | ||
| 122 | } | 128 | } |
| 123 | 129 |
app/src/main/java/com/dinhcv/lifelogpedometer/activity/TopTodayFragment.java
| 1 | package com.dinhcv.lifelogpedometer.activity; | 1 | package com.dinhcv.lifelogpedometer.activity; |
| 2 | 2 | ||
| 3 | import android.app.DatePickerDialog; | 3 | import android.app.DatePickerDialog; |
| 4 | import android.app.ProgressDialog; | ||
| 4 | import android.content.Context; | 5 | import android.content.Context; |
| 5 | import android.graphics.Color; | 6 | import android.graphics.Color; |
| 6 | import android.hardware.Sensor; | 7 | import android.hardware.Sensor; |
| 7 | import android.hardware.SensorEvent; | 8 | import android.hardware.SensorEvent; |
| 8 | import android.hardware.SensorEventListener; | 9 | import android.hardware.SensorEventListener; |
| 9 | import android.hardware.SensorManager; | 10 | import android.hardware.SensorManager; |
| 10 | import android.os.Bundle; | 11 | import android.os.Bundle; |
| 11 | import android.support.annotation.Nullable; | 12 | import android.support.annotation.Nullable; |
| 12 | import android.view.LayoutInflater; | 13 | import android.view.LayoutInflater; |
| 13 | import android.view.Menu; | 14 | import android.view.Menu; |
| 14 | import android.view.MenuInflater; | 15 | import android.view.MenuInflater; |
| 15 | import android.view.View; | 16 | import android.view.View; |
| 16 | import android.view.ViewGroup; | 17 | import android.view.ViewGroup; |
| 17 | import android.widget.DatePicker; | 18 | import android.widget.DatePicker; |
| 18 | import android.widget.ImageView; | 19 | import android.widget.ImageView; |
| 19 | import android.widget.LinearLayout; | 20 | import android.widget.LinearLayout; |
| 20 | import android.widget.TextView; | 21 | import android.widget.TextView; |
| 21 | import android.widget.Toast; | 22 | import android.widget.Toast; |
| 22 | 23 | ||
| 23 | import com.dinhcv.lifelogpedometer.R; | 24 | import com.dinhcv.lifelogpedometer.R; |
| 24 | import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; | 25 | import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; |
| 25 | import com.dinhcv.lifelogpedometer.model.StepModel; | 26 | import com.dinhcv.lifelogpedometer.model.StepModel; |
| 26 | import com.dinhcv.lifelogpedometer.model.structure.top.StepItemInfo; | 27 | import com.dinhcv.lifelogpedometer.model.structure.top.StepItemInfo; |
| 27 | import com.dinhcv.lifelogpedometer.model.structure.top.TopInfo; | 28 | import com.dinhcv.lifelogpedometer.model.structure.top.TopInfo; |
| 28 | import com.dinhcv.lifelogpedometer.portal.LLAPIManager; | 29 | import com.dinhcv.lifelogpedometer.portal.LLAPIManager; |
| 29 | import com.dinhcv.lifelogpedometer.utils.Const; | 30 | import com.dinhcv.lifelogpedometer.utils.Const; |
| 30 | import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter; | 31 | import com.dinhcv.lifelogpedometer.utils.DayAxisValueFormatter; |
| 31 | import com.dinhcv.lifelogpedometer.utils.Debug; | 32 | import com.dinhcv.lifelogpedometer.utils.Debug; |
| 32 | import com.dinhcv.lifelogpedometer.utils.Utils; | 33 | import com.dinhcv.lifelogpedometer.utils.Utils; |
| 33 | import com.github.mikephil.charting.components.XAxis; | 34 | import com.github.mikephil.charting.components.XAxis; |
| 34 | import com.github.mikephil.charting.components.YAxis; | 35 | import com.github.mikephil.charting.components.YAxis; |
| 35 | 36 | ||
| 36 | import com.github.mikephil.charting.charts.BarChart; | 37 | import com.github.mikephil.charting.charts.BarChart; |
| 37 | import com.github.mikephil.charting.data.BarData; | 38 | import com.github.mikephil.charting.data.BarData; |
| 38 | import com.github.mikephil.charting.data.BarDataSet; | 39 | import com.github.mikephil.charting.data.BarDataSet; |
| 39 | import com.github.mikephil.charting.data.BarEntry; | 40 | import com.github.mikephil.charting.data.BarEntry; |
| 40 | import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; | 41 | import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; |
| 41 | 42 | ||
| 42 | import org.eazegraph.lib.charts.PieChart; | 43 | import org.eazegraph.lib.charts.PieChart; |
| 43 | import org.eazegraph.lib.models.PieModel; | 44 | import org.eazegraph.lib.models.PieModel; |
| 44 | import org.json.JSONArray; | 45 | import org.json.JSONArray; |
| 45 | import org.json.JSONException; | 46 | import org.json.JSONException; |
| 46 | import org.json.JSONObject; | 47 | import org.json.JSONObject; |
| 47 | 48 | ||
| 48 | import java.text.NumberFormat; | 49 | import java.text.NumberFormat; |
| 49 | import java.util.ArrayList; | 50 | import java.util.ArrayList; |
| 50 | import java.util.Arrays; | 51 | import java.util.Arrays; |
| 51 | import java.util.Calendar; | 52 | import java.util.Calendar; |
| 52 | import java.util.Date; | 53 | import java.util.Date; |
| 53 | import java.util.List; | 54 | import java.util.List; |
| 54 | import java.util.Locale; | 55 | import java.util.Locale; |
| 55 | 56 | ||
| 56 | import static com.github.mikephil.charting.utils.ColorTemplate.rgb; | 57 | import static com.github.mikephil.charting.utils.ColorTemplate.rgb; |
| 57 | 58 | ||
| 58 | 59 | ||
| 59 | public class TopTodayFragment extends FragmentBase implements SettingFragmentPresenter, SensorEventListener { | 60 | public class TopTodayFragment extends FragmentBase implements SettingFragmentPresenter, SensorEventListener { |
| 60 | 61 | ||
| 61 | private TextView stepsView; | 62 | private TextView stepsView; |
| 62 | private TextView tvStepGoal; | 63 | private TextView tvStepGoal; |
| 63 | private TextView tvDistance; | 64 | private TextView tvDistance; |
| 64 | private TextView tvTime; | 65 | private TextView tvTime; |
| 65 | private TextView tvStepRemain; | 66 | private TextView tvStepRemain; |
| 66 | private TextView tvStepRateDone; | 67 | private TextView tvStepRateDone; |
| 67 | private boolean showSteps = true; | 68 | private boolean showSteps = true; |
| 68 | private PieModel sliceGoal, sliceCurrent; | 69 | private PieModel sliceGoal, sliceCurrent; |
| 69 | private PieChart pg; | 70 | private PieChart pg; |
| 70 | private TextView tvDate; | 71 | private TextView tvDate; |
| 71 | private ImageView ivBack; | 72 | private ImageView ivBack; |
| 72 | private ImageView ivNext; | 73 | private ImageView ivNext; |
| 73 | 74 | ||
| 74 | private LinearLayout llBike; | 75 | private LinearLayout llBike; |
| 75 | private LinearLayout llWalking; | 76 | private LinearLayout llWalking; |
| 76 | private LinearLayout llRunning; | 77 | private LinearLayout llRunning; |
| 77 | private Const.STEP_TYPE stepType; | 78 | private Const.STEP_TYPE stepType; |
| 78 | 79 | ||
| 79 | private Date mAnaDate; | 80 | private Date mAnaDate; |
| 80 | private Calendar mCalendar; | 81 | private Calendar mCalendar; |
| 81 | 82 | ||
| 82 | private int mAnaDay; | 83 | private int mAnaDay; |
| 83 | private int mAnaMonth; | 84 | private int mAnaMonth; |
| 84 | private int mAnaYear; | 85 | private int mAnaYear; |
| 85 | 86 | ||
| 86 | public static int STEP_SIZE = 75; | 87 | public static int STEP_SIZE = 75; |
| 87 | private StepModel mStepModel; | 88 | private StepModel mStepModel; |
| 88 | private TextView tvSmallStepGoal; | 89 | private TextView tvSmallStepGoal; |
| 89 | private TextView tvSmallRemain; | 90 | private TextView tvSmallRemain; |
| 90 | private Context mContext; | 91 | private Context mContext; |
| 91 | 92 | ||
| 92 | public final static NumberFormat formatter = NumberFormat.getInstance(Locale.getDefault()); | 93 | public final static NumberFormat formatter = NumberFormat.getInstance(Locale.getDefault()); |
| 93 | private SensorManager sensorManager; | 94 | private SensorManager sensorManager; |
| 94 | private boolean activityRunning; | 95 | private boolean activityRunning; |
| 95 | private int stepTotal = 0; | 96 | private int stepTotal = 0; |
| 96 | private int stepRemain = 0; | 97 | private int stepGoal = 0; |
| 97 | private int stepCount = 0; | 98 | private int stepCount = 0; |
| 98 | 99 | ||
| 99 | private Date mFromDate; | 100 | private Date mFromDate; |
| 100 | private Date mToDate; | 101 | private Date mToDate; |
| 101 | 102 | ||
| 102 | private TopInfo mTopInfo = new TopInfo(); | 103 | private TopInfo mTopInfo = new TopInfo(); |
| 103 | private BarChart mChart; | 104 | private BarChart mChart; |
| 104 | 105 | ||
| 105 | private List<String> dateList; | 106 | private List<String> dateList; |
| 106 | private String[] mParties; | 107 | private String[] mParties; |
| 107 | private Integer[] mStep; | 108 | private Integer[] mStep; |
| 109 | private ProgressDialog progress; | ||
| 108 | 110 | ||
| 109 | private TopFragment mTopFragment; | 111 | private TopFragment mTopFragment; |
| 110 | public void setRootFragment(TopFragment frag) { | 112 | public void setRootFragment(TopFragment frag) { |
| 111 | this.mTopFragment = frag; | 113 | this.mTopFragment = frag; |
| 112 | } | 114 | } |
| 113 | 115 | ||
| 114 | @Override | 116 | @Override |
| 115 | public void onCreate(final Bundle savedInstanceState) { | 117 | public void onCreate(final Bundle savedInstanceState) { |
| 116 | super.onCreate(savedInstanceState); | 118 | super.onCreate(savedInstanceState); |
| 117 | setHasOptionsMenu(true); | 119 | setHasOptionsMenu(true); |
| 118 | } | 120 | } |
| 119 | 121 | ||
| 120 | @Override | 122 | @Override |
| 121 | public View onCreateView(final LayoutInflater inflater, final ViewGroup container, | 123 | public View onCreateView(final LayoutInflater inflater, final ViewGroup container, |
| 122 | final Bundle savedInstanceState) { | 124 | final Bundle savedInstanceState) { |
| 123 | final View v = inflater.inflate(R.layout.fragment_top_today, null); | 125 | final View v = inflater.inflate(R.layout.fragment_top_today, null); |
| 124 | mContext = getActivity(); | 126 | mContext = getActivity(); |
| 125 | sensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); | 127 | sensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); |
| 126 | 128 | ||
| 127 | initView(v); | 129 | initView(v); |
| 128 | 130 | ||
| 129 | // slice for the steps taken today | 131 | // slice for the steps taken today |
| 130 | sliceCurrent = new PieModel("", 0, Color.parseColor("#6FE7F7")); | 132 | sliceCurrent = new PieModel("", 0, Color.parseColor("#6FE7F7")); |
| 131 | pg.addPieSlice(sliceCurrent); | 133 | pg.addPieSlice(sliceCurrent); |
| 132 | 134 | ||
| 133 | // slice for the "missing" steps until reaching the goal | 135 | // slice for the "missing" steps until reaching the goal |
| 134 | sliceGoal = new PieModel("", Const.STEP_GOAL, Color.parseColor("#B7B8B6")); | 136 | sliceGoal = new PieModel("", Const.STEP_GOAL, Color.parseColor("#B7B8B6")); |
| 135 | pg.addPieSlice(sliceGoal); | 137 | pg.addPieSlice(sliceGoal); |
| 136 | pg.setDrawValueInPie(false); | 138 | pg.setDrawValueInPie(false); |
| 137 | pg.setUsePieRotation(false); | 139 | pg.setUsePieRotation(false); |
| 138 | pg.startAnimation(); | 140 | pg.startAnimation(); |
| 139 | pg.setAutoCenterInSlice(false); | 141 | pg.setAutoCenterInSlice(false); |
| 140 | 142 | ||
| 141 | mCalendar = Calendar.getInstance(); | 143 | mCalendar = Calendar.getInstance(); |
| 142 | mCalendar.setTime(new Date()); | 144 | mCalendar.setTime(new Date()); |
| 143 | mAnaDate = mCalendar.getTime(); | 145 | mAnaDate = mCalendar.getTime(); |
| 144 | mAnaYear = mCalendar.get(Calendar.YEAR); | 146 | mAnaYear = mCalendar.get(Calendar.YEAR); |
| 145 | mAnaMonth = mCalendar.get(Calendar.MONTH); | 147 | mAnaMonth = mCalendar.get(Calendar.MONTH); |
| 146 | mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); | 148 | mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); |
| 147 | 149 | ||
| 148 | mFromDate = new Date(); | 150 | mFromDate = new Date(); |
| 149 | 151 | ||
| 150 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); | 152 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); |
| 151 | 153 | ||
| 152 | initData(); | 154 | initData(); |
| 153 | 155 | ||
| 154 | handleEvent(); | 156 | handleEvent(); |
| 155 | 157 | ||
| 156 | getTopPage(mAnaDate, stepType); | 158 | getTopPage(mAnaDate, stepType); |
| 157 | 159 | ||
| 158 | return v; | 160 | return v; |
| 159 | } | 161 | } |
| 160 | 162 | ||
| 161 | private void initView(View v){ | 163 | private void initView(View v){ |
| 162 | stepsView = (TextView) v.findViewById(R.id.steps); | 164 | stepsView = (TextView) v.findViewById(R.id.steps); |
| 163 | tvDistance = (TextView) v.findViewById(R.id.tv_distance); | 165 | tvDistance = (TextView) v.findViewById(R.id.tv_distance); |
| 164 | tvStepGoal = (TextView) v.findViewById(R.id.tv_stepGoal); | 166 | tvStepGoal = (TextView) v.findViewById(R.id.tv_stepGoal); |
| 165 | tvStepRemain = (TextView) v.findViewById(R.id.tv_stepRemain); | 167 | tvStepRemain = (TextView) v.findViewById(R.id.tv_stepRemain); |
| 166 | tvStepRateDone = (TextView) v.findViewById(R.id.tv_stepRateDone); | 168 | tvStepRateDone = (TextView) v.findViewById(R.id.tv_stepRateDone); |
| 167 | tvSmallStepGoal = (TextView) v.findViewById(R.id.tv_smallStepGoal); | 169 | tvSmallStepGoal = (TextView) v.findViewById(R.id.tv_smallStepGoal); |
| 168 | tvSmallRemain = (TextView) v.findViewById(R.id.tv_smallRemain); | 170 | tvSmallRemain = (TextView) v.findViewById(R.id.tv_smallRemain); |
| 169 | tvTime = (TextView) v.findViewById(R.id.tv_time); | 171 | tvTime = (TextView) v.findViewById(R.id.tv_time); |
| 170 | tvDate = (TextView) v.findViewById(R.id.tv_date); | 172 | tvDate = (TextView) v.findViewById(R.id.tv_date); |
| 171 | ivBack = (ImageView) v.findViewById(R.id.iv_back); | 173 | ivBack = (ImageView) v.findViewById(R.id.iv_back); |
| 172 | ivNext = (ImageView) v.findViewById(R.id.iv_next); | 174 | ivNext = (ImageView) v.findViewById(R.id.iv_next); |
| 173 | 175 | ||
| 174 | mChart = (BarChart) v.findViewById(R.id.chart); | 176 | mChart = (BarChart) v.findViewById(R.id.chart); |
| 175 | pg = (PieChart) v.findViewById(R.id.graph); | 177 | pg = (PieChart) v.findViewById(R.id.graph); |
| 176 | 178 | ||
| 177 | llRunning = (LinearLayout) v.findViewById(R.id.ll_running); | 179 | llRunning = (LinearLayout) v.findViewById(R.id.ll_running); |
| 178 | llWalking = (LinearLayout) v.findViewById(R.id.ll_walking); | 180 | llWalking = (LinearLayout) v.findViewById(R.id.ll_walking); |
| 179 | llBike = (LinearLayout) v.findViewById(R.id.ll_bike); | 181 | llBike = (LinearLayout) v.findViewById(R.id.ll_bike); |
| 180 | } | 182 | } |
| 181 | 183 | ||
| 182 | private void initData(){ | 184 | private void initData(){ |
| 183 | mCalendar = Calendar.getInstance(); | 185 | mCalendar = Calendar.getInstance(); |
| 184 | mCalendar.setTime(new Date()); | 186 | mCalendar.setTime(new Date()); |
| 185 | mAnaDate = mCalendar.getTime(); | 187 | mAnaDate = mCalendar.getTime(); |
| 186 | mAnaYear = mCalendar.get(Calendar.YEAR); | 188 | mAnaYear = mCalendar.get(Calendar.YEAR); |
| 187 | mAnaMonth = mCalendar.get(Calendar.MONTH); | 189 | mAnaMonth = mCalendar.get(Calendar.MONTH); |
| 188 | mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); | 190 | mAnaDay = mCalendar.get(Calendar.DAY_OF_MONTH); |
| 189 | 191 | ||
| 190 | 192 | ||
| 191 | stepType = Const.STEP_TYPE.WALKING; | 193 | stepType = Const.STEP_TYPE.WALKING; |
| 192 | updateUiStepType(false, true, false); | 194 | updateUiStepType(false, true, false); |
| 193 | 195 | ||
| 194 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); | 196 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(mAnaDate)); |
| 195 | } | 197 | } |
| 196 | 198 | ||
| 197 | private void updateUiStepType(boolean b1, boolean b2, boolean b3) { | 199 | private void updateUiStepType(boolean b1, boolean b2, boolean b3) { |
| 198 | llBike.setSelected(b1); | 200 | llBike.setSelected(b1); |
| 199 | llWalking.setSelected(b2); | 201 | llWalking.setSelected(b2); |
| 200 | llRunning.setSelected(b3); | 202 | llRunning.setSelected(b3); |
| 201 | } | 203 | } |
| 202 | 204 | ||
| 203 | private void stepsDistanceChanged() { | 205 | private void stepsDistanceChanged() { |
| 206 | if (progress != null){ | ||
| 207 | progress.dismiss(); | ||
| 208 | } | ||
| 204 | updatePie(); | 209 | updatePie(); |
| 205 | updateBars(); | 210 | updateBars(); |
| 206 | } | 211 | } |
| 207 | 212 | ||
| 208 | 213 | ||
| 209 | @Override | 214 | @Override |
| 210 | public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { | 215 | public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { |
| 211 | inflater.inflate(R.menu.main, menu); | 216 | inflater.inflate(R.menu.main, menu); |
| 212 | } | 217 | } |
| 213 | 218 | ||
| 214 | private void getTopPage(Date date, Const.STEP_TYPE stepType){ | 219 | private void getTopPage(Date date, Const.STEP_TYPE stepType){ |
| 215 | 220 | ||
| 216 | showDialog(mContext); | 221 | progress = new ProgressDialog(mContext); |
| 222 | progress.setMessage(getString(R.string.loading)); | ||
| 223 | progress.setCancelable(false); | ||
| 224 | progress.show(); | ||
| 217 | LLAPIManager.topInfo(date, stepType, new LLAPIManagerListener() { | 225 | LLAPIManager.topInfo(date, stepType, new LLAPIManagerListener() { |
| 218 | @Override | 226 | @Override |
| 219 | public void onError(Error error) { | 227 | public void onError(Error error) { |
| 220 | Debug.error("Get data history error"); | 228 | Debug.error("Get data history error"); |
| 221 | hiddenDialog(); | 229 | hiddenDialog(); |
| 222 | showDialogNotData(); | 230 | showDialogNotData(); |
| 223 | } | 231 | } |
| 224 | 232 | ||
| 225 | @Override | 233 | @Override |
| 226 | public void onSuccess(String json) { | 234 | public void onSuccess(String json) { |
| 227 | Debug.error("Get data history success"); | 235 | Debug.error("Get data history success"); |
| 228 | hiddenDialog(); | ||
| 229 | loadDataDone(json); | 236 | loadDataDone(json); |
| 230 | } | 237 | } |
| 231 | 238 | ||
| 232 | @Override | 239 | @Override |
| 233 | public void onSuccess(JSONObject object) { | 240 | public void onSuccess(JSONObject object) { |
| 234 | Debug.error("Get data history success"); | 241 | Debug.error("Get data history success"); |
| 235 | hiddenDialog(); | 242 | hiddenDialog(); |
| 236 | } | 243 | } |
| 237 | }); | 244 | }); |
| 238 | } | 245 | } |
| 239 | 246 | ||
| 240 | private void showDialogNotData(){ | 247 | private void showDialogNotData(){ |
| 241 | showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); | 248 | showAlerDialog(mContext, getResources().getString(R.string.can_not_get_data)); |
| 242 | } | 249 | } |
| 243 | 250 | ||
| 244 | private void loadDataDone(String jsonString) { | 251 | private void loadDataDone(String jsonString) { |
| 245 | JSONObject jsonObject = null; | 252 | JSONObject jsonObject = null; |
| 246 | try { | 253 | try { |
| 247 | jsonObject = new JSONObject(jsonString); | 254 | jsonObject = new JSONObject(jsonString); |
| 248 | int status = jsonObject.optInt("status"); | 255 | int status = jsonObject.optInt("status"); |
| 249 | if (status == 1) { | 256 | if (status == 1) { |
| 250 | JSONObject jsonObject1 = jsonObject.optJSONObject("result"); | 257 | JSONObject jsonObject1 = jsonObject.optJSONObject("result"); |
| 251 | JSONObject targetInf = jsonObject1.getJSONObject("targetInf"); | 258 | JSONObject targetInf = jsonObject1.getJSONObject("targetInf"); |
| 252 | 259 | ||
| 253 | if (targetInf != null){ | 260 | if (targetInf != null){ |
| 254 | String target = targetInf.optString("target_step"); | 261 | String target = targetInf.optString("target_step"); |
| 255 | Debug.normal("Target: "+ target); | 262 | Debug.normal("Target: "+ target); |
| 256 | mTopInfo.setTaget(targetInf.optString("target_step")); | 263 | mTopInfo.setTaget(targetInf.optString("target_step")); |
| 257 | mTopInfo.setSteps(targetInf.optString("num_step")); | 264 | mTopInfo.setSteps(targetInf.optString("num_step")); |
| 258 | mTopInfo.setStepRemain(targetInf.optString("remaining_step")); | 265 | mTopInfo.setStepRemain(targetInf.optString("remaining_step")); |
| 259 | mTopInfo.setCompletePercent(targetInf.optString("complete_percent")); | 266 | mTopInfo.setCompletePercent(targetInf.optString("complete_percent")); |
| 260 | } | 267 | } |
| 261 | 268 | ||
| 262 | mTopInfo.setKcalo(jsonObject1.optString("kcal")); | 269 | mTopInfo.setKcalo(jsonObject1.optString("kcal")); |
| 263 | mTopInfo.setDistance(jsonObject1.optString("distance")); | 270 | mTopInfo.setDistance(jsonObject1.optString("distance")); |
| 264 | mTopInfo.setTime(jsonObject1.optString("time")); | 271 | mTopInfo.setTime(jsonObject1.optString("time")); |
| 265 | JSONArray stepArr = jsonObject1.optJSONArray("dataChart"); | 272 | JSONArray stepArr = jsonObject1.optJSONArray("dataChart"); |
| 266 | 273 | ||
| 267 | 274 | ||
| 268 | if (stepArr != null && stepArr.length() > 0) { | 275 | if (stepArr != null && stepArr.length() > 0) { |
| 269 | List<StepItemInfo> infoLists = new ArrayList<>(); | 276 | List<StepItemInfo> infoLists = new ArrayList<>(); |
| 270 | for (int i = 0; i < stepArr.length(); i++){ | 277 | for (int i = 0; i < stepArr.length(); i++){ |
| 271 | StepItemInfo stepItemInfo = new StepItemInfo(); | 278 | StepItemInfo stepItemInfo = new StepItemInfo(); |
| 272 | JSONObject ob = (JSONObject) stepArr.get(i); | 279 | JSONObject ob = (JSONObject) stepArr.get(i); |
| 273 | stepItemInfo.setHour(ob.optInt("hour")); | 280 | stepItemInfo.setHour(ob.optInt("hour")); |
| 274 | stepItemInfo.setNumStep(ob.optInt("numStep")); | 281 | stepItemInfo.setNumStep(ob.optInt("numStep")); |
| 275 | infoLists.add(stepItemInfo); | 282 | infoLists.add(stepItemInfo); |
| 276 | } | 283 | } |
| 277 | 284 | ||
| 278 | mTopInfo.setStepList(infoLists); | 285 | mTopInfo.setStepList(infoLists); |
| 279 | } | 286 | } |
| 280 | 287 | ||
| 281 | } | 288 | } |
| 282 | } catch (JSONException e) { | 289 | } catch (JSONException e) { |
| 283 | e.printStackTrace(); | 290 | e.printStackTrace(); |
| 284 | mTopInfo = new TopInfo();; | 291 | mTopInfo = new TopInfo();; |
| 285 | } | 292 | } |
| 286 | 293 | ||
| 287 | stepsDistanceChanged(); | 294 | stepsDistanceChanged(); |
| 288 | } | 295 | } |
| 289 | 296 | ||
| 290 | private void updatePie() { | 297 | private void updatePie() { |
| 291 | // todayOffset might still be Integer.MIN_VALUE on first start | 298 | // todayOffset might still be Integer.MIN_VALUE on first start |
| 292 | int stepsToday = 0; | 299 | int stepsToday = 0; |
| 293 | int stepTarget = 0; | 300 | int stepTarget = 0; |
| 294 | if (mTopInfo != null) { | 301 | if (mTopInfo != null) { |
| 295 | stepsToday = Integer.valueOf(mTopInfo.getSteps()); | 302 | if (mTopInfo.getSteps().contains(",")){ |
| 303 | stepsToday = Integer.valueOf(mTopInfo.getSteps().replace(",", "")); | ||
| 304 | }else { | ||
| 305 | stepsToday = Integer.valueOf(mTopInfo.getSteps()); | ||
| 306 | } | ||
| 307 | |||
| 296 | if (mTopInfo.getTaget().contains(",")) { | 308 | if (mTopInfo.getTaget().contains(",")) { |
| 297 | stepTarget = Integer.valueOf(mTopInfo.getTaget().replace(",", "")); | 309 | stepTarget = Integer.valueOf(mTopInfo.getTaget().replace(",", "")); |
| 298 | }else { | 310 | }else { |
| 299 | stepTarget = Integer.valueOf(mTopInfo.getTaget()); | 311 | stepTarget = Integer.valueOf(mTopInfo.getTaget()); |
| 300 | } | 312 | } |
| 301 | } | 313 | } |
| 302 | sliceCurrent.setValue(stepsToday); | 314 | sliceCurrent.setValue(stepsToday); |
| 303 | if (stepTarget - stepsToday > 0) { | 315 | if (stepTarget - stepsToday > 0) { |
| 304 | // goal not reached yet | 316 | // goal not reached yet |
| 305 | if (pg.getData().size() == 1) { | 317 | if (pg.getData().size() == 1) { |
| 306 | pg.addPieSlice(sliceGoal); | 318 | pg.addPieSlice(sliceGoal); |
| 307 | } | 319 | } |
| 308 | sliceGoal.setValue(stepTarget - stepsToday); | 320 | sliceGoal.setValue(stepTarget - stepsToday); |
| 309 | } else { | 321 | } else { |
| 310 | // goal reached | 322 | // goal reached |
| 311 | pg.clearChart(); | 323 | pg.clearChart(); |
| 312 | pg.addPieSlice(sliceCurrent); | 324 | pg.addPieSlice(sliceCurrent); |
| 313 | } | 325 | } |
| 314 | pg.update(); | 326 | pg.update(); |
| 315 | 327 | stepGoal = stepTarget; | |
| 316 | tvDistance.setText(mTopInfo.getDistance()); | 328 | stepTotal = stepsToday; |
| 317 | tvTime.setText(mTopInfo.getTime()); | ||
| 318 | |||
| 319 | stepsView.setText(formatter.format(stepsToday)); | 329 | stepsView.setText(formatter.format(stepsToday)); |
| 320 | int remain = stepTarget - stepsToday; | 330 | int stepRemain = stepTarget - stepsToday; |
| 321 | tvStepRemain.setText(String.valueOf(remain)); | 331 | tvStepRemain.setText(String.valueOf(stepRemain)); |
| 322 | tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(stepsToday *100/ Const.STEP_GOAL))); | 332 | tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(stepsToday *100/ stepTarget))); |
| 323 | tvSmallRemain.setText(getResources().getString(R.string.pie_text_content3a, remain)); | 333 | tvSmallRemain.setText(getResources().getString(R.string.pie_text_content3a, stepRemain)); |
| 324 | tvStepGoal.setText(mTopInfo.getTaget()); | 334 | tvStepGoal.setText(mTopInfo.getTaget()); |
| 325 | tvSmallStepGoal.setText(mTopInfo.getTaget()); | 335 | tvSmallStepGoal.setText(mTopInfo.getTaget()); |
| 336 | |||
| 326 | tvDistance.setText(mTopInfo.getDistance()); | 337 | tvDistance.setText(mTopInfo.getDistance()); |
| 327 | tvTime.setText(mTopInfo.getTime()); | 338 | tvTime.setText(mTopInfo.getTime()); |
| 328 | 339 | ||
| 329 | double distanceToday = stepsToday * STEP_SIZE; | 340 | double distanceToday = stepsToday * STEP_SIZE; |
| 330 | distanceToday /= 100000; | 341 | distanceToday /= 100000; |
| 331 | tvDistance.setText(Utils.convert2String2Decimal(distanceToday)); | 342 | tvDistance.setText(Utils.convert2String2Decimal(distanceToday)); |
| 332 | 343 | ||
| 333 | } | 344 | } |
| 334 | 345 | ||
| 335 | /** | 346 | /** |
| 336 | * Updates the bar graph to show the steps/distance of the last week. Should | 347 | * Updates the bar graph to show the steps/distance of the last week. Should |
| 337 | * be called when switching from step count to distance. | 348 | * be called when switching from step count to distance. |
| 338 | */ | 349 | */ |
| 339 | private void updateBars() { | 350 | private void updateBars() { |
| 340 | 351 | ||
| 341 | dateList = new ArrayList<>(); | 352 | dateList = new ArrayList<>(); |
| 342 | List<String> dateList = new ArrayList<>(); | 353 | List<String> dateList = new ArrayList<>(); |
| 343 | List<Integer> stepList = new ArrayList<>(); | 354 | List<Integer> stepList = new ArrayList<>(); |
| 344 | List<StepItemInfo> stepItemInfos = mTopInfo.getStepList(); | 355 | List<StepItemInfo> stepItemInfos = mTopInfo.getStepList(); |
| 345 | if (stepItemInfos != null && stepItemInfos.size() >0) { | 356 | if (stepItemInfos != null && stepItemInfos.size() >0) { |
| 346 | for (int i = 0; i < stepItemInfos.size(); i++){ | 357 | for (int i = 0; i < stepItemInfos.size(); i++){ |
| 347 | dateList.add(String.valueOf(stepItemInfos.get(i).getHour())); | 358 | dateList.add(String.valueOf(stepItemInfos.get(i).getHour())); |
| 348 | stepList.add(stepItemInfos.get(i).getNumStep()); | 359 | stepList.add(stepItemInfos.get(i).getNumStep()); |
| 349 | } | 360 | } |
| 350 | } | 361 | } |
| 351 | 362 | ||
| 352 | mStep = stepList.toArray(new Integer[0]); | 363 | mStep = stepList.toArray(new Integer[0]); |
| 353 | mParties = dateList.toArray(new String[0]); | 364 | mParties = dateList.toArray(new String[0]); |
| 354 | 365 | ||
| 355 | initGraph(); | 366 | initGraph(); |
| 356 | } | 367 | } |
| 357 | 368 | ||
| 358 | private void initGraph(){ | 369 | private void initGraph(){ |
| 359 | 370 | ||
| 360 | mChart.setDrawBarShadow(false); | 371 | mChart.setDrawBarShadow(false); |
| 361 | mChart.setDrawValueAboveBar(true); | 372 | mChart.setDrawValueAboveBar(true); |
| 362 | 373 | ||
| 363 | // if more than 60 entries are displayed in the chart, no values will be | 374 | // if more than 60 entries are displayed in the chart, no values will be |
| 364 | // drawn | 375 | // drawn |
| 365 | mChart.setMaxVisibleValueCount(60); | 376 | mChart.setMaxVisibleValueCount(60); |
| 366 | 377 | ||
| 367 | mChart.getDescription().setEnabled(false); | 378 | mChart.getDescription().setEnabled(false); |
| 368 | // scaling can now only be done on x- and y-axis separately | 379 | // scaling can now only be done on x- and y-axis separately |
| 369 | mChart.setPinchZoom(false); | 380 | mChart.setPinchZoom(false); |
| 370 | 381 | ||
| 371 | mChart.setDrawGridBackground(false); | 382 | mChart.setDrawGridBackground(false); |
| 372 | // mChart.setDrawYLabels(false); | 383 | // mChart.setDrawYLabels(false); |
| 373 | List<String> listx = Arrays.asList(mParties); | 384 | List<String> listx = Arrays.asList(mParties); |
| 374 | DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(listx); | 385 | DayAxisValueFormatter xValueFormatter = new DayAxisValueFormatter(listx); |
| 375 | 386 | ||
| 376 | XAxis xAxis = mChart.getXAxis(); | 387 | XAxis xAxis = mChart.getXAxis(); |
| 377 | xAxis.setLabelRotationAngle(0); | 388 | xAxis.setLabelRotationAngle(0); |
| 378 | xAxis.setPosition(XAxis.XAxisPosition.TOP); | 389 | xAxis.setPosition(XAxis.XAxisPosition.TOP); |
| 379 | xAxis.setDrawGridLines(true); | 390 | xAxis.setDrawGridLines(true); |
| 380 | xAxis.setLabelCount(10); | 391 | xAxis.setLabelCount(10); |
| 381 | xAxis.setTextColor(Color.WHITE); | 392 | xAxis.setTextColor(Color.WHITE); |
| 382 | xAxis.setValueFormatter(xValueFormatter); | 393 | xAxis.setValueFormatter(xValueFormatter); |
| 383 | 394 | ||
| 384 | 395 | ||
| 385 | YAxis leftAxis = mChart.getAxisLeft(); | 396 | YAxis leftAxis = mChart.getAxisLeft(); |
| 386 | leftAxis.setDrawLabels(false); | 397 | leftAxis.setDrawLabels(false); |
| 387 | leftAxis.setDrawGridLines(false); | 398 | leftAxis.setDrawGridLines(false); |
| 388 | leftAxis.setAxisMinimum(0f); | 399 | leftAxis.setAxisMinimum(0f); |
| 389 | leftAxis.setAxisMaximum(10000f); | 400 | leftAxis.setAxisMaximum(10000f); |
| 390 | leftAxis.setDrawZeroLine(false); | 401 | leftAxis.setDrawZeroLine(false); |
| 391 | 402 | ||
| 392 | leftAxis.setEnabled(false); | 403 | leftAxis.setEnabled(false); |
| 393 | mChart.setDrawValueAboveBar(false); | 404 | mChart.setDrawValueAboveBar(false); |
| 394 | mChart.getAxisRight().setEnabled(false); | 405 | mChart.getAxisRight().setEnabled(false); |
| 395 | 406 | ||
| 396 | // set auto scale min max | 407 | // set auto scale min max |
| 397 | mChart.setAutoScaleMinMaxEnabled(true); | 408 | mChart.setAutoScaleMinMaxEnabled(true); |
| 398 | mChart.notifyDataSetChanged(); | 409 | mChart.notifyDataSetChanged(); |
| 399 | 410 | ||
| 400 | // Set enimate y | 411 | // Set enimate y |
| 401 | mChart.animateY(2000); | 412 | mChart.animateY(2000); |
| 402 | 413 | ||
| 403 | setData(); | 414 | setData(); |
| 404 | 415 | ||
| 405 | mChart.getLegend().setEnabled(false); | 416 | mChart.getLegend().setEnabled(false); |
| 406 | } | 417 | } |
| 407 | 418 | ||
| 408 | 419 | ||
| 409 | private void setData() { | 420 | private void setData() { |
| 410 | 421 | ||
| 411 | ArrayList<String> xVals = new ArrayList<>(); | 422 | ArrayList<String> xVals = new ArrayList<>(); |
| 412 | for (int i = 0; i < mStep.length; i++) { | 423 | for (int i = 0; i < mStep.length; i++) { |
| 413 | xVals.add(mParties[i % mStep.length]); | 424 | xVals.add(mParties[i % mStep.length]); |
| 414 | } | 425 | } |
| 415 | 426 | ||
| 416 | ArrayList<BarEntry> yVals1 = new ArrayList<>(); | 427 | ArrayList<BarEntry> yVals1 = new ArrayList<>(); |
| 417 | for (int i = 0; i < mStep.length; i++) { | 428 | for (int i = 0; i < mStep.length; i++) { |
| 418 | float val = (float) (mStep[i]*1); | 429 | float val = (float) (mStep[i]*1); |
| 419 | yVals1.add(new BarEntry(i, val)); | 430 | yVals1.add(new BarEntry(i, val)); |
| 420 | } | 431 | } |
| 421 | 432 | ||
| 422 | BarDataSet set1; | 433 | BarDataSet set1; |
| 423 | 434 | ||
| 424 | if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { | 435 | if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { |
| 425 | set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); | 436 | set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); |
| 426 | set1.setValues(yVals1); | 437 | set1.setValues(yVals1); |
| 427 | mChart.getData().notifyDataChanged(); | 438 | mChart.getData().notifyDataChanged(); |
| 428 | mChart.notifyDataSetChanged(); | 439 | mChart.notifyDataSetChanged(); |
| 429 | } else { | 440 | } else { |
| 430 | ArrayList<Integer> colors = new ArrayList<>(); | 441 | ArrayList<Integer> colors = new ArrayList<>(); |
| 431 | 442 | ||
| 432 | 443 | ||
| 433 | int[] MATERIAL_COLORS = {rgb("#40CDEF")}; | 444 | int[] MATERIAL_COLORS = {rgb("#40CDEF")}; |
| 434 | 445 | ||
| 435 | for (int c : MATERIAL_COLORS) | 446 | for (int c : MATERIAL_COLORS) |
| 436 | colors.add(c); | 447 | colors.add(c); |
| 437 | 448 | ||
| 438 | set1 = new BarDataSet(yVals1, null); | 449 | set1 = new BarDataSet(yVals1, null); |
| 439 | 450 | ||
| 440 | set1.setColors(colors); | 451 | set1.setColors(colors); |
| 441 | 452 | ||
| 442 | ArrayList<IBarDataSet> dataSets = new ArrayList<>(); | 453 | ArrayList<IBarDataSet> dataSets = new ArrayList<>(); |
| 443 | dataSets.add(set1); | 454 | dataSets.add(set1); |
| 444 | 455 | ||
| 445 | BarData data = new BarData(dataSets); | 456 | BarData data = new BarData(dataSets); |
| 446 | data.setValueTextSize(10f); | 457 | data.setValueTextSize(10f); |
| 447 | 458 | ||
| 448 | mChart.setData(data); | 459 | mChart.setData(data); |
| 449 | } | 460 | } |
| 450 | } | 461 | } |
| 451 | 462 | ||
| 452 | 463 | ||
| 453 | 464 | ||
| 454 | private void handleEvent(){ | 465 | private void handleEvent(){ |
| 455 | tvDate.setOnClickListener(new View.OnClickListener() { | 466 | tvDate.setOnClickListener(new View.OnClickListener() { |
| 456 | @Override | 467 | @Override |
| 457 | public void onClick(View view) { | 468 | public void onClick(View view) { |
| 458 | handleAnaDatePicker(); | 469 | handleAnaDatePicker(); |
| 459 | } | 470 | } |
| 460 | }); | 471 | }); |
| 461 | 472 | ||
| 462 | ivBack.setOnClickListener(new View.OnClickListener() { | 473 | ivBack.setOnClickListener(new View.OnClickListener() { |
| 463 | @Override | 474 | @Override |
| 464 | public void onClick(View view) { | 475 | public void onClick(View view) { |
| 465 | mCalendar = Calendar.getInstance(); | 476 | mCalendar = Calendar.getInstance(); |
| 466 | mCalendar.setTime(mAnaDate); | 477 | mCalendar.setTime(mAnaDate); |
| 467 | mCalendar.add(Calendar.DAY_OF_MONTH, -1); | 478 | mCalendar.add(Calendar.DAY_OF_MONTH, -1); |
| 468 | Date date = mCalendar.getTime(); | 479 | Date date = mCalendar.getTime(); |
| 469 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 480 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
| 470 | mAnaDate = date; | 481 | mAnaDate = date; |
| 471 | } | 482 | } |
| 472 | }); | 483 | }); |
| 473 | 484 | ||
| 474 | ivNext.setOnClickListener(new View.OnClickListener() { | 485 | ivNext.setOnClickListener(new View.OnClickListener() { |
| 475 | @Override | 486 | @Override |
| 476 | public void onClick(View view) { | 487 | public void onClick(View view) { |
| 477 | mCalendar = Calendar.getInstance(); | 488 | mCalendar = Calendar.getInstance(); |
| 478 | mCalendar.setTime(mAnaDate); | 489 | mCalendar.setTime(mAnaDate); |
| 479 | mCalendar.add(Calendar.DAY_OF_MONTH, +1); | 490 | mCalendar.add(Calendar.DAY_OF_MONTH, +1); |
| 480 | Date date = mCalendar.getTime(); | 491 | Date date = mCalendar.getTime(); |
| 481 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 492 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
| 482 | mAnaDate = date; | 493 | mAnaDate = date; |
| 483 | } | 494 | } |
| 484 | }); | 495 | }); |
| 485 | 496 | ||
| 486 | llBike.setOnClickListener(new View.OnClickListener() { | 497 | llBike.setOnClickListener(new View.OnClickListener() { |
| 487 | @Override | 498 | @Override |
| 488 | public void onClick(View view) { | 499 | public void onClick(View view) { |
| 489 | stepType = Const.STEP_TYPE.BIKE; | 500 | stepType = Const.STEP_TYPE.BIKE; |
| 490 | updateUiStepType(false, false, true); | 501 | updateUiStepType(true, false, false); |
| 491 | getTopPage(mAnaDate, stepType); | 502 | getTopPage(mAnaDate, stepType); |
| 492 | } | 503 | } |
| 493 | }); | 504 | }); |
| 494 | 505 | ||
| 495 | llRunning.setOnClickListener(new View.OnClickListener() { | 506 | llRunning.setOnClickListener(new View.OnClickListener() { |
| 496 | @Override | 507 | @Override |
| 497 | public void onClick(View view) { | 508 | public void onClick(View view) { |
| 498 | stepType = Const.STEP_TYPE.RUNNING; | 509 | stepType = Const.STEP_TYPE.RUNNING; |
| 499 | updateUiStepType(false, false, true); | 510 | updateUiStepType(false, false, true); |
| 500 | getTopPage(mAnaDate, stepType); | 511 | getTopPage(mAnaDate, stepType); |
| 501 | } | 512 | } |
| 502 | }); | 513 | }); |
| 503 | 514 | ||
| 504 | llWalking.setOnClickListener(new View.OnClickListener() { | 515 | llWalking.setOnClickListener(new View.OnClickListener() { |
| 505 | @Override | 516 | @Override |
| 506 | public void onClick(View view) { | 517 | public void onClick(View view) { |
| 507 | stepType = Const.STEP_TYPE.WALKING; | 518 | stepType = Const.STEP_TYPE.WALKING; |
| 508 | updateUiStepType(false, false, true); | 519 | updateUiStepType(false, true, false); |
| 509 | getTopPage(mAnaDate, stepType); | 520 | getTopPage(mAnaDate, stepType); |
| 510 | } | 521 | } |
| 511 | }); | 522 | }); |
| 512 | 523 | ||
| 513 | 524 | ||
| 514 | } | 525 | } |
| 515 | 526 | ||
| 516 | 527 | ||
| 517 | /** | 528 | /** |
| 518 | * Show date picker dialog | 529 | * Show date picker dialog |
| 519 | */ | 530 | */ |
| 520 | private void handleAnaDatePicker() { | 531 | private void handleAnaDatePicker() { |
| 521 | 532 | ||
| 522 | new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { | 533 | new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { |
| 523 | @Override | 534 | @Override |
| 524 | public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { | 535 | public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { |
| 525 | 536 | ||
| 526 | mCalendar = Calendar.getInstance(); | 537 | mCalendar = Calendar.getInstance(); |
| 527 | mCalendar.set(year, monthOfYear, dayOfMonth); | 538 | mCalendar.set(year, monthOfYear, dayOfMonth); |
| 528 | mAnaYear = year; | 539 | mAnaYear = year; |
| 529 | mAnaMonth = monthOfYear; | 540 | mAnaMonth = monthOfYear; |
| 530 | mAnaDay = dayOfMonth; | 541 | mAnaDay = dayOfMonth; |
| 531 | Date date = mCalendar.getTime(); | 542 | Date date = mCalendar.getTime(); |
| 532 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); | 543 | tvDate.setText(Utils.dateToStringFormatDayMonthYearJp(date)); |
| 533 | mAnaDate = date; | 544 | mAnaDate = date; |
| 534 | getTopPage(mAnaDate, stepType); | 545 | getTopPage(mAnaDate, stepType); |
| 535 | } | 546 | } |
| 536 | }, mAnaYear, mAnaMonth, mAnaDay).show(); | 547 | }, mAnaYear, mAnaMonth, mAnaDay).show(); |
| 537 | 548 | ||
| 538 | } | 549 | } |
| 539 | 550 | ||
| 540 | 551 | ||
| 541 | private void updateUI(){ | 552 | private void updateUI(){ |
| 542 | stepTotal = stepTotal + stepCount; | 553 | Debug.normal("Step total================ "+ stepTotal); |
| 543 | stepRemain = stepRemain - stepCount; | 554 | int stepRemain = stepGoal - stepTotal; |
| 544 | double percentDone = stepTotal *100.0 / (stepTotal + stepRemain); | 555 | double percentDone = stepTotal *100.0 / stepGoal; |
| 545 | stepsView.setText(String.valueOf(stepTotal)); | 556 | stepsView.setText(String.valueOf(stepTotal)); |
| 546 | tvStepRemain.setText(String.valueOf(stepRemain)); | 557 | tvStepRemain.setText(String.valueOf(stepRemain)); |
| 547 | tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(percentDone))); | 558 | tvStepRateDone.setText(getResources().getString(R.string.percent_unit, Utils.convert2String2Decimal(percentDone))); |
| 548 | tvSmallRemain.setText(String.valueOf(stepRemain)); | 559 | tvSmallRemain.setText(String.valueOf(stepRemain)); |
| 549 | } | 560 | } |
| 550 | 561 | ||
| 551 | @Override | 562 | @Override |
| 552 | public void onAttach(Context context) { | 563 | public void onAttach(Context context) { |
| 553 | super.onAttach(context); | 564 | super.onAttach(context); |
| 554 | 565 | ||
| 555 | } | 566 | } |
| 556 | 567 | ||
| 557 | @Override | 568 | @Override |
| 558 | public void onSaveData() { | 569 | public void onSaveData() { |
| 559 | 570 | ||
| 560 | } | 571 | } |
| 561 | 572 | ||
| 562 | @Override | 573 | @Override |
| 563 | public void onInvalidate(boolean isInit) { | 574 | public void onInvalidate(boolean isInit) { |
| 564 | initData(); | 575 | initData(); |
| 565 | } | 576 | } |
| 566 | 577 | ||
| 567 | @Override | 578 | @Override |
| 568 | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { | 579 | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { |
| 569 | super.onViewStateRestored(savedInstanceState); | 580 | super.onViewStateRestored(savedInstanceState); |
| 570 | 581 | ||
| 571 | initData(); | 582 | initData(); |
| 572 | } | 583 | } |
| 573 | 584 | ||
| 574 | 585 | ||
| 575 | @Override | 586 | @Override |
| 576 | public void onResume() { | 587 | public void onResume() { |
| 577 | super.onResume(); | 588 | super.onResume(); |
| 578 | activityRunning = true; | 589 | activityRunning = true; |
| 579 | Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); | 590 | Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); |
| 580 | if (countSensor != null) { | 591 | if (countSensor != null) { |
| 581 | sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI); | 592 | sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI); |
| 582 | } else { | 593 | } else { |
| 583 | Toast.makeText(mContext, getResources().getString(R.string.sensor_available), Toast.LENGTH_SHORT).show(); | 594 | Toast.makeText(mContext, getResources().getString(R.string.sensor_available), Toast.LENGTH_SHORT).show(); |
| 584 | } | 595 | } |
| 585 | } | 596 | } |
| 586 | 597 | ||
| 587 | @Override | 598 | @Override |
| 588 | public void onSensorChanged(SensorEvent event) { | 599 | public void onSensorChanged(SensorEvent event) { |
| 589 | Debug.normal("Sensor count step active"); | 600 | Debug.normal("Sensor count step active"); |
| 590 | if (activityRunning){ | 601 | if (activityRunning){ |
| 591 | stepCount = (int) event.values[0]; | 602 | stepCount = (int) event.values[0]; |
| 603 | Debug.normal("Step change: "+ stepCount); | ||
| 604 | stepTotal++; | ||
| 592 | // update UI | 605 | // update UI |
| 593 | updateUI(); | 606 | updateUI(); |
| 594 | } | 607 | } |
| 595 | } | 608 | } |
| 596 | 609 | ||
| 597 | @Override | 610 | @Override |
| 598 | public void onAccuracyChanged(Sensor sensor, int accuracy) { | 611 | public void onAccuracyChanged(Sensor sensor, int accuracy) { |
| 599 | 612 | ||
| 600 | } | 613 | } |
| 601 | 614 | ||
| 602 | @Override | 615 | @Override |
| 603 | public void onPause() { | 616 | public void onPause() { |
| 604 | super.onPause(); | 617 | super.onPause(); |
| 605 | activityRunning = false; | 618 | activityRunning = false; |
| 606 | Debug.normal("Start create log"); | 619 | Debug.normal("Start create log"); |
| 607 | mToDate = new Date(); | 620 | mToDate = new Date(); |
| 621 | if (sensorManager != null) { | ||
| 622 | sensorManager.unregisterListener(this); | ||
| 623 | } | ||
| 608 | // create log step | 624 | // create log step |
| 609 | creatLogStep(); | 625 | creatLogStep(); |
| 610 | } | 626 | } |
| 611 | 627 | ||
| 612 | @Override | 628 | @Override |
| 613 | public void onDestroy() { | 629 | public void onDestroy() { |
| 614 | super.onDestroy(); | 630 | super.onDestroy(); |
| 615 | } | 631 | } |
| 616 | 632 | ||
| 617 | private void creatLogStep(){ | 633 | private void creatLogStep(){ |
| 618 | 634 | ||
| 619 | LLAPIManager.createLog(stepType, stepCount, mFromDate, mToDate, new LLAPIManagerListener() { | 635 | LLAPIManager.createLog(stepType, stepCount, mFromDate, mToDate, new LLAPIManagerListener() { |
| 620 | @Override | 636 | @Override |
| 621 | public void onError(Error error) { | 637 | public void onError(Error error) { |
| 622 | Debug.error("Get data history error"); | 638 | Debug.error("Get data history error"); |
| 623 | } | 639 | } |
| 624 | 640 | ||
| 625 | @Override | 641 | @Override |
| 626 | public void onSuccess(String json) { | 642 | public void onSuccess(String json) { |
| 627 | Debug.error("Get data history success"); | 643 | Debug.error("Get data history success"); |
| 628 | } | 644 | } |
| 629 | 645 | ||
| 630 | @Override | 646 | @Override |
| 631 | public void onSuccess(JSONObject object) { | 647 | public void onSuccess(JSONObject object) { |
| 632 | Debug.error("Get data history success"); | 648 | Debug.error("Get data history success"); |
| 633 | } | 649 | } |
| 634 | }); | 650 | }); |
| 635 | } | 651 | } |
app/src/main/res/layout/fragment_top_today.xml
| 1 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | 1 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
| 2 | xmlns:appNs="http://schemas.android.com/apk/res-auto" | 2 | xmlns:appNs="http://schemas.android.com/apk/res-auto" |
| 3 | android:layout_width="match_parent" | 3 | android:layout_width="match_parent" |
| 4 | android:layout_height="match_parent" | 4 | android:layout_height="match_parent" |
| 5 | android:background="@color/background_main"> | 5 | android:background="@color/background_main"> |
| 6 | 6 | ||
| 7 | <ScrollView | 7 | <ScrollView |
| 8 | android:layout_width="match_parent" | 8 | android:layout_width="match_parent" |
| 9 | android:layout_height="match_parent" | 9 | android:layout_height="match_parent" |
| 10 | android:layout_alignParentTop="true" | 10 | android:layout_alignParentTop="true" |
| 11 | android:layout_alignParentStart="true" | 11 | android:layout_alignParentStart="true" |
| 12 | android:layout_above="@+id/ll_stepType"> | 12 | android:layout_above="@+id/ll_stepType"> |
| 13 | 13 | ||
| 14 | <LinearLayout | 14 | <LinearLayout |
| 15 | android:layout_width="match_parent" | 15 | android:layout_width="match_parent" |
| 16 | android:layout_height="wrap_content" | 16 | android:layout_height="wrap_content" |
| 17 | android:orientation="vertical" | 17 | android:orientation="vertical" |
| 18 | android:padding="10dp"> | 18 | android:padding="10dp"> |
| 19 | 19 | ||
| 20 | 20 | ||
| 21 | <LinearLayout | 21 | <LinearLayout |
| 22 | android:layout_width="match_parent" | 22 | android:layout_width="match_parent" |
| 23 | android:layout_height="wrap_content" | 23 | android:layout_height="wrap_content" |
| 24 | android:orientation="horizontal" | 24 | android:orientation="horizontal" |
| 25 | android:paddingTop="10dp"> | 25 | android:paddingTop="10dp"> |
| 26 | 26 | ||
| 27 | <ImageView | 27 | <ImageView |
| 28 | android:id="@+id/iv_back" | 28 | android:id="@+id/iv_back" |
| 29 | android:layout_width="@dimen/next_date_height" | 29 | android:layout_width="@dimen/next_date_height" |
| 30 | android:layout_height="@dimen/next_date_height" | 30 | android:layout_height="@dimen/next_date_height" |
| 31 | android:src="@drawable/back_ic" /> | 31 | android:src="@drawable/back_ic" /> |
| 32 | 32 | ||
| 33 | <TextView | 33 | <TextView |
| 34 | android:id="@+id/tv_date" | 34 | android:id="@+id/tv_date" |
| 35 | android:layout_width="0dp" | 35 | android:layout_width="0dp" |
| 36 | android:layout_height="match_parent" | 36 | android:layout_height="match_parent" |
| 37 | android:layout_weight="1.0" | 37 | android:layout_weight="1.0" |
| 38 | android:gravity="center" | 38 | android:gravity="center" |
| 39 | android:text="2017ๅนด1ๆ1ๆฅ" | 39 | android:text="2017ๅนด1ๆ1ๆฅ" |
| 40 | android:textColor="@color/white" | 40 | android:textColor="@color/white" |
| 41 | android:textSize="23sp" /> | 41 | android:textSize="23sp" /> |
| 42 | 42 | ||
| 43 | <ImageView | 43 | <ImageView |
| 44 | android:id="@+id/iv_next" | 44 | android:id="@+id/iv_next" |
| 45 | android:layout_width="@dimen/next_date_height" | 45 | android:layout_width="@dimen/next_date_height" |
| 46 | android:layout_height="@dimen/next_date_height" | 46 | android:layout_height="@dimen/next_date_height" |
| 47 | android:src="@drawable/next_ic" /> | 47 | android:src="@drawable/next_ic" /> |
| 48 | 48 | ||
| 49 | </LinearLayout> | 49 | </LinearLayout> |
| 50 | 50 | ||
| 51 | <LinearLayout | 51 | <LinearLayout |
| 52 | android:layout_width="match_parent" | 52 | android:layout_width="match_parent" |
| 53 | android:layout_height="wrap_content" | 53 | android:layout_height="wrap_content" |
| 54 | android:orientation="horizontal" | 54 | android:orientation="horizontal" |
| 55 | android:paddingTop="10dp" | 55 | android:paddingTop="10dp" |
| 56 | android:weightSum="100"> | 56 | android:weightSum="100"> |
| 57 | 57 | ||
| 58 | <LinearLayout | 58 | <LinearLayout |
| 59 | android:layout_width="0dp" | 59 | android:layout_width="0dp" |
| 60 | android:layout_height="wrap_content" | 60 | android:layout_height="wrap_content" |
| 61 | android:layout_weight="15" | 61 | android:layout_weight="15" |
| 62 | android:orientation="vertical"> | 62 | android:orientation="vertical"> |
| 63 | 63 | ||
| 64 | <ImageView | 64 | <ImageView |
| 65 | android:layout_width="match_parent" | 65 | android:layout_width="match_parent" |
| 66 | android:layout_height="wrap_content" | 66 | android:layout_height="wrap_content" |
| 67 | android:src="@drawable/goout_ic" | 67 | android:src="@drawable/goout_ic" |
| 68 | android:adjustViewBounds="true"/> | 68 | android:adjustViewBounds="true"/> |
| 69 | 69 | ||
| 70 | <ImageView | 70 | <ImageView |
| 71 | android:layout_width="match_parent" | 71 | android:layout_width="match_parent" |
| 72 | android:layout_height="wrap_content" | 72 | android:layout_height="wrap_content" |
| 73 | android:src="@drawable/ic_face" | 73 | android:src="@drawable/ic_face" |
| 74 | android:adjustViewBounds="true" | 74 | android:adjustViewBounds="true" |
| 75 | android:paddingTop="6dp"/> | 75 | android:paddingTop="6dp"/> |
| 76 | 76 | ||
| 77 | <ImageView | 77 | <ImageView |
| 78 | android:layout_width="match_parent" | 78 | android:layout_width="match_parent" |
| 79 | android:layout_height="wrap_content" | 79 | android:layout_height="wrap_content" |
| 80 | android:src="@drawable/ic_line" | 80 | android:src="@drawable/ic_line" |
| 81 | android:adjustViewBounds="true" | 81 | android:adjustViewBounds="true" |
| 82 | android:paddingTop="10dp"/> | 82 | android:paddingTop="10dp"/> |
| 83 | 83 | ||
| 84 | </LinearLayout> | 84 | </LinearLayout> |
| 85 | 85 | ||
| 86 | <RelativeLayout | 86 | <RelativeLayout |
| 87 | android:layout_width="0dp" | 87 | android:layout_width="0dp" |
| 88 | android:layout_height="wrap_content" | 88 | android:layout_height="wrap_content" |
| 89 | android:layout_weight="60" | 89 | android:layout_weight="60" |
| 90 | android:paddingLeft="10dp"> | 90 | android:paddingLeft="10dp"> |
| 91 | 91 | ||
| 92 | <org.eazegraph.lib.charts.PieChart | 92 | <org.eazegraph.lib.charts.PieChart |
| 93 | xmlns:eaze="http://schemas.android.com/apk/res-auto" | 93 | xmlns:eaze="http://schemas.android.com/apk/res-auto" |
| 94 | android:id="@+id/graph" | 94 | android:id="@+id/graph" |
| 95 | android:layout_width="match_parent" | 95 | android:layout_width="match_parent" |
| 96 | android:layout_height="200dp" | 96 | android:layout_height="200dp" |
| 97 | android:layout_marginTop="10dp" | 97 | android:layout_marginTop="10dp" |
| 98 | eaze:egLegendHeight="0dp" | 98 | eaze:egLegendHeight="0dp" |
| 99 | eaze:egInnerPadding="93" | 99 | eaze:egInnerPadding="93" |
| 100 | eaze:egInnerPaddingColor="@color/background_main" | 100 | eaze:egInnerPaddingColor="@color/background_main" |
| 101 | eaze:egHighlightStrength="1"/> | 101 | eaze:egHighlightStrength="1"/> |
| 102 | 102 | ||
| 103 | <LinearLayout | 103 | <LinearLayout |
| 104 | android:layout_width="match_parent" | 104 | android:layout_width="match_parent" |
| 105 | android:layout_height="200dp" | 105 | android:layout_height="200dp" |
| 106 | android:layout_marginTop="10dp" | 106 | android:layout_marginTop="10dp" |
| 107 | android:orientation="vertical" | 107 | android:orientation="vertical" |
| 108 | android:gravity="center_horizontal"> | 108 | android:gravity="center_horizontal"> |
| 109 | 109 | ||
| 110 | <ImageView | 110 | <ImageView |
| 111 | android:layout_width="@dimen/walking_img_height" | 111 | android:layout_width="@dimen/walking_img_height" |
| 112 | android:layout_height="@dimen/walking_img_height" | 112 | android:layout_height="@dimen/walking_img_height" |
| 113 | android:layout_marginTop="25dp" | 113 | android:layout_marginTop="25dp" |
| 114 | android:gravity="center" | 114 | android:gravity="center" |
| 115 | android:src="@drawable/walking_ic"/> | 115 | android:src="@drawable/walking_ic"/> |
| 116 | 116 | ||
| 117 | <TextView | 117 | <TextView |
| 118 | android:id="@+id/steps" | 118 | android:id="@+id/steps" |
| 119 | android:layout_width="match_parent" | 119 | android:layout_width="match_parent" |
| 120 | android:layout_height="wrap_content" | 120 | android:layout_height="wrap_content" |
| 121 | android:gravity="center" | 121 | android:gravity="center" |
| 122 | android:textSize="45sp" | 122 | android:textSize="45sp" |
| 123 | android:text="10.000" | 123 | android:text="10.000" |
| 124 | android:textColor="@color/white"/> | 124 | android:textColor="@color/white"/> |
| 125 | 125 | ||
| 126 | <TextView | 126 | <TextView |
| 127 | android:id="@+id/tv_smallStepGoal" | 127 | android:id="@+id/tv_smallStepGoal" |
| 128 | android:layout_width="wrap_content" | 128 | android:layout_width="wrap_content" |
| 129 | android:layout_height="wrap_content" | 129 | android:layout_height="wrap_content" |
| 130 | android:text="@string/pie_text_content1" | 130 | android:text="@string/pie_text_content1" |
| 131 | android:textSize="14sp" | 131 | android:textSize="14sp" |
| 132 | android:padding="4dp" | 132 | android:padding="4dp" |
| 133 | android:textColor="@color/white"/> | 133 | android:textColor="@color/white"/> |
| 134 | 134 | ||
| 135 | <TextView | 135 | <TextView |
| 136 | android:layout_width="wrap_content" | 136 | android:layout_width="wrap_content" |
| 137 | android:layout_height="wrap_content" | 137 | android:layout_height="wrap_content" |
| 138 | android:text="@string/pie_text_content2" | 138 | android:text="@string/pie_text_content2" |
| 139 | android:textSize="14sp" | 139 | android:textSize="14sp" |
| 140 | android:textColor="@color/white"/> | 140 | android:textColor="@color/white"/> |
| 141 | 141 | ||
| 142 | <TextView | 142 | <TextView |
| 143 | android:id="@+id/tv_smallRemain" | 143 | android:id="@+id/tv_smallRemain" |
| 144 | android:layout_width="wrap_content" | 144 | android:layout_width="wrap_content" |
| 145 | android:layout_height="wrap_content" | 145 | android:layout_height="wrap_content" |
| 146 | android:layout_below="@+id/steps" | 146 | android:layout_below="@+id/steps" |
| 147 | android:layout_centerHorizontal="true" | 147 | android:layout_centerHorizontal="true" |
| 148 | android:text="@string/pie_text_content3" | 148 | android:text="@string/pie_text_content3" |
| 149 | android:textSize="14sp" | 149 | android:textSize="14sp" |
| 150 | android:textColor="@color/white"/> | 150 | android:textColor="@color/white"/> |
| 151 | 151 | ||
| 152 | </LinearLayout> | 152 | </LinearLayout> |
| 153 | 153 | ||
| 154 | </RelativeLayout> | 154 | </RelativeLayout> |
| 155 | 155 | ||
| 156 | <LinearLayout | 156 | <LinearLayout |
| 157 | android:layout_width="0dp" | 157 | android:layout_width="0dp" |
| 158 | android:layout_height="wrap_content" | 158 | android:layout_height="wrap_content" |
| 159 | android:layout_weight="25" | 159 | android:layout_weight="25" |
| 160 | android:gravity="center" | 160 | android:gravity="center" |
| 161 | android:orientation="vertical"> | 161 | android:orientation="vertical"> |
| 162 | 162 | ||
| 163 | <TextView | 163 | <TextView |
| 164 | android:layout_width="wrap_content" | 164 | android:layout_width="wrap_content" |
| 165 | android:layout_height="wrap_content" | 165 | android:layout_height="wrap_content" |
| 166 | android:text="@string/goal_jp" | 166 | android:text="@string/goal_jp" |
| 167 | android:textColor="@color/white" | 167 | android:textColor="@color/white" |
| 168 | android:textSize="16sp" /> | 168 | android:textSize="16sp" /> |
| 169 | 169 | ||
| 170 | <TextView | 170 | <TextView |
| 171 | android:id="@+id/tv_stepGoal" | 171 | android:id="@+id/tv_stepGoal" |
| 172 | android:layout_width="wrap_content" | 172 | android:layout_width="wrap_content" |
| 173 | android:layout_height="wrap_content" | 173 | android:layout_height="wrap_content" |
| 174 | android:paddingLeft="10dp" | 174 | android:paddingLeft="10dp" |
| 175 | android:text="10000ๆญฉ" | 175 | android:text="10000ๆญฉ" |
| 176 | android:textColor="@color/white" | 176 | android:textColor="@color/white" |
| 177 | android:textSize="16sp" /> | 177 | android:textSize="16sp" /> |
| 178 | 178 | ||
| 179 | <TextView | 179 | <TextView |
| 180 | android:layout_width="wrap_content" | 180 | android:layout_width="wrap_content" |
| 181 | android:layout_height="wrap_content" | 181 | android:layout_height="wrap_content" |
| 182 | android:paddingTop="10dp" | 182 | android:paddingTop="10dp" |
| 183 | android:text="@string/remaining_number_step" | 183 | android:text="@string/remaining_number_step" |
| 184 | android:textColor="@color/white" | 184 | android:textColor="@color/white" |
| 185 | android:textSize="16sp" /> | 185 | android:textSize="16sp" /> |
| 186 | 186 | ||
| 187 | <TextView | 187 | <TextView |
| 188 | android:id="@+id/tv_stepRemain" | 188 | android:id="@+id/tv_stepRemain" |
| 189 | android:layout_width="wrap_content" | 189 | android:layout_width="wrap_content" |
| 190 | android:layout_height="wrap_content" | 190 | android:layout_height="wrap_content" |
| 191 | android:paddingLeft="10dp" | 191 | android:paddingLeft="10dp" |
| 192 | android:text="3000ๆญฉ" | 192 | android:text="3000ๆญฉ" |
| 193 | android:textColor="@color/white" | 193 | android:textColor="@color/white" |
| 194 | android:textSize="16sp" /> | 194 | android:textSize="16sp" /> |
| 195 | 195 | ||
| 196 | <TextView | 196 | <TextView |
| 197 | android:layout_width="wrap_content" | 197 | android:layout_width="wrap_content" |
| 198 | android:layout_height="wrap_content" | 198 | android:layout_height="wrap_content" |
| 199 | android:paddingTop="10dp" | 199 | android:paddingTop="10dp" |
| 200 | android:text="@string/achiverment_rate" | 200 | android:text="@string/achiverment_rate" |
| 201 | android:textColor="@color/white" | 201 | android:textColor="@color/white" |
| 202 | android:textSize="16sp" /> | 202 | android:textSize="16sp" /> |
| 203 | 203 | ||
| 204 | <TextView | 204 | <TextView |
| 205 | android:id="@+id/tv_stepRateDone" | 205 | android:id="@+id/tv_stepRateDone" |
| 206 | android:layout_width="wrap_content" | 206 | android:layout_width="wrap_content" |
| 207 | android:layout_height="wrap_content" | 207 | android:layout_height="wrap_content" |
| 208 | android:paddingLeft="10dp" | 208 | android:paddingLeft="10dp" |
| 209 | android:text="78%" | 209 | android:text="78%" |
| 210 | android:textColor="@color/white" | 210 | android:textColor="@color/white" |
| 211 | android:textSize="16sp" /> | 211 | android:textSize="16sp" /> |
| 212 | 212 | ||
| 213 | </LinearLayout> | 213 | </LinearLayout> |
| 214 | 214 | ||
| 215 | </LinearLayout> | 215 | </LinearLayout> |
| 216 | 216 | ||
| 217 | <LinearLayout | 217 | <LinearLayout |
| 218 | android:layout_width="match_parent" | 218 | android:layout_width="match_parent" |
| 219 | android:layout_height="wrap_content" | 219 | android:layout_height="wrap_content" |
| 220 | android:weightSum="100" | 220 | android:weightSum="100" |
| 221 | android:paddingTop="20dp" | 221 | android:paddingTop="20dp" |
| 222 | android:orientation="horizontal"> | 222 | android:orientation="horizontal"> |
| 223 | 223 | ||
| 224 | <LinearLayout | 224 | <LinearLayout |
| 225 | android:layout_width="0dp" | 225 | android:layout_width="0dp" |
| 226 | android:layout_height="wrap_content" | 226 | android:layout_height="wrap_content" |
| 227 | android:layout_weight="20" | 227 | android:layout_weight="10" |
| 228 | android:gravity="center" | 228 | android:gravity="center" |
| 229 | android:orientation="vertical"> | 229 | android:orientation="vertical"> |
| 230 | 230 | ||
| 231 | </LinearLayout> | 231 | </LinearLayout> |
| 232 | 232 | ||
| 233 | <LinearLayout | 233 | <LinearLayout |
| 234 | android:layout_width="0dp" | 234 | android:layout_width="0dp" |
| 235 | android:layout_height="wrap_content" | 235 | android:layout_height="wrap_content" |
| 236 | android:layout_weight="20" | 236 | android:layout_weight="20" |
| 237 | android:gravity="center" | 237 | android:gravity="center" |
| 238 | android:orientation="vertical"> | 238 | android:orientation="vertical"> |
| 239 | 239 | ||
| 240 | <ImageView | 240 | <ImageView |
| 241 | android:layout_width="wrap_content" | 241 | android:layout_width="wrap_content" |
| 242 | android:layout_height="wrap_content" | 242 | android:layout_height="wrap_content" |
| 243 | android:src="@drawable/category" | 243 | android:src="@drawable/category" |
| 244 | android:adjustViewBounds="true"/> | 244 | android:adjustViewBounds="true"/> |
| 245 | 245 | ||
| 246 | </LinearLayout> | 246 | </LinearLayout> |
| 247 | 247 | ||
| 248 | <LinearLayout | 248 | <LinearLayout |
| 249 | android:layout_width="0dp" | 249 | android:layout_width="0dp" |
| 250 | android:layout_height="wrap_content" | 250 | android:layout_height="wrap_content" |
| 251 | android:layout_weight="20" | 251 | android:layout_weight="30" |
| 252 | android:gravity="center" | 252 | android:gravity="center" |
| 253 | android:orientation="vertical"> | 253 | android:orientation="vertical"> |
| 254 | 254 | ||
| 255 | <TextView | 255 | <TextView |
| 256 | android:id="@+id/tv_distance" | 256 | android:id="@+id/tv_distance" |
| 257 | android:layout_width="wrap_content" | 257 | android:layout_width="wrap_content" |
| 258 | android:layout_height="wrap_content" | 258 | android:layout_height="wrap_content" |
| 259 | android:text="4.9" | 259 | android:text="4.9" |
| 260 | android:textColor="@color/white" | 260 | android:textColor="@color/white" |
| 261 | android:textSize="30sp" /> | 261 | android:textSize="22sp" /> |
| 262 | 262 | ||
| 263 | </LinearLayout> | 263 | </LinearLayout> |
| 264 | 264 | ||
| 265 | <LinearLayout | 265 | <LinearLayout |
| 266 | android:layout_width="0dp" | 266 | android:layout_width="0dp" |
| 267 | android:layout_height="wrap_content" | 267 | android:layout_height="wrap_content" |
| 268 | android:layout_weight="20" | 268 | android:layout_weight="30" |
| 269 | android:gravity="center" | 269 | android:gravity="center" |
| 270 | android:orientation="vertical"> | 270 | android:orientation="vertical"> |
| 271 | 271 | ||
| 272 | <TextView | 272 | <TextView |
| 273 | android:id="@+id/tv_time" | 273 | android:id="@+id/tv_time" |
| 274 | android:layout_width="wrap_content" | 274 | android:layout_width="wrap_content" |
| 275 | android:layout_height="wrap_content" | 275 | android:layout_height="wrap_content" |
| 276 | android:text="1:09" | 276 | android:text="1:09" |
| 277 | android:textColor="@color/white" | 277 | android:textColor="@color/white" |
| 278 | android:textSize="30sp" /> | 278 | android:textSize="22sp" /> |
| 279 | 279 | ||
| 280 | </LinearLayout> | 280 | </LinearLayout> |
| 281 | 281 | ||
| 282 | <LinearLayout | 282 | <LinearLayout |
| 283 | android:layout_width="0dp" | 283 | android:layout_width="0dp" |
| 284 | android:layout_height="wrap_content" | 284 | android:layout_height="wrap_content" |
| 285 | android:layout_weight="20" | 285 | android:layout_weight="10" |
| 286 | android:gravity="center" | 286 | android:gravity="center" |
| 287 | android:orientation="vertical"> | 287 | android:orientation="vertical"> |
| 288 | 288 | ||
| 289 | <ImageView | 289 | <ImageView |
| 290 | android:layout_width="@dimen/next_date_height" | 290 | android:layout_width="@dimen/next_date_height" |
| 291 | android:layout_height="wrap_content" | 291 | android:layout_height="wrap_content" |
| 292 | android:src="@drawable/pause" | 292 | android:src="@drawable/pause" |
| 293 | android:background="@color/white" | 293 | android:background="@color/white" |
| 294 | android:adjustViewBounds="true" | 294 | android:adjustViewBounds="true" |
| 295 | android:visibility="gone"/> | 295 | android:visibility="gone"/> |
| 296 | 296 | ||
| 297 | </LinearLayout> | 297 | </LinearLayout> |
| 298 | </LinearLayout> | 298 | </LinearLayout> |
| 299 | 299 | ||
| 300 | <LinearLayout | 300 | <LinearLayout |
| 301 | android:layout_width="match_parent" | 301 | android:layout_width="match_parent" |
| 302 | android:layout_height="wrap_content" | 302 | android:layout_height="wrap_content" |
| 303 | android:weightSum="100" | 303 | android:weightSum="100" |
| 304 | android:orientation="horizontal"> | 304 | android:orientation="horizontal"> |
| 305 | 305 | ||
| 306 | <LinearLayout | 306 | <LinearLayout |
| 307 | android:layout_width="0dp" | 307 | android:layout_width="0dp" |
| 308 | android:layout_height="wrap_content" | 308 | android:layout_height="wrap_content" |
| 309 | android:layout_weight="20" | 309 | android:layout_weight="20" |
| 310 | android:gravity="center" | 310 | android:gravity="center" |
| 311 | android:orientation="vertical"> | 311 | android:orientation="vertical"> |
| 312 | 312 | ||
| 313 | </LinearLayout> | 313 | </LinearLayout> |
| 314 | 314 | ||
| 315 | <LinearLayout | 315 | <LinearLayout |
| 316 | android:layout_width="0dp" | 316 | android:layout_width="0dp" |
| 317 | android:layout_height="wrap_content" | 317 | android:layout_height="wrap_content" |
| 318 | android:layout_weight="20" | 318 | android:layout_weight="20" |
| 319 | android:gravity="center" | 319 | android:gravity="center" |
| 320 | android:orientation="vertical"> | 320 | android:orientation="vertical"> |
| 321 | 321 | ||
| 322 | <TextView | 322 | <TextView |
| 323 | android:layout_width="wrap_content" | 323 | android:layout_width="wrap_content" |
| 324 | android:layout_height="wrap_content" | 324 | android:layout_height="wrap_content" |
| 325 | android:text="@string/carori" | 325 | android:text="@string/carori" |
| 326 | android:textColor="@color/white" | 326 | android:textColor="@color/white" |
| 327 | android:textSize="16sp" /> | 327 | android:textSize="16sp" /> |
| 328 | 328 | ||
| 329 | </LinearLayout> | 329 | </LinearLayout> |
| 330 | 330 | ||
| 331 | <LinearLayout | 331 | <LinearLayout |
| 332 | android:layout_width="0dp" | 332 | android:layout_width="0dp" |
| 333 | android:layout_height="wrap_content" | 333 | android:layout_height="wrap_content" |
| 334 | android:layout_weight="20" | 334 | android:layout_weight="20" |
| 335 | android:gravity="center" | 335 | android:gravity="center" |
| 336 | android:orientation="vertical"> | 336 | android:orientation="vertical"> |
| 337 | 337 | ||
| 338 | <TextView | 338 | <TextView |
| 339 | android:layout_width="wrap_content" | 339 | android:layout_width="wrap_content" |
| 340 | android:layout_height="wrap_content" | 340 | android:layout_height="wrap_content" |
| 341 | android:text="@string/km" | 341 | android:text="@string/km" |
| 342 | android:textColor="@color/white" | 342 | android:textColor="@color/white" |
| 343 | android:textSize="16sp" /> | 343 | android:textSize="16sp" /> |
| 344 | 344 | ||
| 345 | </LinearLayout> | 345 | </LinearLayout> |
| 346 | 346 | ||
| 347 | <LinearLayout | 347 | <LinearLayout |
| 348 | android:layout_width="0dp" | 348 | android:layout_width="0dp" |
| 349 | android:layout_height="wrap_content" | 349 | android:layout_height="wrap_content" |
| 350 | android:layout_weight="20" | 350 | android:layout_weight="20" |
| 351 | android:gravity="center" | 351 | android:gravity="center" |
| 352 | android:orientation="vertical"> | 352 | android:orientation="vertical"> |
| 353 | 353 | ||
| 354 | <TextView | 354 | <TextView |
| 355 | android:layout_width="wrap_content" | 355 | android:layout_width="wrap_content" |
| 356 | android:layout_height="wrap_content" | 356 | android:layout_height="wrap_content" |
| 357 | android:text="@string/time" | 357 | android:text="@string/time" |
| 358 | android:textColor="@color/white" | 358 | android:textColor="@color/white" |
| 359 | android:textSize="16sp" /> | 359 | android:textSize="16sp" /> |
| 360 | 360 | ||
| 361 | </LinearLayout> | 361 | </LinearLayout> |
| 362 | </LinearLayout> | 362 | </LinearLayout> |
| 363 | 363 | ||
| 364 | 364 | ||
| 365 | <LinearLayout | 365 | <LinearLayout |
| 366 | android:layout_width="match_parent" | 366 | android:layout_width="match_parent" |
| 367 | android:layout_height="120dp" | 367 | android:layout_height="120dp" |
| 368 | android:orientation="vertical" | 368 | android:orientation="vertical" |
| 369 | android:layout_marginTop="10dp"> | 369 | android:layout_marginTop="10dp"> |
| 370 | 370 | ||
| 371 | <!--<org.eazegraph.lib.charts.BarChart--> | 371 | <!--<org.eazegraph.lib.charts.BarChart--> |
| 372 | <!--xmlns:eaze="http://schemas.android.com/apk/res-auto"--> | 372 | <!--xmlns:eaze="http://schemas.android.com/apk/res-auto"--> |
| 373 | <!--android:id="@+id/bargraph"--> | 373 | <!--android:id="@+id/bargraph"--> |
| 374 | <!--android:layout_width="match_parent"--> | 374 | <!--android:layout_width="match_parent"--> |
| 375 | <!--android:layout_height="120dp"--> | 375 | <!--android:layout_height="120dp"--> |
| 376 | <!--android:layout_below="@+id/averageandtotaltext"--> | 376 | <!--android:layout_below="@+id/averageandtotaltext"--> |
| 377 | <!--eaze:egLegendHeight="0dp"--> | 377 | <!--eaze:egLegendHeight="0dp"--> |
| 378 | <!--eaze:egShowValues="false" />--> | 378 | <!--eaze:egShowValues="false" />--> |
| 379 | <com.github.mikephil.charting.charts.BarChart | 379 | <com.github.mikephil.charting.charts.BarChart |
| 380 | android:id="@+id/chart" | 380 | android:id="@+id/chart" |
| 381 | android:layout_width="match_parent" | 381 | android:layout_width="match_parent" |
| 382 | android:layout_height="match_parent" /> | 382 | android:layout_height="match_parent" /> |
| 383 | 383 | ||
| 384 | 384 | ||
| 385 | </LinearLayout> | 385 | </LinearLayout> |
| 386 | 386 | ||
| 387 | 387 | ||
| 388 | </LinearLayout> | 388 | </LinearLayout> |
| 389 | </ScrollView> | 389 | </ScrollView> |
| 390 | 390 | ||
| 391 | <include layout="@layout/type_step" /> | 391 | <include layout="@layout/type_step" /> |
| 392 | </RelativeLayout> | 392 | </RelativeLayout> |
| 393 | 393 |
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