1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-08-15 05:04:22 +02:00

show or hide a yearly diagram

This commit is contained in:
OliE
2017-04-29 08:56:19 +02:00
parent e301a92db1
commit cc60815d75
4 changed files with 116 additions and 26 deletions

View File

@@ -360,6 +360,13 @@ public class OpenScale {
return scaleDB.getScaleDataOfMonth(selectedUserId, year, month); return scaleDB.getScaleDataOfMonth(selectedUserId, year, month);
} }
public ArrayList<ScaleData> getScaleDataOfYear(int year) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
int selectedUserId = prefs.getInt("selectedUserId", -1);
return scaleDB.getScaleDataOfYear(selectedUserId, year);
}
public void startSearchingForBluetooth(int btScales, String deviceName, Handler callbackBtHandler) { public void startSearchingForBluetooth(int btScales, String deviceName, Handler callbackBtHandler) {
Log.d("OpenScale", "Bluetooth Server started! I am searching for device ..."); Log.d("OpenScale", "Bluetooth Server started! I am searching for device ...");

View File

@@ -267,6 +267,40 @@ public class ScaleDatabase extends SQLiteOpenHelper {
return scaleDataList; return scaleDataList;
} }
public ArrayList<ScaleData> getScaleDataOfYear(int userId, int year) {
ArrayList<ScaleData> scaleDataList = new ArrayList<ScaleData>();
String sortOrder = COLUMN_NAME_DATE_TIME + " DESC";
Calendar start_cal = Calendar.getInstance();
Calendar end_cal = Calendar.getInstance();
start_cal.set(year, Calendar.JANUARY, 1, 0, 0, 0);
end_cal.set(year, Calendar.DECEMBER, 1, 0, 0, 0);
Cursor cursorScaleDB = dbRead.query(
TABLE_NAME, // The table to query
projection, // The columns to return
COLUMN_NAME_DATE_TIME + " >= ? AND " + COLUMN_NAME_DATE_TIME + " < ? AND " + COLUMN_NAME_USER_ID + "=? AND " + COLUMN_NAME_ENABLE + "=1", // The columns for the WHERE clause
new String[]{formatDateTime.format(start_cal.getTime()), formatDateTime.format(end_cal.getTime()), Integer.toString(userId)}, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);
cursorScaleDB.moveToFirst();
while (!cursorScaleDB.isAfterLast()) {
scaleDataList.add(readAtCursor(cursorScaleDB));
cursorScaleDB.moveToNext();
}
cursorScaleDB.close();
return scaleDataList;
}
public ArrayList<ScaleData> getScaleDataList(int userId) { public ArrayList<ScaleData> getScaleDataList(int userId) {
ArrayList<ScaleData> scaleDataList = new ArrayList<ScaleData>(); ArrayList<ScaleData> scaleDataList = new ArrayList<ScaleData>();

View File

@@ -31,6 +31,7 @@ import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.health.openscale.R; import com.health.openscale.R;
@@ -73,6 +74,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
private FloatingActionButton diagramMuscle; private FloatingActionButton diagramMuscle;
private FloatingActionButton diagramWaist; private FloatingActionButton diagramWaist;
private FloatingActionButton diagramHip; private FloatingActionButton diagramHip;
private FloatingActionButton enableMonth;
private SharedPreferences prefs; private SharedPreferences prefs;
private OpenScale openScale; private OpenScale openScale;
@@ -109,6 +111,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
diagramWaist = (FloatingActionButton) graphView.findViewById(R.id.diagramWaist); diagramWaist = (FloatingActionButton) graphView.findViewById(R.id.diagramWaist);
diagramHip = (FloatingActionButton) graphView.findViewById(R.id.diagramHip); diagramHip = (FloatingActionButton) graphView.findViewById(R.id.diagramHip);
enableMonth = (FloatingActionButton) graphView.findViewById(R.id.enableMonth);
diagramWeight.setOnClickListener(new onClickListenerDiagramLines()); diagramWeight.setOnClickListener(new onClickListenerDiagramLines());
diagramFat.setOnClickListener(new onClickListenerDiagramLines()); diagramFat.setOnClickListener(new onClickListenerDiagramLines());
diagramWater.setOnClickListener(new onClickListenerDiagramLines()); diagramWater.setOnClickListener(new onClickListenerDiagramLines());
@@ -116,6 +120,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
diagramWaist.setOnClickListener(new onClickListenerDiagramLines()); diagramWaist.setOnClickListener(new onClickListenerDiagramLines());
diagramHip.setOnClickListener(new onClickListenerDiagramLines()); diagramHip.setOnClickListener(new onClickListenerDiagramLines());
enableMonth.setOnClickListener(new onClickListenerDiagramLines());
prefs = PreferenceManager.getDefaultSharedPreferences(graphView.getContext()); prefs = PreferenceManager.getDefaultSharedPreferences(graphView.getContext());
if(!prefs.getBoolean("weightEnable", true)) { if(!prefs.getBoolean("weightEnable", true)) {
@@ -167,19 +173,21 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
@Override @Override
public void updateOnView(ArrayList<ScaleData> scaleDataList) public void updateOnView(ArrayList<ScaleData> scaleDataList)
{ {
generateColumnData(); generateGraphs();
} }
private void generateLineData(Calendar calMonth) private void generateLineData(int field)
{ {
scaleDataList = openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calMonth.get(Calendar.MONTH)); SimpleDateFormat day_date = new SimpleDateFormat("D", Locale.getDefault());
SimpleDateFormat day_date = new SimpleDateFormat("dd", Locale.getDefault()); if (field == Calendar.DAY_OF_MONTH) {
day_date = new SimpleDateFormat("dd", Locale.getDefault());
}
Calendar calDays = (Calendar)calMonth.clone(); Calendar calDays = (Calendar)calLastSelected.clone();
calDays.set(Calendar.DAY_OF_MONTH, 1); calDays.set(field, 1);
int maxDays = calDays.getActualMaximum(Calendar.DAY_OF_MONTH); int maxDays = calDays.getActualMaximum(field);
List<AxisValue> axisValues = new ArrayList<AxisValue>(); List<AxisValue> axisValues = new ArrayList<AxisValue>();
@@ -188,7 +196,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
axisValues.add(new AxisValue(i, day_name.toCharArray())); axisValues.add(new AxisValue(i, day_name.toCharArray()));
calDays.add(Calendar.DAY_OF_MONTH, 1); calDays.add(field, 1);
} }
List<PointValue> valuesWeight = new ArrayList<PointValue>(); List<PointValue> valuesWeight = new ArrayList<PointValue>();
@@ -205,12 +213,12 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
{ {
calDB.setTime(scaleEntry.date_time); calDB.setTime(scaleEntry.date_time);
valuesWeight.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.weight)); valuesWeight.add(new PointValue(calDB.get(field)-1, scaleEntry.weight));
valuesFat.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.fat)); valuesFat.add(new PointValue(calDB.get(field)-1, scaleEntry.fat));
valuesWater.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.water)); valuesWater.add(new PointValue(calDB.get(field)-1, scaleEntry.water));
valuesMuscle.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.muscle)); valuesMuscle.add(new PointValue(calDB.get(field)-1, scaleEntry.muscle));
valuesWaist.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.waist)); valuesWaist.add(new PointValue(calDB.get(field)-1, scaleEntry.waist));
valuesHip.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.hip)); valuesHip.add(new PointValue(calDB.get(field)-1, scaleEntry.hip));
} }
@@ -289,6 +297,12 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
diagramHip.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#d3d3d3"))); diagramHip.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#d3d3d3")));
} }
if(prefs.getBoolean(String.valueOf(enableMonth.getId()), true)) {
enableMonth.setBackgroundTintList(ColorStateList.valueOf(ChartUtils.COLOR_BLUE));
} else {
enableMonth.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#d3d3d3")));
}
LineChartData lineData = new LineChartData(lines); LineChartData lineData = new LineChartData(lines);
lineData.setAxisXBottom(new Axis(axisValues). lineData.setAxisXBottom(new Axis(axisValues).
setHasLines(true). setHasLines(true).
@@ -301,11 +315,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
setTextColor(Color.BLACK) setTextColor(Color.BLACK)
); );
chartTop.setLineChartData(lineData); chartTop.setLineChartData(lineData);
defaultTopViewport = new Viewport(0, chartTop.getCurrentViewport().top+4, axisValues.size()-1, chartTop.getCurrentViewport().bottom-4);
defaultTopViewport = new Viewport(0, chartTop.getCurrentViewport().top+4, maxDays-1, chartTop.getCurrentViewport().bottom-4);
chartTop.setMaximumViewport(defaultTopViewport); chartTop.setMaximumViewport(defaultTopViewport);
chartTop.setCurrentViewport(defaultTopViewport); chartTop.setCurrentViewport(defaultTopViewport);
@@ -343,9 +354,27 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
chartBottom.setValueSelectionEnabled(true); chartBottom.setValueSelectionEnabled(true);
chartBottom.setZoomEnabled(false); chartBottom.setZoomEnabled(false);
chartBottom.selectValue(new SelectedValue(calLastSelected.get(Calendar.MONTH), 0, SelectedValue.SelectedValueType.COLUMN)); chartBottom.selectValue(new SelectedValue(calLastSelected.get(Calendar.MONTH), 0, SelectedValue.SelectedValueType.COLUMN));
}
private void generateGraphs() {
// show monthly diagram
if (prefs.getBoolean(String.valueOf(enableMonth.getId()), true)) {
chartBottom.setVisibility(View.VISIBLE);
chartTop.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.7f));
generateLineData(calLastSelected); generateColumnData();
scaleDataList = openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calLastSelected.get(Calendar.MONTH));
generateLineData(Calendar.DAY_OF_MONTH);
// show only yearly diagram and hide monthly diagram
} else {
chartBottom.setVisibility(View.GONE);
chartTop.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
scaleDataList = openScale.getScaleDataOfYear(calYears.get(Calendar.YEAR));
generateLineData(Calendar.DAY_OF_YEAR);
}
} }
private class ChartBottomValueTouchListener implements ColumnChartOnValueSelectListener { private class ChartBottomValueTouchListener implements ColumnChartOnValueSelectListener {
@@ -357,7 +386,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
calLastSelected = cal; calLastSelected = cal;
generateLineData(cal); scaleDataList = openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calLastSelected.get(Calendar.MONTH));
generateLineData(Calendar.DAY_OF_MONTH);
} }
@Override @Override
@@ -419,7 +449,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
prefs.edit().putBoolean(String.valueOf(actionButton.getId()), true).commit(); prefs.edit().putBoolean(String.valueOf(actionButton.getId()), true).commit();
} }
generateColumnData(); generateGraphs();
} }
} }
} }

View File

@@ -1,6 +1,11 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
@@ -139,3 +144,17 @@
android:layout_weight="0.3" /> android:layout_weight="0.3" />
</LinearLayout> </LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/enableMonth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:clickable="true"
android:src="@drawable/lastmonth"
app:backgroundTint="#33B5E5"
app:rippleColor="#33B5E5"
app:layout_anchor="@id/chart_top"
app:layout_anchorGravity="top|right|end" />
</android.support.design.widget.CoordinatorLayout>