/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.eugene.fithealthmaingit.UI;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.Toast;
import com.eugene.fithealthmaingit.Databases_Adapters_ListViews.LogWeight.WeightLog;
import com.eugene.fithealthmaingit.Databases_Adapters_ListViews.LogWeight.WeightLogAdapter;
import com.eugene.fithealthmaingit.FitBit.FitBitConnectionActivity;
import com.eugene.fithealthmaingit.R;
import com.eugene.fithealthmaingit.MainActivity;
import com.eugene.fithealthmaingit.Utilities.Equations;
import com.eugene.fithealthmaingit.Utilities.Globals;
import java.util.Date;
public class UserInformationFragment extends Fragment {
private SharedPreferences sharedPreferences;
private RadioButton vRbFemale;
private RadioButton vRbMale;
private EditText vName;
private EditText vNpAge;
private EditText vEtWeight;
private EditText vEtGoal;
private EditText vNpFeet;
private EditText vNpInches;
private Spinner vSpnActivity;
private Spinner vWeightLoss;
private String personSex;
RelativeLayout fitbit;
private AsyncTask<Void, Void, Void> mEquations;
// Inflate view
private View v;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_user_information, container, false);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
findViews();
loadSavedPreferences();
saveUserInformation();
equations();
return v;
}
Toolbar vToolbar;
private void findViews() {
vToolbar = (Toolbar) v.findViewById(R.id.toolbar);
vToolbar.setTitle("User Information");
vToolbar.inflateMenu(R.menu.menu_user_info);
WeightLogAdapter weightLogAdapter = new WeightLogAdapter(getActivity(), 0, WeightLog.all());
if (weightLogAdapter.getCount() == 0) {
} else {
if (Globals.USER_INFORMATION_SAVED.equals(sharedPreferences.getString(Globals.IS_USER_INFORMATION_SAVED, ""))) {
vToolbar.setNavigationIcon(R.mipmap.ic_arrow_back);
}
}
vToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().finish();
}
});
vRbFemale = (RadioButton) v.findViewById(R.id.rbFemale);
vRbMale = (RadioButton) v.findViewById(R.id.rbMale);
vName = (EditText) v.findViewById(R.id.name);
vNpAge = (EditText) v.findViewById(R.id.npAge);
vEtWeight = (EditText) v.findViewById(R.id.etWeight);
vEtGoal = (EditText) v.findViewById(R.id.etGoal);
vNpFeet = (EditText) v.findViewById(R.id.npFeet);
vNpInches = (EditText) v.findViewById(R.id.npInches);
vSpnActivity = (Spinner) v.findViewById(R.id.spnActivity);
vWeightLoss = (Spinner) v.findViewById(R.id.weightCurrent);
fitbit = (RelativeLayout) v.findViewById(R.id.fitbit);
fitbit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), FitBitConnectionActivity.class);
getActivity().startActivityForResult(i, ACTIVITY_ONE_REQUEST);
}
});
if (sharedPreferences.getString("FITBIT_CONNECTION_STATUS", "").equals("CONNECTED")) {
CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkBox);
checkBox.setChecked(true);
}
}
static final int ACTIVITY_ONE_REQUEST = 1; // The request code for ActivityOne
public final static String ACTIVITY_ONE_RESULT = "activity_one"; // Data Argument For Activity One
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ACTIVITY_ONE_REQUEST && resultCode == getActivity().RESULT_OK) {
if (data.hasExtra(ACTIVITY_ONE_RESULT)) {
String result = data.getExtras().getString(ACTIVITY_ONE_RESULT);
Toast.makeText(getActivity(), result, Toast.LENGTH_SHORT).show();
}
}
}
private void saveUserInformation() {
vToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.action_save) {
if (vName.getText().toString().trim().length() > 0
&& vNpAge.getText().toString().trim().length() > 0
&& vEtWeight.getText().toString().trim().length() > 0
&& vEtGoal.getText().toString().trim().length() > 0
&& vNpFeet.getText().toString().trim().length() > 0
&& vNpInches.getText().toString().trim().length() > 0) {
if (vRbMale.isChecked()) {
savePreferences(Globals.USER_SEX, "male");
personSex = "male";
}
if (vRbFemale.isChecked()) {
savePreferences(Globals.USER_SEX, "female");
personSex = "female";
}
savePreferences(Globals.USER_NAME, vName.getText().toString());
savePreferences(Globals.USER_AGE, vNpAge.getText().toString());
savePreferences(Globals.USER_WEIGHT, vEtWeight.getText().toString());
savePreferences(Globals.USER_WEIGHT_GOAL, vEtGoal.getText().toString());
savePreferences(Globals.USER_HEIGHT_FEET, vNpFeet.getText().toString());
savePreferences(Globals.USER_HEIGHT_INCHES, vNpInches.getText().toString());
savePreferences(Globals.USER_ACTIVITY_LEVEL, String.valueOf(vSpnActivity.getSelectedItemPosition()));
savePreferences(Globals.USER_WEIGHT_LOSS_GOAL, String.valueOf(vWeightLoss.getSelectedItemPosition()));
if (vWeightLoss.getSelectedItemPosition() == 0) {
savePreferences(Globals.USER_GOAL, "Gain 2 Pounds Per Week");
}
if (vWeightLoss.getSelectedItemPosition() == 1) {
savePreferences(Globals.USER_GOAL, "Gain 1.5 Pounds Per Week");
}
if (vWeightLoss.getSelectedItemPosition() == 2) {
savePreferences(Globals.USER_GOAL, "Gain 1 Pounds Per Week");
}
if (vWeightLoss.getSelectedItemPosition() == 3) {
savePreferences(Globals.USER_GOAL, "Gain .5 Pounds Per Week");
}
if (vWeightLoss.getSelectedItemPosition() == 4) {
savePreferences(Globals.USER_GOAL, "Maintain Weight");
}
if (vWeightLoss.getSelectedItemPosition() == 5) {
savePreferences(Globals.USER_GOAL, "Lose .5 Pounds Per Week");
}
if (vWeightLoss.getSelectedItemPosition() == 6) {
savePreferences(Globals.USER_GOAL, "Lose 1 Pounds Per Week");
}
if (vWeightLoss.getSelectedItemPosition() == 7) {
savePreferences(Globals.USER_GOAL, "Lose 1.5 Pounds Per Week");
}
if (vWeightLoss.getSelectedItemPosition() == 8) {
savePreferences(Globals.USER_GOAL, "Lose 2 Pounds Per Week");
}
mEquations.execute();
} else {
if (vName.getText().toString().trim().length() == 0)
vName.setError("Missing Field");
if (vNpAge.getText().toString().trim().length() == 0)
vNpAge.setError("Missing Field");
if (vEtWeight.getText().toString().trim().length() == 0)
vEtWeight.setError("Missing Field");
if (vEtGoal.getText().toString().trim().length() == 0)
vEtGoal.setError("Missing Field");
if (vNpFeet.getText().toString().trim().length() == 0)
vNpFeet.setError("Missing Field");
if (vNpInches.getText().toString().trim().length() == 0)
vNpInches.setError("Missing Field");
}
}
return false;
}
});
}
double mBodyMassIndex;
double mBasalMetabolicRate;
double mCaloriesToMaintainWeight;
double mCaloriesToMeetGoal;
double mCDailyCarbohydrates;
double mDailyFat;
double mDailyProtein;
double mCaloriesGiveUp;
private void equations() {
mEquations = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
mBodyMassIndex = Equations.personBMI(Double.valueOf(vEtWeight.getText().toString()), Double.valueOf(vNpFeet.getText().toString()), Double.valueOf(vNpInches.getText().toString()));
mBasalMetabolicRate = Equations.personBMR(personSex, Double.valueOf(vEtWeight.getText().toString()), Double.valueOf(vNpFeet.getText().toString()), Double.valueOf(vNpInches.getText().toString()), Double.valueOf(vNpAge.getText().toString()));
mCaloriesToMaintainWeight = Equations.personActivityLevel(vSpnActivity.getSelectedItemPosition()) *
Equations.personBMR(personSex, Double.valueOf(vEtWeight.getText().toString()), Double.valueOf(vNpFeet.getText().toString()), Double.valueOf(vNpInches.getText().toString()), Double.valueOf(vNpAge.getText().toString()));
mCaloriesToMeetGoal = Equations.weightLossPerWeek(vWeightLoss.getSelectedItemPosition(), mCaloriesToMaintainWeight);
mCaloriesGiveUp = Equations.caloriesToGiveUpk(vWeightLoss.getSelectedItemPosition());
mDailyFat = (.275 * mCaloriesToMeetGoal) / 9;
mCDailyCarbohydrates = (.50 * mCaloriesToMeetGoal) / 4;
mDailyProtein = (.225 * mCaloriesToMeetGoal) / 4;
return null;
}
protected void onPostExecute(Void result) {
savePreferences(Globals.USER_BODY_MASS_INDEX, String.valueOf(mBodyMassIndex));
savePreferences(Globals.USER_BASAL_METABOLIC_RATE, String.valueOf(mBasalMetabolicRate));
savePreferences(Globals.USER_CALORIES_TO_MAINTAIN_WEIGHT, String.valueOf(mCaloriesToMaintainWeight));
savePreferences(Globals.USER_CALORIES_TO_REACH_GOAL, String.valueOf(mCaloriesToMeetGoal));
savePreferences(Globals.USER_DAILY_FAT, String.valueOf(mDailyFat));
savePreferences(Globals.USER_DAILY_CARBOHYDRATES, String.valueOf(mCDailyCarbohydrates));
savePreferences(Globals.USER_DAILY_PROTEIN, String.valueOf(mDailyProtein));
savePreferences(Globals.IS_USER_INFORMATION_SAVED, Globals.USER_INFORMATION_SAVED);
savePreferences(Globals.USER_CALORIES_GIVE_UP, String.valueOf(mCaloriesGiveUp));
WeightLog weightLog = new WeightLog();
weightLog.setDate(new Date());
weightLog.setCurrentWeight(Double.valueOf(vEtWeight.getText().toString()));
weightLog.save();
Intent i = new Intent(getActivity(), MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
getActivity().finish();
}
};
}
private void savePreferences(String key, String value) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value).apply();
}
private void loadSavedPreferences() {
String stringSpnActivityString = sharedPreferences.getString(Globals.USER_ACTIVITY_LEVEL, "0");
String stringSpinnerWeightLossGoal = sharedPreferences.getString(Globals.USER_WEIGHT_LOSS_GOAL, "4");
String stringRbSex = sharedPreferences.getString(Globals.USER_SEX, "female");
if (Globals.SEX_MALE.equals(stringRbSex)) {
vRbMale.setChecked(true);
} else {
vRbFemale.setChecked(true);
}
vName.setText(sharedPreferences.getString(Globals.USER_NAME, ""));
vNpAge.setText(sharedPreferences.getString(Globals.USER_AGE, ""));
vEtWeight.setText(sharedPreferences.getString(Globals.USER_WEIGHT, ""));
vEtGoal.setText(sharedPreferences.getString(Globals.USER_WEIGHT_GOAL, ""));
vNpFeet.setText(sharedPreferences.getString(Globals.USER_HEIGHT_FEET, ""));
vNpInches.setText(sharedPreferences.getString(Globals.USER_HEIGHT_INCHES, ""));
vSpnActivity.setSelection(Integer.valueOf(stringSpnActivityString));
vWeightLoss.setSelection(Integer.valueOf(stringSpinnerWeightLossGoal));
}
}