Proyectos de Subversion Android Microlearning

Rev

Rev 29 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

package com.cesams.twogetskills.fragment;


import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.cesams.twogetskills.Constants;
import com.cesams.twogetskills.R;
import com.cesams.twogetskills.dao.CapsuleDao;
import com.cesams.twogetskills.dao.ProgressDao;

import com.cesams.twogetskills.dao.TopicDao;
import com.cesams.twogetskills.entity.Capsule;
import com.cesams.twogetskills.entity.Company;
import com.cesams.twogetskills.entity.Progress;
import com.cesams.twogetskills.entity.Topic;
import com.cesams.twogetskills.room.ResultCount;
import com.cesams.twogetskills.room.ResultTotalInt;
import com.cesams.twogetskills.skeleton.ITwoGetSkills;
import com.cesams.twogetskills.viewdata.ProgressViewData;
import com.cesams.twogetskills.viewmodel.ProgressViewModel;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;

import java.util.ArrayList;
import java.util.List;


public class ProgressFragment extends Fragment  {
    private static final String TAG = "C2GS - ProgressFragment";
    private ITwoGetSkills iTwoGetSkills;
    private PieChart mChartProgress;
    private PieChart mChartReturning;
    private TextView mTextViewTotal;
    private TextView mTextViewStarted;
    private TextView mTextViewForStart;
    private TextView mTextViewCompleted;
    private ProgressViewModel mProgressViewModel;



    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);


    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment


        return inflater.inflate(R.layout.fragment_progress, container, false);
    }


    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        mProgressViewModel = new ViewModelProvider(requireActivity()).get(ProgressViewModel.class);

        iTwoGetSkills = (ITwoGetSkills) requireActivity();
        iTwoGetSkills.setTitleActionBar(requireActivity().getString(R.string.menu_progress));


        mChartProgress = (PieChart) requireActivity().findViewById(R.id.fragment_progress_chart_progress);
        mChartProgress.animateY(1000);
        mChartProgress.setEntryLabelColor(Color.BLACK);
        mChartProgress.getLegend().setEnabled(false);
        mChartProgress.getDescription().setEnabled(false);
        mChartProgress.setDrawEntryLabels(false);
        mChartProgress.setUsePercentValues(true);
        mChartProgress.setEntryLabelTextSize(16f);
        mChartProgress.setEntryLabelTypeface(Typeface.SANS_SERIF);
        mChartProgress.setTransparentCircleRadius(30f);

        mChartProgress.setCenterTextColor(R.color.appBar);
        mChartProgress.setCenterTextSize(20);


        mChartReturning = (PieChart) requireActivity().findViewById(R.id.fragment_progress_chart_returning);
        mChartReturning.animateY(1000);
        mChartReturning.setEntryLabelColor(Color.BLACK);
        mChartReturning.getLegend().setEnabled(false);
        mChartReturning.getDescription().setEnabled(false);
        mChartReturning.setDrawEntryLabels(false);
        mChartReturning.setUsePercentValues(true);
        mChartReturning.setEntryLabelTextSize(16f);
        mChartReturning.setEntryLabelTypeface(Typeface.SANS_SERIF);
        mChartReturning.setTransparentCircleRadius(30f);
        mChartReturning.setCenterTextColor(R.color.appBar);
        mChartReturning.setCenterTextSize(20);



        mTextViewTotal = (TextView) requireActivity().findViewById(R.id.fragment_progress_textview_status_total);
        mTextViewStarted = (TextView) requireActivity().findViewById(R.id.fragment_progress_textview_status_total_started);
        mTextViewForStart = (TextView) requireActivity().findViewById(R.id.fragment_progress_textview_status_total_for_start);
        mTextViewCompleted = (TextView) requireActivity().findViewById(R.id.fragment_progress_textview_status_total_completed);

        Log.d(TAG, "Declarando el Observador");
        Observer<ProgressViewData> progressUpdateObserver = new Observer<ProgressViewData>() {
            @Override
            public void onChanged(ProgressViewData progressViewData) {
                Log.d(TAG, "Observador - Actualizar el progreso");
                mChartProgress.invalidate();
                mChartReturning.invalidate();

                mTextViewTotal.setText(String.valueOf(progressViewData.getCapsuleTotal()));
                mTextViewStarted.setText(String.valueOf(progressViewData.getCapsuleStarted()));
                mTextViewForStart.setText(String.valueOf(progressViewData.getCapsuleForStart()));
                mTextViewCompleted.setText(String.valueOf(progressViewData.getCapsuleCompleted()));


                ArrayList<Integer> colors = new ArrayList<>();
                colors.add(Color.rgb(70,155,200));
                colors.add(Color.rgb(130,208,  212));

                ArrayList<PieEntry> dataEntryProgress = new ArrayList<PieEntry>();
                dataEntryProgress.add(new PieEntry(progressViewData.getPercentCompleted(), requireActivity().getString(R.string.chart_completed)));
                dataEntryProgress.add(new PieEntry(progressViewData.getPercentIncompleted(), requireActivity().getString(R.string.chart_incompleted)));

                PieDataSet pieDataSetProgress = new PieDataSet(dataEntryProgress,  "Progress");
                pieDataSetProgress.setColors(colors);
                pieDataSetProgress.setDrawValues(false);
                pieDataSetProgress.setSliceSpace(5f);

                PieData pieDataProgress = new PieData(pieDataSetProgress);
                pieDataProgress.setValueTextSize(18f);
                pieDataProgress.setValueTextColor(R.color.colorTextColor);
                pieDataProgress.setValueTypeface(Typeface.DEFAULT_BOLD);

                mChartProgress.setData(pieDataProgress);
                Log.d(TAG, "ChartProgress - CenterText : " + progressViewData.getPercentCompleted() + " %");

                mChartProgress.setCenterText(progressViewData.getPercentCompleted() + " %");
                mChartProgress.notifyDataSetChanged();


                ArrayList<PieEntry> dataEntryReturning = new ArrayList<PieEntry>();
                dataEntryReturning.add(new PieEntry( progressViewData.getCapsuleWithReturning(), requireActivity().getString(R.string.chart_returning)));
                dataEntryReturning.add(new PieEntry( progressViewData.getCapsuleWithoutReturning(), requireActivity().getString(R.string.chart_new)));


                PieDataSet pieDataSetReturning = new PieDataSet(dataEntryReturning,  "Returning");
                pieDataSetReturning.setColors(colors);
                pieDataSetReturning.setDrawValues(false);
                pieDataSetReturning.setSliceSpace(5f);

                PieData pieDataReturning = new PieData(pieDataSetReturning);
                pieDataReturning.setValueTextSize(18f);
                pieDataReturning.setValueTextColor(R.color.colorTextColor);
                pieDataReturning.setValueTypeface(Typeface.DEFAULT_BOLD);

                Log.d(TAG, "CharReturning - CenterText : " + progressViewData.getCapsuleWithReturning());

                mChartReturning.setData(pieDataReturning);
                mChartReturning.setCenterText(String.valueOf(progressViewData.getCapsuleWithReturning()));
                mChartReturning.notifyDataSetChanged();

            }
        };




        mProgressViewModel.getProgressMutableLiveData().observe(requireActivity(),progressUpdateObserver);
        loadData();
    }

    @Override
    public void onResume() {
        super.onResume();

        Log.d(TAG, "onResume");
        loadData();
    }




    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);

        Log.d(TAG, "onHiddenChanged : " + (hidden ? "true" : "false"));

        if(!hidden) {
            loadData();
        }
    }

    private void loadData()
    {
        int fragmentIdxActive = iTwoGetSkills.getPreference().getFragmentIdxActive();
        if (fragmentIdxActive != Constants.IDX_FRAGMENT_PROGRESS) {
            return;
        }

        Log.d("BUG 2PLANO", "TopicFragment - loadData");


        String userUuid = iTwoGetSkills.getPreference().getUserUuid();
        String companyUuid = iTwoGetSkills.getCompanyUuidActive();
        if(TextUtils.isEmpty(companyUuid)) {
            List<Company> companies = iTwoGetSkills.getDatabase().getCompanyDao().selectAll();
            if(companies.size() > 0) {
                companyUuid = companies.get(0).getUuid();
                iTwoGetSkills.getPreference().setCompanyUuidActive(companyUuid);
                iTwoGetSkills.getPreference().save();
            }
        }



        TopicDao topicDao = iTwoGetSkills.getDatabase().getTopicDao();
        List<Topic> topics = topicDao.selectAllByCompanyUuid(companyUuid);


        mProgressViewModel.getProgress().setCapsuleTotal(0);
        mProgressViewModel.getProgress().setCapsuleStarted(0);
        mProgressViewModel.getProgress().setCapsuleForStart(0);
        mProgressViewModel.getProgress().setCapsuleCompleted (0);
        mProgressViewModel.getProgress().setCapsuleWithReturning( 0);
        mProgressViewModel.getProgress().setCapsuleWithoutReturning( 0);

        ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();
        CapsuleDao capsuleDao = iTwoGetSkills.getDatabase().getCapsuleDao();
        List<Capsule> capsules = new ArrayList<>();
        Progress progress;
        ResultCount resultCount;
        ResultTotalInt resultTotalInt;
        int capsuleTotal = 0;
        int capsuleTotalCompleted = 0;
        int capsuleTotalWithReturning = 0;
        int capsuleTotalWithoutReturning = 0;
        int totalCapsuleStarted = 0;

        for(Topic topic : topics )
        {
            resultCount = capsuleDao.getCountByTopicUuid(topic.getUuid());
            capsuleTotal =  capsuleTotal + resultCount.getCount();


            resultCount = progressDao.getCountCapsulesCompletedByTopicUuidAndUserUuid(topic.getUuid(), userUuid);
            capsuleTotalCompleted = capsuleTotalCompleted + resultCount.getCount();



            resultTotalInt = progressDao.getCountCapsulesCompletedWithReturningByTopicUuidAndUserUuid(topic.getUuid(), userUuid);
            capsuleTotalWithReturning = capsuleTotalWithReturning + resultTotalInt.getTotal();



            resultCount = progressDao.getCountCapsulesCompletedWithoutReturningByTopicUuidAndUserUuid(topic.getUuid(), userUuid);
            capsuleTotalWithoutReturning = capsuleTotalWithoutReturning + resultCount.getCount();mProgressViewModel.getProgress().setCapsuleWithoutReturning(mProgressViewModel.getProgress().getCapsuleWithoutReturning() +resultCount.getCount());

            //totalSlides += slideDao.getCountByTopicUuid(topic.uuid);
            //totalSlidesCompleted  += progressDao.getCountSlidesCompletedByTopicUuid(topic.uuid);

            capsules = capsuleDao.selectAllByTopicUuid(topic.getUuid());
            for(Capsule capsule : capsules) {
                progress = progressDao.selectByCapsuleUuidAndUserUuid(capsule.getUuid(), userUuid);
                if (progress != null) {
                    if (progress.getCompleted() == 0) {
                        totalCapsuleStarted++;


                    }

                }
            }


        }

        Log.d(TAG, "capsuleTotal : " + capsuleTotal);
        Log.d(TAG, "capsuleTotalCompleted : " + capsuleTotalCompleted);
        Log.d(TAG, "capsuleTotalWithReturning : " + capsuleTotalWithReturning);
        Log.d(TAG, "capsuleTotalWithoutReturning : " + capsuleTotalWithoutReturning);
        Log.d(TAG, "totalCapsuleStarted : " + totalCapsuleStarted);


        mProgressViewModel.getProgress().setCapsuleTotal(capsuleTotal);
        mProgressViewModel.getProgress().setCapsuleCompleted(capsuleTotalCompleted);
        mProgressViewModel.getProgress().setCapsuleWithReturning(capsuleTotalWithReturning);
        mProgressViewModel.getProgress().setCapsuleWithoutReturning(capsuleTotalWithoutReturning);
        mProgressViewModel.getProgress().setCapsuleStarted(totalCapsuleStarted);

        mProgressViewModel.getProgress().setCapsuleForStart(mProgressViewModel.getProgress().getCapsuleTotal() - mProgressViewModel.getProgress().getCapsuleCompleted());


        mProgressViewModel.getProgress().setPercentCompleted(0);
        mProgressViewModel.getProgress().setPercentIncompleted(100);


        if( mProgressViewModel.getProgress().getCapsuleTotal() > 0) {
            mProgressViewModel.getProgress().setPercentCompleted((mProgressViewModel.getProgress().getCapsuleCompleted() * 100) /  mProgressViewModel.getProgress().getCapsuleTotal());
            mProgressViewModel.getProgress().setPercentIncompleted(100 - mProgressViewModel.getProgress().getPercentCompleted());
        }

        mProgressViewModel.getProgressMutableLiveData().setValue(mProgressViewModel.getProgress());
    }
}