com.eugene.fithealthmaingit.UI.UserInformationFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.eugene.fithealthmaingit.UI.UserInformationFragment.java

Source

/*
 * 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));
    }
}