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 @@ - - -