AutorÃa | Ultima modificación | Ver Log |
package com.cesams.twogetskills.inconcert.fragment;import android.os.Bundle;import androidx.annotation.Nullable;import androidx.fragment.app.Fragment;import androidx.lifecycle.LifecycleOwner;import androidx.lifecycle.Observer;import androidx.lifecycle.ViewModelProvider;import androidx.recyclerview.widget.GridLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import com.cesams.twogetskills.inconcert.Constants;import com.cesams.twogetskills.inconcert.R;import com.cesams.twogetskills.adapter.MyCapsulesAdapter;import com.cesams.twogetskills.inconcert.dao.CapsuleDao;import com.cesams.twogetskills.inconcert.dao.ProgressDao;import com.cesams.twogetskills.inconcert.dao.SlideDao;import com.cesams.twogetskills.inconcert.entity.Capsule;import com.cesams.twogetskills.inconcert.entity.Progress;import com.cesams.twogetskills.inconcert.entity.Slide;import com.cesams.twogetskills.inconcert.library.ImageService;import com.cesams.twogetskills.inconcert.skeleton.ITwoGetSkills;import com.cesams.twogetskills.inconcert.viewmodel.MyCapsulesInProgressViewModel;import com.cesams.twogetskills.inconcert.viewmodel.MyCapsulesViewModel;import com.google.android.material.tabs.TabLayout;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.List;import org.apache.commons.lang3.StringUtils;public class MyCapsulesFragment extends Fragment implements MyCapsulesAdapter.ClickListener, LifecycleOwner {private ITwoGetSkills iTwoGetSkills;private TextView textViewHelloUsername;private EditText editTextSearch;private TextView textViewWelcome;private RecyclerView recyclerViewCapsules;private TabLayout tabLayout;private MyCapsulesAdapter myCapsulesAdapter;private TextView textViewListingEmpty;private MyCapsulesViewModel myCapsulesViewModel;private MyCapsulesInProgressViewModel myCapsulesInProgressViewModel;private View cardView;private TextView cardTextViewStatus;private TextView cardTextViewTitle;private ProgressBar cardProgressBar;private TextView cardTextViewProgress;private ImageView cardImageView;private Button cardButtonContinue;private DecimalFormat mDecimalFormat;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.mDecimalFormat = new DecimalFormat("#.##");}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {iTwoGetSkills = (ITwoGetSkills) getActivity();View view = inflater.inflate(R.layout.fragment_my_capsules, container, false);textViewHelloUsername =view.findViewById(R.id.fragment_my_capsules_textview_hello_username);String helloUsername = StringUtils.replace(requireActivity().getString(R.string.my_capsules_hello), "%", iTwoGetSkills.getPreference().getFirstName());textViewHelloUsername .setText(helloUsername);textViewListingEmpty = view.findViewById(R.id.fragment_my_capsules_textview_listing_empty);textViewWelcome= view.findViewById(R.id.fragment_my_capsules_textview_welcome);editTextSearch=view.findViewById(R.id.fragment_my_capsules_edit_text_search);cardView = view.findViewById(R.id.fragment_my_capsules_include_cardview);//Tarjeta PrincipalcardTextViewStatus = view.findViewById(R.id.cardview_item_textview_status);cardTextViewTitle = view.findViewById(R.id.cardview_item_textview_title);cardImageView = view.findViewById(R.id.cardview_item_imageview);cardProgressBar = view.findViewById(R.id.cardview_item_progressbar);cardTextViewProgress = view.findViewById(R.id.cardview_item_textview_progress);cardButtonContinue = view.findViewById(R.id.cardview_item_button_continue);cardButtonContinue.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (!StringUtils.isEmpty(myCapsulesInProgressViewModel.getCapsule().getTopicUuid()) || !StringUtils.isEmpty(myCapsulesInProgressViewModel.getCapsule().getUuid())) {iTwoGetSkills.changeCapsuleActiveSourceNavigationMyCapsules(myCapsulesInProgressViewModel.getCapsule().getTopicUuid(), myCapsulesInProgressViewModel.getCapsule().getUuid());}}});myCapsulesViewModel = new ViewModelProvider(requireActivity()).get(MyCapsulesViewModel.class);myCapsulesAdapter = new MyCapsulesAdapter(requireActivity(), myCapsulesViewModel.getCapsuleArrayList());myCapsulesAdapter.setClickListener(this);Observer<ArrayList<Capsule>> myCapsuleListUpdateObserver = new Observer<ArrayList<Capsule>>() {@Overridepublic void onChanged(ArrayList<Capsule> capsuleList) {myCapsulesAdapter.notifyDataSetChanged();}};myCapsulesViewModel.getCapsuleMutableLiveData().observe(requireActivity(), myCapsuleListUpdateObserver);myCapsulesInProgressViewModel = new ViewModelProvider(requireActivity()).get(MyCapsulesInProgressViewModel.class);Observer<Capsule> myCapsuleInProgressUpdateObserver = new Observer<Capsule>() {@Overridepublic void onChanged(Capsule capsuleInProgress) {if (capsuleInProgress == null || StringUtils.isEmpty(capsuleInProgress.getUuid())) {cardTextViewStatus.setText(getContext().getString(R.string.my_capsules_capsule_in_progress_not_found));cardTextViewTitle.setText("");cardProgressBar.setProgress(0);cardTextViewProgress.setText("0 %");cardButtonContinue.setVisibility(View.GONE);} else {String title = StringUtils.trim(capsuleInProgress.getName());title = title.length() > Constants.TITLE_MAX_LENGTH ? StringUtils.substring(title, 0, Constants.TITLE_MAX_LENGTH) + "...": title;cardTextViewStatus.setText(getContext().getString(R.string.my_capsules_capsule_in_progress_found));cardTextViewTitle.setText(title);cardProgressBar.setProgress((int) capsuleInProgress.getProgress());cardTextViewProgress.setText(mDecimalFormat.format(capsuleInProgress.getProgress()) + " %");cardButtonContinue.setVisibility(View.VISIBLE);ImageService.retrieve(getContext(), capsuleInProgress.getImage(), cardImageView);}}};myCapsulesInProgressViewModel.getCapsuleMutableLiveData().observe(requireActivity(), myCapsuleInProgressUpdateObserver);tabLayout = view.findViewById(R.id.fragment_my_capsules_tabLayout);tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Overridepublic void onTabSelected(TabLayout.Tab tab) {String search = "";if (editTextSearch != null) {search = StringUtils.trimToEmpty(editTextSearch.getText().toString());}int tabPosition = Constants.MY_CAPSULES_TAB_PENDING;if (tabLayout != null) {tabPosition = tabLayout.getSelectedTabPosition();}loadData(tabPosition, search);}@Overridepublic void onTabUnselected(TabLayout.Tab tab) {}@Overridepublic void onTabReselected(TabLayout.Tab tab) {}});editTextSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {if(hasFocus) {cardView.setVisibility(View.GONE);textViewHelloUsername.setVisibility(View.GONE);textViewWelcome.setVisibility(View.GONE);}}});editTextSearch.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {String search = "";if (editTextSearch != null) {search = StringUtils.trimToEmpty(editTextSearch.getText().toString());}int tabPosition = Constants.MY_CAPSULES_TAB_PENDING;if (tabLayout != null) {tabPosition = tabLayout.getSelectedTabPosition();}loadData(tabPosition, search);}@Overridepublic void afterTextChanged(Editable s) {}});GridLayoutManager recyclerViewCapsulesLayout = new GridLayoutManager(getContext(),1,GridLayoutManager.VERTICAL, false);recyclerViewCapsules = view.findViewById(R.id.fragment_my_capsules_listing_capsules);recyclerViewCapsules.setLayoutManager(recyclerViewCapsulesLayout);recyclerViewCapsules.setAdapter(myCapsulesAdapter);recyclerViewCapsules.setOnFlingListener(new RecyclerView.OnFlingListener() {@Overridepublic boolean onFling(int velocityX, int velocityY) {if (recyclerViewCapsules.canScrollVertically(-1) ) {cardView.setVisibility(View.GONE);textViewHelloUsername.setVisibility(View.GONE);textViewWelcome.setVisibility(View.GONE);} else {cardView.setVisibility(View.VISIBLE);textViewHelloUsername.setVisibility(View.VISIBLE);textViewWelcome.setVisibility(View.VISIBLE);}return false;}});/* categorizados.setOnScrollChangeListener(new View.OnScrollChangeListener() {@Overridepublic void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {if (!categorizados.canScrollVertically(-1)) {// Toast.makeText(getActivity(), "Last", Toast.LENGTH_LONG).show();capsulas.setVisibility(View.VISIBLE);username.setVisibility(View.VISIBLE);textowelcome.setVisibility(View.VISIBLE);Log.e("On scroll"," se activa");}}});*/getActivity().runOnUiThread(() -> {String message;if (myCapsulesViewModel.getCapsuleArrayList().size() == 1) {message = getContext().getString(R.string.common_one_capsule_available);} else {message = getContext().getString(R.string.common_more_capsules_available);message = StringUtils.replace(message, "%", String.valueOf(myCapsulesViewModel.getCapsuleArrayList().size()));}Toast.makeText(getContext(), message, Toast.LENGTH_LONG).show();iTwoGetSkills.saveNotificationCenter(getContext().getString(R.string.common_content_available),"",message);});iTwoGetSkills.showNavigationAndToolbar();return view;}@Overridepublic void onStart() {super.onStart();getActivity().runOnUiThread(() -> {String search = "";if (editTextSearch != null) {search = StringUtils.trimToEmpty(editTextSearch.getText().toString());}int tabPosition = Constants.MY_CAPSULES_TAB_PENDING;if (tabLayout != null) {tabPosition = tabLayout.getSelectedTabPosition();}loadData(tabPosition, search);loadCapsuleInProgerss();});}@Overridepublic void onResume() {super.onResume();getActivity().runOnUiThread(() -> {String search = "";if (editTextSearch != null) {search = StringUtils.trimToEmpty(editTextSearch.getText().toString());}int tabPosition = Constants.MY_CAPSULES_TAB_PENDING;if (tabLayout != null) {tabPosition = tabLayout.getSelectedTabPosition();}loadData(tabPosition, search);loadCapsuleInProgerss();});}@Overridepublic void onHiddenChanged(boolean hidden) {super.onHiddenChanged(hidden);if(!hidden) {getActivity().runOnUiThread(() -> {String search = "";if (editTextSearch != null) {search = StringUtils.trimToEmpty(editTextSearch.getText().toString());}int tabPosition = Constants.MY_CAPSULES_TAB_PENDING;if (tabLayout != null) {tabPosition = tabLayout.getSelectedTabPosition();}loadData(tabPosition, search);loadCapsuleInProgerss();});}}private void loadCapsuleInProgerss(){CapsuleDao capsuleDao = iTwoGetSkills.getDatabase().getCapsuleDao();Capsule capsule = capsuleDao.selectLastInProgress(iTwoGetSkills.getPreference().getUserUuid());if (capsule == null) {myCapsulesInProgressViewModel.getCapsule().setUuid("");myCapsulesInProgressViewModel.getCapsule().setTopicUuid("");myCapsulesInProgressViewModel.getCapsule().setName("");myCapsulesInProgressViewModel.getCapsule().setDescription("");myCapsulesInProgressViewModel.getCapsule().setPosition(0);myCapsulesInProgressViewModel.getCapsule().setImage("");myCapsulesInProgressViewModel.getCapsule().setCompleted(0);myCapsulesInProgressViewModel.getCapsule().setTotalComments(0);myCapsulesInProgressViewModel.getCapsule().setLinkComments("");myCapsulesInProgressViewModel.getCapsule().setLinkCommentAdd("");myCapsulesInProgressViewModel.getCapsule().setViewSlides(0);myCapsulesInProgressViewModel.getCapsule().setTotalSlides(0);myCapsulesInProgressViewModel.getCapsule().setProgress(0);myCapsulesInProgressViewModel.getCapsule().setAddedOn("");myCapsulesInProgressViewModel.getCapsule().setUpdatedOn("");} else {myCapsulesInProgressViewModel.getCapsule().setUuid(capsule.getUuid());myCapsulesInProgressViewModel.getCapsule().setTopicUuid(capsule.getTopicUuid());myCapsulesInProgressViewModel.getCapsule().setName(capsule.getName());myCapsulesInProgressViewModel.getCapsule().setDescription(capsule.getDescription());myCapsulesInProgressViewModel.getCapsule().setPosition(capsule.getPosition());myCapsulesInProgressViewModel.getCapsule().setImage(capsule.getImage());myCapsulesInProgressViewModel.getCapsule().setCompleted(capsule.getCompleted());myCapsulesInProgressViewModel.getCapsule().setTotalComments(capsule.getTotalComments());myCapsulesInProgressViewModel.getCapsule().setLinkComments(capsule.getLinkComments());myCapsulesInProgressViewModel.getCapsule().setLinkCommentAdd(capsule.getLinkCommentAdd());myCapsulesInProgressViewModel.getCapsule().setViewSlides(capsule.getViewSlides());myCapsulesInProgressViewModel.getCapsule().setTotalSlides(capsule.getTotalSlides());myCapsulesInProgressViewModel.getCapsule().setProgress(capsule.getProgress());myCapsulesInProgressViewModel.getCapsule().setAddedOn(capsule.getAddedOn());myCapsulesInProgressViewModel.getCapsule().setUpdatedOn(capsule.getUpdatedOn());ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();Progress progress = progressDao.selectByCapsuleUuid(capsule.getUuid());if (progress != null) {capsule.setViewSlides(progress.getViewSlides());capsule.setTotalSlides(progress.getTotalSlides());capsule.setProgress(progress.getProgress());myCapsulesInProgressViewModel.getCapsule().setViewSlides(progress.getViewSlides());myCapsulesInProgressViewModel.getCapsule().setTotalSlides(progress.getTotalSlides());myCapsulesInProgressViewModel.getCapsule().setProgress(progress.getProgress());}}myCapsulesInProgressViewModel.getCapsuleMutableLiveData().setValue(capsule);}private void loadData(int tabPosition, String search){Capsule capsule;List<Capsule> dbCapsules;CapsuleDao capsuleDao = iTwoGetSkills.getDatabase().getCapsuleDao();SlideDao slideDao = iTwoGetSkills.getDatabase().getSlideDao();ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();Progress progress;switch (tabPosition){case Constants.MY_CAPSULES_TAB_IN_PROGRESS :if (StringUtils.isEmpty(search)) {dbCapsules = capsuleDao.selectAllInProgress(iTwoGetSkills.getPreference().getUserUuid());} else {dbCapsules = capsuleDao.selectAllInProgressWithSearch(iTwoGetSkills.getPreference().getUserUuid(), '%' + search + '%');}break;case Constants.MY_CAPSULES_TAB_COMPLETED:if (StringUtils.isEmpty(search)) {dbCapsules = capsuleDao.selectAllCompleted(iTwoGetSkills.getPreference().getUserUuid());} else {dbCapsules = capsuleDao.selectAllCompletedWithSearch(iTwoGetSkills.getPreference().getUserUuid(), '%' + search + '%');}break;default :if (StringUtils.isEmpty(search)) {dbCapsules = capsuleDao.selectAllPending(iTwoGetSkills.getPreference().getUserUuid());} else {dbCapsules = capsuleDao.selectAllPendingWithSearch(iTwoGetSkills.getPreference().getUserUuid(), '%' + search + '%');}break;}myCapsulesViewModel.getCapsuleArrayList().clear();for (Capsule dbCapsule: dbCapsules) {capsule = new Capsule();capsule.setUuid(dbCapsule.getUuid());capsule.setTopicUuid(dbCapsule.getTopicUuid());capsule.setName(dbCapsule.getName());capsule.setDescription(dbCapsule.getDescription());capsule.setImage(dbCapsule.getImage());capsule.setPosition(dbCapsule.getPosition());capsule.setLinkCommentAdd(dbCapsule.getLinkCommentAdd());capsule.setLinkComments(dbCapsule.getLinkComments());capsule.setTotalComments(dbCapsule.getTotalComments());capsule.setTotalRating(dbCapsule.getTotalRating());capsule.setTotalSlides(0);capsule.setViewSlides(0);capsule.setProgress(0);capsule.setAddedOn(dbCapsule.getAddedOn());capsule.setUpdatedOn(dbCapsule.getUpdatedOn());progress = progressDao.selectByCapsuleUuid(capsule.getUuid());if (progress == null) {capsule.setTotalSlides(slideDao.getCountByCapsuleUuid(capsule.getUuid()).getCount());} else {capsule.setProgress(progress.getProgress());capsule.setViewSlides(progress.getViewSlides());capsule.setTotalSlides(progress.getTotalSlides());}myCapsulesViewModel.getCapsuleArrayList().add(capsule);}myCapsulesViewModel.getCapsuleMutableLiveData().setValue(myCapsulesViewModel.getCapsuleArrayList());textViewListingEmpty.setVisibility(dbCapsules.size() == 0 ? View.VISIBLE : View.GONE);}@Overridepublic void onItemClick(int position, View v) {iTwoGetSkills.hideKeyboard(v);Capsule capsule = myCapsulesViewModel.getCapsuleArrayList().get(position);iTwoGetSkills.changeCapsuleActiveSourceNavigationMyCapsules(capsule.getTopicUuid(), capsule.getUuid());}}