com.eugene.fithealthmaingit.UI.NavFragments.FragmentWeight.java Source code

Java tutorial

Introduction

Here is the source code for com.eugene.fithealthmaingit.UI.NavFragments.FragmentWeight.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.NavFragments;

import android.app.Activity;
import android.content.SharedPreferences;
import android.graphics.Paint;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.widget.Toolbar;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

import com.db.chart.Tools;
import com.db.chart.model.LineSet;
import com.db.chart.view.LineChartView;
import com.db.chart.view.XController;
import com.db.chart.view.YController;
import com.eugene.fithealthmaingit.Custom.TextViewFont;
import com.eugene.fithealthmaingit.Databases_Adapters_ListViews.LogWeight.WeightLog;
import com.eugene.fithealthmaingit.Databases_Adapters_ListViews.LogWeight.WeightLogAdapter;
import com.eugene.fithealthmaingit.R;
import com.eugene.fithealthmaingit.UI.Dialogs.UpdateWeightDialogFragment;
import com.eugene.fithealthmaingit.Utilities.Equations;
import com.eugene.fithealthmaingit.Utilities.Globals;
import com.eugene.fithealthmaingit.Utilities.SetListHeight.SetWeightListHeight;

import org.apache.commons.math3.util.Precision;

import java.text.DecimalFormat;

