1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-08-13 12:14:19 +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);
}
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) {
Log.d("OpenScale", "Bluetooth Server started! I am searching for device ...");

View File

@@ -267,6 +267,40 @@ public class ScaleDatabase extends SQLiteOpenHelper {
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) {
ArrayList<ScaleData> scaleDataList = new ArrayList<ScaleData>();

View File

@@ -31,6 +31,7 @@ import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.health.openscale.R;
@@ -73,6 +74,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
private FloatingActionButton diagramMuscle;
private FloatingActionButton diagramWaist;
private FloatingActionButton diagramHip;
private FloatingActionButton enableMonth;
private SharedPreferences prefs;
private OpenScale openScale;
@@ -109,6 +111,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
diagramWaist = (FloatingActionButton) graphView.findViewById(R.id.diagramWaist);
diagramHip = (FloatingActionButton) graphView.findViewById(R.id.diagramHip);
enableMonth = (FloatingActionButton) graphView.findViewById(R.id.enableMonth);
diagramWeight.setOnClickListener(new onClickListenerDiagramLines());
diagramFat.setOnClickListener(new onClickListenerDiagramLines());
diagramWater.setOnClickListener(new onClickListenerDiagramLines());
@@ -116,6 +120,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
diagramWaist.setOnClickListener(new onClickListenerDiagramLines());
diagramHip.setOnClickListener(new onClickListenerDiagramLines());
enableMonth.setOnClickListener(new onClickListenerDiagramLines());
prefs = PreferenceManager.getDefaultSharedPreferences(graphView.getContext());
if(!prefs.getBoolean("weightEnable", true)) {
@@ -167,19 +173,21 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
@Override
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);
int maxDays = calDays.getActualMaximum(Calendar.DAY_OF_MONTH);
calDays.set(field, 1);
int maxDays = calDays.getActualMaximum(field);
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()));
calDays.add(Calendar.DAY_OF_MONTH, 1);
calDays.add(field, 1);
}
List<PointValue> valuesWeight = new ArrayList<PointValue>();
@@ -205,12 +213,12 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
{
calDB.setTime(scaleEntry.date_time);
valuesWeight.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.weight));
valuesFat.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.fat));
valuesWater.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.water));
valuesMuscle.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.muscle));
valuesWaist.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.waist));
valuesHip.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.hip));
valuesWeight.add(new PointValue(calDB.get(field)-1, scaleEntry.weight));
valuesFat.add(new PointValue(calDB.get(field)-1, scaleEntry.fat));
valuesWater.add(new PointValue(calDB.get(field)-1, scaleEntry.water));
valuesMuscle.add(new PointValue(calDB.get(field)-1, scaleEntry.muscle));
valuesWaist.add(new PointValue(calDB.get(field)-1, scaleEntry.waist));
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")));
}
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);
lineData.setAxisXBottom(new Axis(axisValues).
setHasLines(true).
@@ -301,11 +315,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
setTextColor(Color.BLACK)
);
chartTop.setLineChartData(lineData);
defaultTopViewport = new Viewport(0, chartTop.getCurrentViewport().top+4, maxDays-1, chartTop.getCurrentViewport().bottom-4);
defaultTopViewport = new Viewport(0, chartTop.getCurrentViewport().top+4, axisValues.size()-1, chartTop.getCurrentViewport().bottom-4);
chartTop.setMaximumViewport(defaultTopViewport);
chartTop.setCurrentViewport(defaultTopViewport);
@@ -343,9 +354,27 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
chartBottom.setValueSelectionEnabled(true);
chartBottom.setZoomEnabled(false);
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 {
@@ -357,7 +386,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
calLastSelected = cal;
generateLineData(cal);
scaleDataList = openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calLastSelected.get(Calendar.MONTH));
generateLineData(Calendar.DAY_OF_MONTH);
}
@Override
@@ -419,7 +449,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener {
prefs.edit().putBoolean(String.valueOf(actionButton.getId()), true).commit();
}
generateColumnData();
generateGraphs();
}
}
}

View File

@@ -1,10 +1,15 @@
<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:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1">
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1">
<LinearLayout
android:layout_width="match_parent"
@@ -138,4 +143,18 @@
android:layout_marginTop="10dp"
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>