diff --git a/android_app/app/src/main/AndroidManifest.xml b/android_app/app/src/main/AndroidManifest.xml
index ed0d27c9..2688f0e8 100644
--- a/android_app/app/src/main/AndroidManifest.xml
+++ b/android_app/app/src/main/AndroidManifest.xml
@@ -27,8 +27,7 @@
-
+
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java
index e1cd84cd..ef9288eb 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java
@@ -73,9 +73,7 @@ public class DataEntryActivity extends AppCompatActivity {
private Button btnLeft;
private Button btnRight;
- private Button btnCancel;
- private Button btnSave;
-
+ private MenuItem saveButton;
private MenuItem editButton;
private MenuItem expandButton;
private MenuItem deleteButton;
@@ -130,29 +128,6 @@ public class DataEntryActivity extends AppCompatActivity {
btnLeft = (Button) findViewById(R.id.btnLeft);
btnRight = (Button) findViewById(R.id.btnRight);
- btnCancel = (Button) findViewById(R.id.btnCancel);
- btnSave = (Button) findViewById(R.id.btnSave);
-
- btnCancel.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- onBackPressed();
- }
- });
- btnSave.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- final boolean isEdit = scaleMeasurement.getId() > 0;
- saveScaleData();
- if (isEdit) {
- setViewMode(MeasurementView.MeasurementViewMode.VIEW);
- }
- else {
- finish();
- }
- }
- });
-
btnLeft.setVisibility(View.INVISIBLE);
btnRight.setVisibility(View.INVISIBLE);
@@ -206,18 +181,32 @@ public class DataEntryActivity extends AppCompatActivity {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.dataentry_menu, menu);
- // Apply a white tint to all icons in the toolbar
+ // Apply a tint to all icons in the toolbar
for (int i = 0; i < menu.size(); ++i) {
MenuItem item = menu.getItem(i);
final Drawable drawable = item.getIcon();
if (drawable == null) {
continue;
}
+
final Drawable wrapped = DrawableCompat.wrap(drawable.mutate());
- DrawableCompat.setTint(wrapped, Color.WHITE);
+
+ String menuTitle = item.getTitle().toString();
+
+ if (menuTitle == getResources().getString(R.string.save)) {
+ DrawableCompat.setTint(wrapped, Color.parseColor("#FFFFFF"));
+ } else if (menuTitle == getResources().getString(R.string.edit)) {
+ DrawableCompat.setTint(wrapped, Color.parseColor("#99CC00"));
+ } else if (menuTitle == getResources().getString(R.string.toggle_expand)) {
+ DrawableCompat.setTint(wrapped, Color.parseColor("#FFBB33"));
+ } else if (menuTitle == getResources().getString(R.string.label_delete)) {
+ DrawableCompat.setTint(wrapped, Color.parseColor("#FF4444"));
+ }
+
item.setIcon(wrapped);
}
+ saveButton = menu.findItem(R.id.saveButton);
editButton = menu.findItem(R.id.editButton);
expandButton = menu.findItem(R.id.expandButton);
deleteButton = menu.findItem(R.id.deleteButton);
@@ -236,6 +225,17 @@ public class DataEntryActivity extends AppCompatActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
+ case R.id.saveButton:
+ final boolean isEdit = scaleMeasurement.getId() > 0;
+ saveScaleData();
+ if (isEdit) {
+ setViewMode(MeasurementView.MeasurementViewMode.VIEW);
+ }
+ else {
+ finish();
+ }
+ return true;
+
case R.id.expandButton:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final boolean expand = !prefs.getBoolean(PREF_EXPAND, true);
@@ -328,7 +328,7 @@ public class DataEntryActivity extends AppCompatActivity {
}
txtDataNr.setText(DateFormat.getDateTimeInstance(
- DateFormat.LONG, DateFormat.SHORT).format(scaleMeasurement.getDateTime()));
+ DateFormat.LONG, DateFormat.SHORT).format(scaleMeasurement.getDateTime()));
}
private void setViewMode(MeasurementView.MeasurementViewMode viewMode) {
@@ -337,39 +337,35 @@ public class DataEntryActivity extends AppCompatActivity {
switch (viewMode) {
case VIEW:
+ saveButton.setVisible(false);
editButton.setVisible(true);
expandButton.setVisible(true);
deleteButton.setVisible(true);
- btnCancel.setVisibility(View.GONE);
- btnSave.setVisibility(View.GONE);
-
btnLeft.setVisibility(View.VISIBLE);
btnRight.setVisibility(View.VISIBLE);
+ btnLeft.setEnabled(true);
+ btnRight.setEnabled(true);
dateTimeVisibility = View.GONE;
break;
case EDIT:
+ saveButton.setVisible(true);
editButton.setVisible(false);
expandButton.setVisible(true);
deleteButton.setVisible(true);
- btnCancel.setVisibility(View.VISIBLE);
- btnSave.setVisibility(View.VISIBLE);
- btnSave.setText(R.string.label_ok);
-
- btnLeft.setVisibility(View.GONE);
- btnRight.setVisibility(View.GONE);
+ btnLeft.setVisibility(View.VISIBLE);
+ btnRight.setVisibility(View.VISIBLE);
+ btnLeft.setEnabled(false);
+ btnRight.setEnabled(false);
break;
case ADD:
+ saveButton.setVisible(true);
editButton.setVisible(false);
expandButton.setVisible(false);
deleteButton.setVisible(false);
- btnCancel.setVisibility(View.VISIBLE);
- btnSave.setVisibility(View.VISIBLE);
- btnSave.setText(R.string.label_add);
-
btnLeft.setVisibility(View.GONE);
btnRight.setVisibility(View.GONE);
break;
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java
index 7592a53e..b345ea3c 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java
@@ -15,15 +15,21 @@
*/
package com.health.openscale.gui.activities;
-import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.support.v4.graphics.drawable.DrawableCompat;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
-import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioGroup;
@@ -39,7 +45,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
-public class UserSettingsActivity extends Activity {
+public class UserSettingsActivity extends AppCompatActivity {
public static String EXTRA_ID = "id";
public static String EXTRA_MODE = "mode";
@@ -58,9 +64,8 @@ public class UserSettingsActivity extends Activity {
private RadioGroup radioScaleUnit;
private RadioGroup radioGender;
- private Button btnOk;
- private Button btnCancel;
- private Button btnDelete;
+ private MenuItem saveButton;
+ private MenuItem deleteButton;
private DateFormat dateFormat = DateFormat.getDateInstance();
@@ -72,6 +77,12 @@ public class UserSettingsActivity extends Activity {
setContentView(R.layout.activity_usersettings);
context = this;
+ Toolbar toolbar = (Toolbar) findViewById(R.id.userEntryToolbar);
+ setSupportActionBar(toolbar);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setTitle(getResources().getString(R.string.label_title_user));
+
txtUserName = (EditText) findViewById(R.id.txtUserName);
txtBodyHeight = (EditText) findViewById(R.id.txtBodyHeight);
radioScaleUnit = (RadioGroup) findViewById(R.id.groupScaleUnit);
@@ -82,14 +93,6 @@ public class UserSettingsActivity extends Activity {
txtBirthday = (EditText) findViewById(R.id.txtBirthday);
txtGoalDate = (EditText) findViewById(R.id.txtGoalDate);
- btnDelete = (Button) findViewById(R.id.btnDelete);
- btnOk = (Button)findViewById(R.id.btnOk);
- btnCancel = (Button)findViewById(R.id.btnCancel);
-
- btnOk.setOnClickListener(new onClickListenerOk());
- btnCancel.setOnClickListener(new onClickListenerCancel());
- btnDelete.setOnClickListener(new onClickListenerDelete());
-
Calendar birthdayCal = Calendar.getInstance();
birthdayCal.setTime(birthday);
birthdayCal.add(Calendar.YEAR, -20);
@@ -126,15 +129,72 @@ public class UserSettingsActivity extends Activity {
datePicker.show();
}
});
+ }
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.userentry_menu, menu);
+
+ // Apply a tint to all icons in the toolbar
+ for (int i = 0; i < menu.size(); ++i) {
+ MenuItem item = menu.getItem(i);
+ final Drawable drawable = item.getIcon();
+ if (drawable == null) {
+ continue;
+ }
+
+ final Drawable wrapped = DrawableCompat.wrap(drawable.mutate());
+
+ String menuTitle = item.getTitle().toString();
+
+ if (menuTitle == getResources().getString(R.string.save)) {
+ DrawableCompat.setTint(wrapped, Color.parseColor("#FFFFFF"));
+ } else if (menuTitle == getResources().getString(R.string.label_delete)) {
+ DrawableCompat.setTint(wrapped, Color.parseColor("#FF4444"));
+ }
+
+ item.setIcon(wrapped);
+ }
+
+ saveButton = menu.findItem(R.id.saveButton);
+ deleteButton = menu.findItem(R.id.deleteButton);
if (getIntent().getExtras().getInt(EXTRA_MODE) == EDIT_USER_REQUEST) {
editMode();
+ deleteButton.setVisible(true);
}
else {
- btnOk.setText(getResources().getString(R.string.label_add));
- btnDelete.setVisibility(View.GONE);
+ deleteButton.setVisible(false);
}
+
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.saveButton:
+ if (saveUserData()) {
+ Intent returnIntent = new Intent();
+ setResult(RESULT_OK, returnIntent);
+
+ finish();
+ }
+ return true;
+
+ case R.id.deleteButton:
+ deleteUser();
+ return true;
+
+ // Override the default behaviour in order to return to the correct fragment
+ // (e.g. the table view) and not always go to the overview.
+ case android.R.id.home:
+ onBackPressed();
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
}
private void editMode()
@@ -145,6 +205,8 @@ public class UserSettingsActivity extends Activity {
ScaleUser scaleUser = openScale.getScaleUser(id);
+ getSupportActionBar().setTitle(scaleUser.getUserName());
+
birthday = scaleUser.getBirthday();
goal_date = scaleUser.getGoalDate();
@@ -232,129 +294,112 @@ public class UserSettingsActivity extends Activity {
}
};
- private class onClickListenerDelete implements View.OnClickListener {
- @Override
- public void onClick(View v) {
- AlertDialog.Builder deleteAllDialog = new AlertDialog.Builder(v.getContext());
+ private void deleteUser() {
+ AlertDialog.Builder deleteAllDialog = new AlertDialog.Builder(context);
- deleteAllDialog.setMessage(getResources().getString(R.string.question_really_delete_user));
+ deleteAllDialog.setMessage(getResources().getString(R.string.question_really_delete_user));
- deleteAllDialog.setPositiveButton(getResources().getString(R.string.label_yes), new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- int userId = getIntent().getExtras().getInt(EXTRA_ID);
+ deleteAllDialog.setPositiveButton(getResources().getString(R.string.label_yes), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ int userId = getIntent().getExtras().getInt(EXTRA_ID);
- OpenScale openScale = OpenScale.getInstance(getApplicationContext());
- openScale.clearScaleData(userId);
- openScale.deleteScaleUser(userId);
+ OpenScale openScale = OpenScale.getInstance(getApplicationContext());
+ openScale.clearScaleData(userId);
+ openScale.deleteScaleUser(userId);
- List scaleUser = openScale.getScaleUserList();
+ List scaleUser = openScale.getScaleUserList();
- int lastUserId = -1;
+ int lastUserId = -1;
- if (!scaleUser.isEmpty()) {
- lastUserId = scaleUser.get(0).getId();
- }
-
- openScale.selectScaleUser(lastUserId);
- openScale.updateScaleData();
-
- Intent returnIntent = new Intent();
- setResult(RESULT_OK, returnIntent);
-
- finish();
+ if (!scaleUser.isEmpty()) {
+ lastUserId = scaleUser.get(0).getId();
}
- });
- deleteAllDialog.setNegativeButton(getResources().getString(R.string.label_no), new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.dismiss();
- }
- });
+ openScale.selectScaleUser(lastUserId);
+ openScale.updateScaleData();
- deleteAllDialog.show();
- }
- }
+ Intent returnIntent = new Intent();
+ setResult(RESULT_OK, returnIntent);
- private class onClickListenerOk implements View.OnClickListener {
- @Override
- public void onClick(View v) {
- try {
- if (validateInput()) {
- OpenScale openScale = OpenScale.getInstance(getApplicationContext());
-
- String name = txtUserName.getText().toString();
- int body_height = Integer.valueOf(txtBodyHeight.getText().toString());
- int checkedRadioButtonId = radioScaleUnit.getCheckedRadioButtonId();
- int checkedGenderId = radioGender.getCheckedRadioButtonId();
- float initial_weight = Float.valueOf(txtInitialWeight.getText().toString());
- float goal_weight = Float.valueOf(txtGoalWeight.getText().toString());
-
- Converters.WeightUnit scale_unit = Converters.WeightUnit.KG;
-
- switch (checkedRadioButtonId) {
- case R.id.btnRadioKG:
- scale_unit = Converters.WeightUnit.KG;
- break;
- case R.id.btnRadioLB:
- scale_unit = Converters.WeightUnit.LB;
- break;
- case R.id.btnRadioST:
- scale_unit = Converters.WeightUnit.ST;
- break;
- }
-
- Converters.Gender gender = Converters.Gender.MALE;
-
- switch (checkedGenderId) {
- case R.id.btnRadioMale:
- gender = Converters.Gender.MALE;
- break;
- case R.id.btnRadioWoman:
- gender = Converters.Gender.FEMALE;
- break;
- }
-
- final ScaleUser scaleUser = new ScaleUser();
-
- scaleUser.setUserName(name);
- scaleUser.setBirthday(birthday);
- scaleUser.setBodyHeight(body_height);
- scaleUser.setScaleUnit(scale_unit);
- scaleUser.setGender(gender);
- scaleUser.setConvertedInitialWeight(initial_weight);
- scaleUser.setGoalWeight(goal_weight);
- scaleUser.setGoalDate(goal_date);
-
- if (getIntent().getExtras().getInt(EXTRA_MODE) == EDIT_USER_REQUEST) {
- int id = getIntent().getExtras().getInt(EXTRA_ID);
- scaleUser.setId(id);
- openScale.updateScaleUser(scaleUser);
- } else {
- int id = openScale.addScaleUser(scaleUser);
- scaleUser.setId(id);
- }
-
- openScale.selectScaleUser(scaleUser.getId());
- openScale.updateScaleData();
-
- Intent returnIntent = new Intent();
- setResult(RESULT_OK, returnIntent);
-
- finish();
- }
- } catch (NumberFormatException ex) {
- Toast.makeText(context, getResources().getString(R.string.error_value_range) + "(" + ex.getMessage() + ")", Toast.LENGTH_SHORT).show();
+ finish();
}
- }
+ });
+
+ deleteAllDialog.setNegativeButton(getResources().getString(R.string.label_no), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.dismiss();
+ }
+ });
+
+ deleteAllDialog.show();
}
- private class onClickListenerCancel implements View.OnClickListener {
- @Override
- public void onClick(View v) {
- Intent returnIntent = new Intent();
- setResult(RESULT_CANCELED, returnIntent);
+ private boolean saveUserData() {
+ try {
+ if (validateInput()) {
+ OpenScale openScale = OpenScale.getInstance(getApplicationContext());
- finish();
+ String name = txtUserName.getText().toString();
+ int body_height = Integer.valueOf(txtBodyHeight.getText().toString());
+ int checkedRadioButtonId = radioScaleUnit.getCheckedRadioButtonId();
+ int checkedGenderId = radioGender.getCheckedRadioButtonId();
+ float initial_weight = Float.valueOf(txtInitialWeight.getText().toString());
+ float goal_weight = Float.valueOf(txtGoalWeight.getText().toString());
+
+ Converters.WeightUnit scale_unit = Converters.WeightUnit.KG;
+
+ switch (checkedRadioButtonId) {
+ case R.id.btnRadioKG:
+ scale_unit = Converters.WeightUnit.KG;
+ break;
+ case R.id.btnRadioLB:
+ scale_unit = Converters.WeightUnit.LB;
+ break;
+ case R.id.btnRadioST:
+ scale_unit = Converters.WeightUnit.ST;
+ break;
+ }
+
+ Converters.Gender gender = Converters.Gender.MALE;
+
+ switch (checkedGenderId) {
+ case R.id.btnRadioMale:
+ gender = Converters.Gender.MALE;
+ break;
+ case R.id.btnRadioWoman:
+ gender = Converters.Gender.FEMALE;
+ break;
+ }
+
+ final ScaleUser scaleUser = new ScaleUser();
+
+ scaleUser.setUserName(name);
+ scaleUser.setBirthday(birthday);
+ scaleUser.setBodyHeight(body_height);
+ scaleUser.setScaleUnit(scale_unit);
+ scaleUser.setGender(gender);
+ scaleUser.setConvertedInitialWeight(initial_weight);
+ scaleUser.setGoalWeight(goal_weight);
+ scaleUser.setGoalDate(goal_date);
+
+ if (getIntent().getExtras().getInt(EXTRA_MODE) == EDIT_USER_REQUEST) {
+ int id = getIntent().getExtras().getInt(EXTRA_ID);
+ scaleUser.setId(id);
+ openScale.updateScaleUser(scaleUser);
+ } else {
+ int id = openScale.addScaleUser(scaleUser);
+ scaleUser.setId(id);
+ }
+
+ openScale.selectScaleUser(scaleUser.getId());
+ openScale.updateScaleData();
+
+ return true;
+ }
+ } catch (NumberFormatException ex) {
+ Toast.makeText(context, getResources().getString(R.string.error_value_range) + "(" + ex.getMessage() + ")", Toast.LENGTH_SHORT).show();
}
+
+ return false;
}
}
diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_save.png b/android_app/app/src/main/res/drawable-hdpi/ic_save.png
new file mode 100644
index 00000000..86704cd4
Binary files /dev/null and b/android_app/app/src/main/res/drawable-hdpi/ic_save.png differ
diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_save.png b/android_app/app/src/main/res/drawable-ldpi/ic_save.png
new file mode 100644
index 00000000..38eda100
Binary files /dev/null and b/android_app/app/src/main/res/drawable-ldpi/ic_save.png differ
diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_save.png b/android_app/app/src/main/res/drawable-mdpi/ic_save.png
new file mode 100644
index 00000000..d68c31b9
Binary files /dev/null and b/android_app/app/src/main/res/drawable-mdpi/ic_save.png differ
diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_save.png b/android_app/app/src/main/res/drawable-xhdpi/ic_save.png
new file mode 100644
index 00000000..9c83ddb8
Binary files /dev/null and b/android_app/app/src/main/res/drawable-xhdpi/ic_save.png differ
diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_save.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_save.png
new file mode 100644
index 00000000..28ce345c
Binary files /dev/null and b/android_app/app/src/main/res/drawable-xxhdpi/ic_save.png differ
diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_save.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_save.png
new file mode 100644
index 00000000..f6cc94e6
Binary files /dev/null and b/android_app/app/src/main/res/drawable-xxxhdpi/ic_save.png differ
diff --git a/android_app/app/src/main/res/layout/activity_dataentry.xml b/android_app/app/src/main/res/layout/activity_dataentry.xml
index b935682c..1a3f1f64 100644
--- a/android_app/app/src/main/res/layout/activity_dataentry.xml
+++ b/android_app/app/src/main/res/layout/activity_dataentry.xml
@@ -68,33 +68,4 @@
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/layout/activity_usersettings.xml b/android_app/app/src/main/res/layout/activity_usersettings.xml
index 7a099d3a..19564ea4 100644
--- a/android_app/app/src/main/res/layout/activity_usersettings.xml
+++ b/android_app/app/src/main/res/layout/activity_usersettings.xml
@@ -1,9 +1,18 @@
+ android:orientation="vertical">
+
+
-
-
-
-
-
-
-
-
-
-
diff --git a/android_app/app/src/main/res/menu/dataentry_menu.xml b/android_app/app/src/main/res/menu/dataentry_menu.xml
index 3970b40b..c9c364ef 100644
--- a/android_app/app/src/main/res/menu/dataentry_menu.xml
+++ b/android_app/app/src/main/res/menu/dataentry_menu.xml
@@ -3,19 +3,30 @@
xmlns:android="http://schemas.android.com/apk/res/android">
+
+
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/menu/userentry_menu.xml b/android_app/app/src/main/res/menu/userentry_menu.xml
new file mode 100644
index 00000000..77eed5ff
--- /dev/null
+++ b/android_app/app/src/main/res/menu/userentry_menu.xml
@@ -0,0 +1,19 @@
+
+
\ No newline at end of file
diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml
index 8b060abd..d4ca103f 100644
--- a/android_app/app/src/main/res/values/strings.xml
+++ b/android_app/app/src/main/res/values/strings.xml
@@ -214,5 +214,6 @@
Error information
Toggle expand
Edit
+ Save