public class FragmentWeight extends Fragment {
    private View v;
    DecimalFormat df = new DecimalFormat("0");
    WeightLogAdapter weightLogAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.fragment_weight, container, false);
        findViews();
        chart();
        return v;
    }

    ListView listWeight;
    int max;
    LineChartView mLineChart;
    int min;
    float goalWeightLine;
    int goalPosition;
    double weightPerWeek;
    double timeTillGoal;

    private void findViews() {
        Toolbar mToolbar = (Toolbar) v.findViewById(R.id.toolbar_weight);
        TextViewFont txtTitle = (TextViewFont) v.findViewById(R.id.txtTitle);
        txtTitle.setText("Weight");
        mToolbar.inflateMenu(R.menu.menu_weight);
        mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                if (menuItem.getItemId() == R.id.action_create) {
                    FragmentManager fm = getActivity().getSupportFragmentManager();
                    UpdateWeightDialogFragment suggestionFragment = new UpdateWeightDialogFragment();
                    suggestionFragment.show(fm, "Fragment");
                }
                return false;
            }
        });
        mToolbar.setNavigationIcon(R.mipmap.ic_menu);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCallbacks.openNavigationDrawer();
            }
        });
        weightLogAdapter = new WeightLogAdapter(getActivity(), 0, WeightLog.all());
        listWeight = (ListView) v.findViewById(R.id.listWeight);
        listWeight.setAdapter(weightLogAdapter);
        SetWeightListHeight.setListViewHeight(listWeight);
        WeightLog weightLogStart = weightLogAdapter.getItem(0);
        TextView startWeight = (TextView) v.findViewById(R.id.startWeight);
        startWeight.setText(df.format(weightLogStart.getCurrentWeight()) + " lbs");
        WeightLog weightLogCurrent = weightLogAdapter.getItem(weightLogAdapter.getCount() - 1);
        TextView currentWeight = (TextView) v.findViewById(R.id.currentWeight);
        currentWeight.setText(df.format(weightLogCurrent.getCurrentWeight()) + " lbs");
        double totalWeightLoss = weightLogStart.getCurrentWeight() - weightLogCurrent.getCurrentWeight();
        TextView lossWeight = (TextView) v.findViewById(R.id.lossWeight);
        lossWeight.setText(df.format(totalWeightLoss) + " lbs");
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        TextView goalWeight = (TextView) v.findViewById(R.id.goalWeight);
        goalWeight.setText(sharedPreferences.getString(Globals.USER_WEIGHT_GOAL, "") + " lbs");
        double weightRemaining = weightLogCurrent.getCurrentWeight()
                - Double.valueOf(sharedPreferences.getString(Globals.USER_WEIGHT_GOAL, ""));
        TextView remainderWeight = (TextView) v.findViewById(R.id.remainderWeight);
        remainderWeight.setText(df.format(weightRemaining) + " lbs");
        max = (int) Precision.round(weightLogStart.getCurrentWeight(), -1) + 10;
        if (Double.valueOf(sharedPreferences.getString(Globals.USER_WEIGHT_GOAL, "")) < weightLogCurrent
                .getCurrentWeight()) {
            min = (int) Precision.round(Integer.valueOf(sharedPreferences.getString(Globals.USER_WEIGHT_GOAL, "")),
                    -1) - 10;
        } else {
            min = (int) Precision.round(weightLogCurrent.getCurrentWeight(), -1) - 10;
        }
        goalWeightLine = Float.valueOf(sharedPreferences.getString(Globals.USER_WEIGHT_GOAL, ""));

        goalPosition = Integer.valueOf(sharedPreferences.getString(Globals.USER_WEIGHT_LOSS_GOAL, ""));
        if (goalPosition == 0 || goalPosition == 8) {
            weightPerWeek = 2;
        }
        if (goalPosition == 1 || goalPosition == 7) {
            weightPerWeek = 1.5;
        }
        if (goalPosition == 2 || goalPosition == 6) {
            weightPerWeek = 1;
        }
        if (goalPosition == 3 || goalPosition == 5) {
            weightPerWeek = .5;
        }
        if (goalPosition == 4) {
            weightPerWeek = 0;
        }
        timeTillGoal = weightRemaining / weightPerWeek;

        TextView timeRem = (TextView) v.findViewById(R.id.timeRem);
        timeRem.setText(df.format(timeTillGoal) + " Week(s)");
    }

    Paint mLineGridPaint;
    LineSet dataSet;
    float[] simpleArray;
    String[] dates;

    private void chart() {
        mLineChart = (LineChartView) v.findViewById(R.id.linechart);
        mLineChart.reset();
        dataSet = new LineSet();
        simpleArray = new float[weightLogAdapter.getCount()];
        dates = new String[weightLogAdapter.getCount()];
        for (int i = 0; i < weightLogAdapter.getCount(); i++) {
            WeightLog weightLogWeight = weightLogAdapter.getItem(i);
            simpleArray[i] = (float) weightLogWeight.getCurrentWeight();
            dates[i] = String.valueOf(DateFormat.format("MMM dd", weightLogWeight.getDate()));
        }
        dataSet.addPoints(dates, simpleArray);
        mLineGridPaint = new Paint();
        mLineGridPaint.setColor(this.getResources().getColor(R.color.accent));
        mLineGridPaint.setStyle(Paint.Style.FILL);
        mLineGridPaint.setAntiAlias(true);
        /**
         * Controlling the data set and setting it to the chart.
         */
        dataSet.setDots(true).setDotsColor(this.getResources().getColor(R.color.primary))
                .setDotsRadius(Tools.fromDpToPx(3)).setDotsStrokeThickness(Tools.fromDpToPx(1))
                .setDotsStrokeColor(this.getResources().getColor(R.color.primary))
                .setLineColor(this.getResources().getColor(R.color.primary_dark))
                .setLineThickness(Tools.fromDpToPx(1)).beginAt(0).endAt(weightLogAdapter.getCount());
        mLineChart.addData(dataSet);

        mLineChart.setBorderSpacing(Tools.fromDpToPx(0)).setGrid(LineChartView.GridType.HORIZONTAL, mLineGridPaint)
                .setXAxis(false).setXLabels(XController.LabelPosition.OUTSIDE).setYAxis(false)
                .setYLabels(YController.LabelPosition.OUTSIDE).setAxisBorderValues(min, max, 5)
                .setLabelColor(this.getResources().getColor(R.color.text_color))
                .setLabelsFormat(new DecimalFormat("##' lbs'")).show();

        Paint paint = new Paint();
        paint.setStrokeWidth((float) Equations.dpToPx(getActivity(), 2));
        paint.setColor(getActivity().getResources().getColor(R.color.green));
        mLineChart.setThresholdLine(goalWeightLine, paint);
    }

    private FragmentCallbacks mCallbacks;

    public interface FragmentCallbacks {
        void openNavigationDrawer();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mCallbacks = (FragmentCallbacks) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException("Activity must implement Fragment One.");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mCallbacks = null;
    }

}