From 6a2b47996965053b4879c10dd521d326ea0b798c Mon Sep 17 00:00:00 2001 From: OliE Date: Mon, 12 Feb 2018 12:01:59 +0100 Subject: [PATCH] added for graph and table fragment an option menu --- .../gui/fragments/GraphFragment.java | 51 +++++-- .../gui/fragments/TableFragment.java | 122 +++++++++------ .../src/main/res/drawable-hdpi/ic_options.png | Bin 0 -> 168 bytes .../src/main/res/drawable-ldpi/ic_options.png | Bin 0 -> 154 bytes .../src/main/res/drawable-mdpi/ic_options.png | Bin 0 -> 133 bytes .../main/res/drawable-xhdpi/ic_options.png | Bin 0 -> 158 bytes .../main/res/drawable-xxhdpi/ic_options.png | Bin 0 -> 187 bytes .../main/res/drawable-xxxhdpi/ic_options.png | Bin 0 -> 216 bytes .../src/main/res/layout/fragment_graph.xml | 142 ++++++++++-------- .../src/main/res/layout/fragment_table.xml | 73 ++++----- .../app/src/main/res/menu/graph_menu.xml | 9 ++ .../app/src/main/res/menu/table_menu.xml | 16 ++ .../app/src/main/res/values/strings.xml | 2 + 13 files changed, 256 insertions(+), 159 deletions(-) create mode 100644 android_app/app/src/main/res/drawable-hdpi/ic_options.png create mode 100644 android_app/app/src/main/res/drawable-ldpi/ic_options.png create mode 100644 android_app/app/src/main/res/drawable-mdpi/ic_options.png create mode 100644 android_app/app/src/main/res/drawable-xhdpi/ic_options.png create mode 100644 android_app/app/src/main/res/drawable-xxhdpi/ic_options.png create mode 100644 android_app/app/src/main/res/drawable-xxxhdpi/ic_options.png create mode 100644 android_app/app/src/main/res/menu/graph_menu.xml create mode 100644 android_app/app/src/main/res/menu/table_menu.xml diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java index 5a6be8ba..829e54b2 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java @@ -27,11 +27,14 @@ import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.view.GestureDetector; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.PopupMenu; import android.widget.TextView; import com.health.openscale.R; @@ -80,7 +83,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { private FloatingActionButton diagramWaist; private FloatingActionButton diagramHip; private FloatingActionButton diagramBone; - private FloatingActionButton enableMonth; + private ImageView optionMenu; + private PopupMenu popup; private SharedPreferences prefs; private int textColor; @@ -140,7 +144,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { diagramWaist = (FloatingActionButton) graphView.findViewById(R.id.diagramWaist); diagramHip = (FloatingActionButton) graphView.findViewById(R.id.diagramHip); diagramBone = (FloatingActionButton) graphView.findViewById(R.id.diagramBone); - enableMonth = (FloatingActionButton) graphView.findViewById(R.id.enableMonth); + optionMenu = (ImageView) graphView.findViewById(R.id.optionMenu); diagramWeight.setOnClickListener(new onClickListenerDiagramLines()); diagramFat.setOnClickListener(new onClickListenerDiagramLines()); @@ -151,7 +155,12 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { diagramHip.setOnClickListener(new onClickListenerDiagramLines()); diagramBone.setOnClickListener(new onClickListenerDiagramLines()); - enableMonth.setOnClickListener(new onClickListenerDiagramLines()); + optionMenu.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + popup.show(); + } + }); prefs = PreferenceManager.getDefaultSharedPreferences(graphView.getContext()); @@ -217,6 +226,34 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { } }); + popup = new PopupMenu(getContext(), optionMenu); + popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + + + switch (item.getItemId()) { + case R.id.enableMonth: + if (item.isChecked()) { + item.setChecked(false); + prefs.edit().putBoolean("showMonth", false).commit(); + } else { + item.setChecked(true); + prefs.edit().putBoolean("showMonth", true).commit(); + } + + generateGraphs(); + return true; + default: + return false; + } + } + }); + popup.getMenuInflater().inflate(R.menu.graph_menu, popup.getMenu()); + + MenuItem enableMonth = popup.getMenu().findItem(R.id.enableMonth); + enableMonth.setChecked(prefs.getBoolean("showMonth", true)); + openScale.registerFragment(this); return graphView; @@ -417,12 +454,6 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { diagramBone.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). @@ -548,7 +579,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { } // show monthly diagram - if (prefs.getBoolean(String.valueOf(enableMonth.getId()), true)) { + if (prefs.getBoolean("showMonth", true)) { chartTop.setVisibility(View.VISIBLE); chartBottom.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.7f)); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java index 493771de..0fdd1ab1 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java @@ -34,6 +34,7 @@ import android.text.Spanned; import android.text.SpannedString; import android.view.Gravity; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -43,6 +44,7 @@ import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; +import android.widget.PopupMenu; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; @@ -76,8 +78,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import lecho.lib.hellocharts.util.ChartUtils; - import static android.util.TypedValue.COMPLEX_UNIT_DIP; public class TableFragment extends Fragment implements FragmentUpdateListener { @@ -87,6 +87,9 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { private SharedPreferences prefs; private LinearLayout subpageView; + private ImageView optionMenu; + private PopupMenu popup; + private ArrayList measurementsList; private int selectedSubpageNr; @@ -106,8 +109,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { tableDataView = (ListView) tableView.findViewById(R.id.tableDataView); tableHeaderView = (LinearLayout) tableView.findViewById(R.id.tableHeaderView); - tableView.findViewById(R.id.btnImportData).setOnClickListener(new onClickListenerImport()); - tableView.findViewById(R.id.btnExportData).setOnClickListener(new onClickListenerExport()); + optionMenu = (ImageView) tableView.findViewById(R.id.optionMenu); measurementsList = new ArrayList<>(); @@ -140,6 +142,42 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { selectedSubpageNr = savedInstanceState.getInt(SELECTED_SUBPAGE_NR_KEY); } + optionMenu.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + popup.show(); + } + }); + + popup = new PopupMenu(getContext(), optionMenu); + popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + + + switch (item.getItemId()) { + case R.id.importData: + if (PermissionHelper.requestReadPermission(getActivity())) { + importTable(); + } + return true; + case R.id.exportData: + if (PermissionHelper.requestWritePermission(getActivity())) { + exportTable(); + } + return true; + case R.id.shareData: + if (PermissionHelper.requestWritePermission(getActivity())) { + shareTable(); + } + return true; + default: + return false; + } + } + }); + popup.getMenuInflater().inflate(R.menu.table_menu, popup.getMenu()); + OpenScale.getInstance(getContext()).registerFragment(this); return tableView; @@ -160,7 +198,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { return; } - final int maxSize = 50; + final int maxSize = 25; int subpageCount = (int)Math.ceil(scaleMeasurementList.size() / (double)maxSize); @@ -182,6 +220,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { TextView subpageNrView = new TextView(tableView.getContext()); subpageNrView.setOnClickListener(new onClickListenerSubpageSelect()); subpageNrView.setText(Integer.toString(i+1)); + subpageNrView.setTextColor(Color.GRAY); subpageNrView.setPadding(10, 10, 20, 10); subpageView.addView(subpageNrView); @@ -190,7 +229,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { TextView selectedSubpageNrView = (TextView) subpageView.getChildAt(selectedSubpageNr + 1); if (selectedSubpageNrView != null) { selectedSubpageNrView.setTypeface(null, Typeface.BOLD); - selectedSubpageNrView.setTextColor(ChartUtils.COLOR_BLUE); + selectedSubpageNrView.setTextColor(Color.WHITE); } } @@ -206,12 +245,6 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { moveSubpageRight.setEnabled(selectedSubpageNr + 1 < subpageCount); subpageView.addView(moveSubpageRight); - if (subpageCount <= 1) { - subpageView.setVisibility(View.GONE); - } else { - subpageView.setVisibility(View.VISIBLE); - } - tableHeaderView.removeAllViews(); for (MeasurementView measurement : measurementsList) { @@ -288,15 +321,6 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { startActivityForResult(intent, 1); } } - private class onClickListenerImport implements View.OnClickListener { - @Override - public void onClick(View v) { - if (PermissionHelper.requestReadPermission(getActivity())) { - importTable(); - } - } - } - private void importTable() { int selectedUserId = OpenScale.getInstance(getContext()).getSelectedScaleUserId(); @@ -343,15 +367,6 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { } } - private class onClickListenerExport implements View.OnClickListener { - @Override - public void onClick(View v) { - if (PermissionHelper.requestWritePermission(getActivity())) { - exportTable(); - } - } - } - private void exportTable() { AlertDialog.Builder filenameDialog = new AlertDialog.Builder(getActivity()); @@ -377,33 +392,40 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { } }); - filenameDialog.setNeutralButton(getResources().getString(R.string.label_share), new DialogInterface.OnClickListener() { + filenameDialog.setNegativeButton(getResources().getString(R.string.label_cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - String fullPath = Environment.getExternalStorageDirectory().getPath() + "/tmp/" + txtFilename.getText().toString(); - - if (!OpenScale.getInstance(getContext()).exportData(fullPath)) { - return; - } - - Intent intentShareFile = new Intent(Intent.ACTION_SEND); - File shareFile = new File(fullPath); - - if(shareFile.exists()) { - intentShareFile.setType("text/comma-separated-values"); - intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+fullPath)); - - intentShareFile.putExtra(Intent.EXTRA_SUBJECT, "openScale export csv file"); - intentShareFile.putExtra(Intent.EXTRA_TEXT, txtFilename.getText().toString()); - - startActivity(Intent.createChooser(intentShareFile, getResources().getString(R.string.label_share))); - } + dialog.dismiss(); } }); - filenameDialog.show(); } + + private void shareTable() { + final ScaleUser selectedScaleUser = OpenScale.getInstance(getContext()).getSelectedScaleUser(); + String exportFilename = prefs.getString("exportFilename" + selectedScaleUser.getId(), "openScale_data_" + selectedScaleUser.getUserName() + ".csv"); + + String fullPath = Environment.getExternalStorageDirectory().getPath() + "/tmp/" + exportFilename; + + if (!OpenScale.getInstance(getContext()).exportData(fullPath)) { + return; + } + + Intent intentShareFile = new Intent(Intent.ACTION_SEND); + File shareFile = new File(fullPath); + + if(shareFile.exists()) { + intentShareFile.setType("text/comma-separated-values"); + intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+fullPath)); + + intentShareFile.putExtra(Intent.EXTRA_SUBJECT, "openScale export csv file"); + intentShareFile.putExtra(Intent.EXTRA_TEXT, exportFilename); + + startActivity(Intent.createChooser(intentShareFile, getResources().getString(R.string.label_share))); + } + } + @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_options.png b/android_app/app/src/main/res/drawable-hdpi/ic_options.png new file mode 100644 index 0000000000000000000000000000000000000000..2d5f7a380074ba2274a795a95c0f510ad8100230 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6T^Rm@;DWu&Cj&)dJzX3_ zB3j>G+0DhE$m4Rc@Z;gl@$bGhS^S6yy2D(iDB118#NgAq(&A- OV(@hJb6Mw<&;$U3B0z5d literal 0 HcmV?d00001 diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_options.png b/android_app/app/src/main/res/drawable-ldpi/ic_options.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c9517acebe5cf6363877d2642e7ba8165ce145 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7l!{JxM1({$v_c*PZ!4! zi{9h}3Dy<{Wg+Xv#zx0Rm%scH5)xtyxaATO5`OqA**PpaTEfy3aYSf=gnYz-1~D_A xD+OmSu<-J9tjIgCd_rr3BYVLHcScDDhWeMHzXL6cy?{nDc)I$ztaD0e0svN3E@}V( literal 0 HcmV?d00001 diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_options.png b/android_app/app/src/main/res/drawable-mdpi/ic_options.png new file mode 100644 index 0000000000000000000000000000000000000000..c608c4c065f2e3c6bd2968f59d7a3761825a0b25 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt^uo-U3d z9-YYv60D0Gf(~>X`|qDyJaa|L0}TcF1@1;h3Z{oP&N7uc$;|)3)yT@Bzhu#uKDSRA c5=;yXiwc>!cD?(*4rmI4r>mdKI;Vst0LZ;6*}({)(;pOZtR<~V|n8QB>aHk{|ZD9kL@->kG6Xgq_btDnm{r-UW| Dz-Kwl literal 0 HcmV?d00001 diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_options.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_options.png new file mode 100644 index 0000000000000000000000000000000000000000..754bc9b7ec03a39d2134a13e8eba5a6386f3dff4 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt@yo-U3d z6?5L+*vQ*pz~g%Gz(4E59QQkU7+N{_iblhtrp}E0Yes$K^LB}9sbI! Tzopr02Wb2!vFvP literal 0 HcmV?d00001 diff --git a/android_app/app/src/main/res/layout/fragment_graph.xml b/android_app/app/src/main/res/layout/fragment_graph.xml index 69baa54c..e6352232 100644 --- a/android_app/app/src/main/res/layout/fragment_graph.xml +++ b/android_app/app/src/main/res/layout/fragment_graph.xml @@ -1,10 +1,83 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> + + + + +