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());
}
}