Rev 6 | Autoría | Ultima modificación | Ver Log |
package com.cesams.twogetskills.inconcert.fragment;import android.os.Bundle;import androidx.fragment.app.Fragment;import androidx.lifecycle.LifecycleOwner;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.bumptech.glide.Glide;import com.bumptech.glide.load.engine.DiskCacheStrategy;import com.bumptech.glide.load.model.GlideUrl;import com.bumptech.glide.load.model.LazyHeaders;import com.bumptech.glide.request.RequestOptions;import com.cesams.twogetskills.inconcert.Constants;import com.cesams.twogetskills.inconcert.R;import com.cesams.twogetskills.inconcert.adapter.TabsCapsulesAdapter;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.dao.TopicDao;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.entity.Topic;import com.cesams.twogetskills.inconcert.library.MD5;import com.cesams.twogetskills.inconcert.skeleton.ITwoGetSkills;import com.cesams.twogetskills.inconcert.viewmodel.SlideRefreshUIViewModel;import com.google.android.material.tabs.TabLayout;import java.text.Normalizer;import java.util.ArrayList;import java.util.Calendar;import java.util.HashMap;import java.util.List;import java.util.Random;import java.util.TimeZone;/*** A simple {@link Fragment} subclass.* Use the {@link WelcomeFragment#newInstance} factory method to* create an instance of this fragment.*/public class WelcomeFragment extends Fragment implements TabsCapsulesAdapter.ClickListener, LifecycleOwner {TextView username, titulotarjeta, progresoporcentaje, empezar; ProgressBar progresotarjeta;private ITwoGetSkills iTwoGetSkills; View card;ArrayList<HashMap<String, String>> capsuleList;ImageView imagetarjeta;TabsCapsulesAdapter adapter2;RecyclerView categorizados;EditText busqueda; TextView textowelcome; Button continuar;TabLayout tabs; String tabactual="pendientes"; private SlideRefreshUIViewModel mSlideRefreshUi;public WelcomeFragment() {// Required empty public constructor}public static WelcomeFragment newInstance() {WelcomeFragment fragment = new WelcomeFragment();return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {iTwoGetSkills = (ITwoGetSkills) getActivity();View view= inflater.inflate(R.layout.fragment_welcome, container, false);username=view.findViewById(R.id.textView14);textowelcome= view.findViewById(R.id.textView15);busqueda=view.findViewById(R.id.busqueda);card= view.findViewById(R.id.include); empezar= view.findViewById(R.id.titlenotifi); tabs=view.findViewById(R.id.tabLayout);capsuleList = new ArrayList<>();mSlideRefreshUi = new ViewModelProvider(requireActivity()).get(SlideRefreshUIViewModel.class);//Tarjeta Principaltitulotarjeta = view.findViewById(R.id.description); progresotarjeta= view.findViewById(R.id.progressBar2); imagetarjeta= view.findViewById(R.id.imagelist);continuar = view.findViewById(R.id.button); progresoporcentaje = view.findViewById(R.id.textView16);username.setText("¡Hola, "+(iTwoGetSkills.getPreference().getFirstName() +"!"));tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Overridepublic void onTabSelected(TabLayout.Tab tab) {int position=tab.getPosition();capsuleList.clear();adapter2.notifyDataSetChanged();if(position==0){tabactual="pendientes";loadData(tabactual,"");adapter2.notifyDataSetChanged();}else if(position==1){tabactual="cursando";loadData("cursando","");adapter2.notifyDataSetChanged();}else if(position==2){tabactual="finalizados";loadData("finalizados","");adapter2.notifyDataSetChanged();}}@Overridepublic void onTabUnselected(TabLayout.Tab tab) {}@Overridepublic void onTabReselected(TabLayout.Tab tab) {}});loadData("pendientes","");busqueda.setOnFocusChangeListener(new View.OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {if(hasFocus){card.setVisibility(View.GONE);username.setVisibility(View.GONE);textowelcome.setVisibility(View.GONE);Log.e("Tengo foco"," Oculto");}}});busqueda.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) {// Log.e("El texto","buscado: "+s);capsuleList.clear();adapter2.notifyDataSetChanged();loadData(tabactual, s.toString());}@Overridepublic void afterTextChanged(Editable s) {}});adapter2 = new TabsCapsulesAdapter(getContext(),capsuleList);categorizados = view.findViewById(R.id.categorizados);GridLayoutManager layoutcategoria = new GridLayoutManager(getContext(),1,GridLayoutManager.VERTICAL, false);categorizados.setLayoutManager(layoutcategoria);categorizados.setAdapter(adapter2);adapter2.setClickListener(this);categorizados.setOnFlingListener(new RecyclerView.OnFlingListener() {@Overridepublic boolean onFling(int velocityX, int velocityY) {if (categorizados.canScrollVertically(-1) ) {// Log.e("Se activa", "On fling");card.setVisibility(View.GONE);username.setVisibility(View.GONE);textowelcome.setVisibility(View.GONE);}else{card.setVisibility(View.VISIBLE);username.setVisibility(View.VISIBLE);textowelcome.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 = capsuleList.size() == 1? "Hay 1 cápsula nueva disponible": "Tiene " + capsuleList.size() + " cápsulas pendientes para ver";Toast.makeText(getContext(), ""+message, Toast.LENGTH_LONG).show();iTwoGetSkills.saveNotificationCenter("Contenidos disponibles","",message);});iTwoGetSkills.showNavigationAndToolbar();return view;}@Overridepublic void onResume() {super.onResume();getActivity().runOnUiThread(() -> {loadContinuecard();});}@Overridepublic void onHiddenChanged(boolean hidden) {super.onHiddenChanged(hidden);// Log.e("TAG", "onHiddenChanged : " + (hidden ? "true" : "false"));if(!hidden) {// Log.e("Esta oculto", "el fragmento");getActivity().runOnUiThread(() -> {capsuleList.clear();loadContinuecard();loadData("pendientes","");adapter2.notifyDataSetChanged();tabs.getTabAt(0).select();});}}private void loadContinuecard(){//Log.e("Cargo datos"," en tarjeta principal");//Capsula de primera tarjetaCapsuleDao capsuleDao = iTwoGetSkills.getDatabase().getCapsuleDao();boolean continues=false;Progress progress;ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();List<Capsule> dbCapsules= capsuleDao.selectAll();for(Capsule dbCapsule : dbCapsules){progress = progressDao.selectByCapsuleUuid(dbCapsule.getUuid());if (progress != null) {if (progress.getProgress() < 100) {// Log.e("Es menor"," a 100");continues=true;titulotarjeta.setText(dbCapsule.getName());progresotarjeta.setVisibility(View.VISIBLE);progresoporcentaje.setVisibility(View.VISIBLE);progresotarjeta.setProgress((int) progress.getProgress());progresoporcentaje.setText("" + progress.getProgress() + " %");empezar.setText("En curso");iTwoGetSkills.getPreference().setOrigennavigation("welcome");int fragmentIdxActive = iTwoGetSkills.getPreference().getFragmentIdxActive();if (fragmentIdxActive != Constants.IDX_FRAGMENT_WELCOME) {return;}iTwoGetSkills.getPreference().setCapsuleUuidActive(dbCapsule.getUuid());// Log.e("La capsula","activa en loadcurso"+dbCapsule.getUuid());iTwoGetSkills.getPreference().setTopicUuidActive(dbCapsule.getTopicUuid());if (dbCapsule.getImage() != null && !dbCapsule.getImage().equals("")) {TimeZone timeZone = TimeZone.getTimeZone("UTC");Calendar calendar = Calendar.getInstance(timeZone);TimeZone tz = calendar.getTimeZone();int created = (int) (calendar.getTimeInMillis() / 1000);Random random = new Random(created);int rand = 1000 + random.nextInt(8999);String deviceUuid = iTwoGetSkills.getPreference().getDeviceUuid();String password = iTwoGetSkills.getPreference().getPassword();String secret = MD5.generar(password + ':' + created + ':' + rand);GlideUrl url = new GlideUrl(dbCapsule.getImage(), new LazyHeaders.Builder().addHeader(Constants.HTTP_HEADER_ACCEPT, Constants.HTTP_HEADER_ACCEPT_VALUE).addHeader(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceUuid).addHeader(Constants.HTTP_HEADER_SECURITY_SECRET, secret).addHeader(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created)).addHeader(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand)).build());RequestOptions options = new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL);Glide.with(getContext()).load(url).thumbnail().apply(options).into(imagetarjeta);}}}}if(titulotarjeta.getText().equals("")){// Log.e("Nombre","vacio");SlideDao slideDao = iTwoGetSkills.getDatabase().getSlideDao();//Despues del recorrido no se encontro progreso en ninguna capsula, por lo cual la tarjeta queda vacia// vamos a llenarla con la ultima capsula, que debe ser nueva al no tener progresofor(Capsule dbCapsule : dbCapsules){List<Slide> slides = slideDao.selectAllByCapsuleUuid(dbCapsule.getUuid());if (slides.isEmpty()) {} else {progress = progressDao.selectByCapsuleUuid(dbCapsule.getUuid());// Log.e("Capsula","Es omitida, no tiene slides");if (progress == null) {// Log.e("Es nueva","");titulotarjeta.setText(dbCapsule.getName());progresotarjeta.setVisibility(View.INVISIBLE);progresoporcentaje.setVisibility(View.INVISIBLE);empezar.setText("Nueva");continuar.setText("Ver cápsula");iTwoGetSkills.getPreference().setOrigennavigation("welcome");int fragmentIdxActive = iTwoGetSkills.getPreference().getFragmentIdxActive();if (fragmentIdxActive != Constants.IDX_FRAGMENT_WELCOME) {return;}iTwoGetSkills.getPreference().setCapsuleUuidActive(dbCapsule.getUuid());// Log.e("La capsula","activa en load"+dbCapsule.getUuid());iTwoGetSkills.getPreference().setTopicUuidActive(dbCapsule.getTopicUuid());if (dbCapsule.getImage() != null && !dbCapsule.getImage().equals("")) {TimeZone timeZone = TimeZone.getTimeZone("UTC");Calendar calendar = Calendar.getInstance(timeZone);TimeZone tz = calendar.getTimeZone();int created = (int) (calendar.getTimeInMillis() / 1000);Random random = new Random(created);int rand = 1000 + random.nextInt(8999);String deviceUuid = iTwoGetSkills.getPreference().getDeviceUuid();String password = iTwoGetSkills.getPreference().getPassword();String secret = MD5.generar(password + ':' + created + ':' + rand);GlideUrl url = new GlideUrl(dbCapsule.getImage(), new LazyHeaders.Builder().addHeader(Constants.HTTP_HEADER_ACCEPT, Constants.HTTP_HEADER_ACCEPT_VALUE).addHeader(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceUuid).addHeader(Constants.HTTP_HEADER_SECURITY_SECRET, secret).addHeader(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created)).addHeader(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand)).build());RequestOptions options = new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL);Glide.with(getContext()).load(url).thumbnail().apply(options).into(imagetarjeta);}}}}}else if (!titulotarjeta.getText().equals("") && !continues){// Log.e("Nombre","vacio");SlideDao slideDao = iTwoGetSkills.getDatabase().getSlideDao();//Despues del recorrido no se encontro progreso en ninguna capsula, por lo cual la tarjeta queda vacia// vamos a llenarla con la ultima capsula, que debe ser nueva al no tener progresofor(Capsule dbCapsule : dbCapsules){List<Slide> slides = slideDao.selectAllByCapsuleUuid(dbCapsule.getUuid());if (slides.isEmpty()) {} else {progress = progressDao.selectByCapsuleUuid(dbCapsule.getUuid());// Log.e("Capsula","Es omitida, no tiene slides");if (progress == null) {// Log.e("Es nueva","");titulotarjeta.setText(dbCapsule.getName());progresotarjeta.setVisibility(View.INVISIBLE);progresoporcentaje.setVisibility(View.INVISIBLE);empezar.setText("Nueva");continuar.setText("Ver cápsula");iTwoGetSkills.getPreference().setOrigennavigation("welcome");int fragmentIdxActive = iTwoGetSkills.getPreference().getFragmentIdxActive();if (fragmentIdxActive != Constants.IDX_FRAGMENT_WELCOME) {return;}iTwoGetSkills.getPreference().setCapsuleUuidActive(dbCapsule.getUuid());// Log.e("La capsula","activa en load"+dbCapsule.getUuid());iTwoGetSkills.getPreference().setTopicUuidActive(dbCapsule.getTopicUuid());if (dbCapsule.getImage() != null && !dbCapsule.getImage().equals("")) {TimeZone timeZone = TimeZone.getTimeZone("UTC");Calendar calendar = Calendar.getInstance(timeZone);TimeZone tz = calendar.getTimeZone();int created = (int) (calendar.getTimeInMillis() / 1000);Random random = new Random(created);int rand = 1000 + random.nextInt(8999);String deviceUuid = iTwoGetSkills.getPreference().getDeviceUuid();String password = iTwoGetSkills.getPreference().getPassword();String secret = MD5.generar(password + ':' + created + ':' + rand);GlideUrl url = new GlideUrl(dbCapsule.getImage(), new LazyHeaders.Builder().addHeader(Constants.HTTP_HEADER_ACCEPT, Constants.HTTP_HEADER_ACCEPT_VALUE).addHeader(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceUuid).addHeader(Constants.HTTP_HEADER_SECURITY_SECRET, secret).addHeader(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created)).addHeader(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand)).build());RequestOptions options = new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL);Glide.with(getContext()).load(url).thumbnail().apply(options).into(imagetarjeta);}}}}}continuar.setOnClickListener(v -> {// Log.e("Guardo",""+iTwoGetSkills.getPreference().getOrigenNavigation());Log.e("Capsule","active"+iTwoGetSkills.getPreference().getCapsuleUuidActive());iTwoGetSkills.invokeFragment(Constants.IDX_FRAGMENT_SLIDES);});//Fin de primer tarjeta}private void loadData(String tabposition, String buscar){TopicDao topicDao = iTwoGetSkills.getDatabase().getTopicDao();ArrayList<Topic> dbTopics = (ArrayList<Topic>) topicDao.selectAll();List<Capsule> dbCapsules;CapsuleDao capsuleDao = iTwoGetSkills.getDatabase().getCapsuleDao();ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();SlideDao slideDao = iTwoGetSkills.getDatabase().getSlideDao();if (tabposition.equals("pendientes")){for (Topic dbTopic : dbTopics) {dbCapsules = capsuleDao.selectAllByTopicUuidandOrder(dbTopic.getUuid());Capsule capsule;Progress progress;HashMap<String, String> m_li;for(Capsule dbCapsule : dbCapsules) {capsule = new Capsule();capsule.setTopicUuid(dbCapsule.getTopicUuid());capsule.setUuid(dbCapsule.getUuid());capsule.setName(dbCapsule.getName());capsule.setDescription(dbCapsule.getDescription());capsule.setImage(dbCapsule.getImage());capsule.setPosition(dbCapsule.getPosition());capsule.setUpdatedOn(dbCapsule.getUpdatedOn());m_li = new HashMap<>();//m_li.put("copyright",copy);progress = progressDao.selectByCapsuleUuid(capsule.getUuid());if (progress != null) {capsule.setCompleted(progress.getCompleted());capsule.setViewSlides(progress.getViewSlides());capsule.setTotalSlides(progress.getTotalSlides());capsule.setProgress(progress.getProgress());capsule.setAddedOn(progress.getAddedOn());// Log.e("Agregado en"," "+progress.getAddedOn());// m_li.put("addedon",progress.getAddedOn());m_li.put("view", String.valueOf(progress.getViewSlides()));m_li.put("total", String.valueOf(progress.getTotalSlides()));m_li.put("progress", String.valueOf(progress.getProgress()));m_li.put("completado",String.valueOf(progress.getCompleted()));m_li.put("agregado",progress.getAddedOn());}m_li.put("imagen", capsule.getImage());m_li.put("nombre", capsule.getName());m_li.put("uuid", capsule.getUuid());m_li.put("topicuuid", capsule.getTopicUuid());m_li.put("description", capsule.getDescription());//Lleno la lista segun el requerimiento de filtro accionado por el usuarioList<Slide> slides = slideDao.selectAllByCapsuleUuid(capsule.getUuid());if (slides.isEmpty()) {// Log.e("Capsula","Es omitida, no tiene slides");} else {if (progress == null) {if (buscar.equals("")) {capsuleList.add(m_li);} else {String nombre= capsule.getName();String normalizada= Normalizer.normalize(nombre, Normalizer.Form.NFD);normalizada= normalizada.replaceAll("[^\\p{ASCII}]", "");if (normalizada.matches("(?i).*" + buscar + ".*")) {capsuleList.add(m_li);}}}}}}}else if (tabposition.equals("cursando")){HashMap<String, String> m_li;List<Progress> progress;Capsule capsule;progress = progressDao.selectAllCapsulesProgress();for(Progress dbProgress : progress) {m_li = new HashMap<>();capsule = capsuleDao.selectByUuid(dbProgress.getCapsuleUuid());m_li.put("view", String.valueOf(dbProgress.getViewSlides()));m_li.put("total", String.valueOf(dbProgress.getTotalSlides()));m_li.put("progress", String.valueOf(dbProgress.getProgress()));m_li.put("completado",String.valueOf(dbProgress.getCompleted()));m_li.put("agregado",dbProgress.getAddedOn());if(capsule == null){Log.e("El objeto es"," nulo");}else {m_li.put("imagen", capsule.getImage());m_li.put("nombre", capsule.getName());m_li.put("uuid", capsule.getUuid());m_li.put("topicuuid", capsule.getTopicUuid());m_li.put("description", capsule.getDescription());//Log.e("Lista",""+m_li);//Lleno la lista segun el requerimiento de filtro accionado por el usuarioList<Slide> slides = slideDao.selectAllByCapsuleUuid(capsule.getUuid());if (slides.isEmpty()) {// Log.e("Capsula","Es omitida, no tiene slides");} else {if(dbProgress.getProgress() <= 100 && dbProgress.getCompleted()==0){if (buscar.equals("")) {capsuleList.add(m_li);} else {String nombre= capsule.getName();String normalizada= Normalizer.normalize(nombre, Normalizer.Form.NFD);normalizada= normalizada.replaceAll("[^\\p{ASCII}]", "");if (normalizada.matches("(?i).*" + buscar + ".*")) {capsuleList.add(m_li);}}}}}}}else if (tabposition.equals("finalizados")){HashMap<String, String> m_li;List<Progress> progress;Capsule capsule;progress = progressDao.selectAllCapsulesProgress();for(Progress dbProgress : progress) {m_li = new HashMap<>();capsule = capsuleDao.selectByUuid(dbProgress.getCapsuleUuid());m_li.put("view", String.valueOf(dbProgress.getViewSlides()));m_li.put("total", String.valueOf(dbProgress.getTotalSlides()));m_li.put("progress", String.valueOf(dbProgress.getProgress()));m_li.put("completado",String.valueOf(dbProgress.getCompleted()));m_li.put("agregado",dbProgress.getAddedOn());if(capsule == null){Log.e("El objeto esta", "nulo");}else{m_li.put("imagen", capsule.getImage());m_li.put("nombre", capsule.getName());m_li.put("uuid", capsule.getUuid());m_li.put("topicuuid", capsule.getTopicUuid());m_li.put("description", capsule.getDescription());//Lleno la lista segun el requerimiento de filtro accionado por el usuarioList<Slide> slides = slideDao.selectAllByCapsuleUuid(capsule.getUuid());if (slides.isEmpty()) {// Log.e("Capsula","Es omitida, no tiene slides");} else {if(dbProgress.getProgress() >= 100 && dbProgress.getCompleted()==1){if (buscar.equals("")) {//capsule.getCompleted();capsuleList.add(m_li);} else {String nombre= capsule.getName();String normalizada= Normalizer.normalize(nombre, Normalizer.Form.NFD);normalizada= normalizada.replaceAll("[^\\p{ASCII}]", "");if (normalizada.matches("(?i).*" + buscar + ".*")) {capsuleList.add(m_li);}}}}}}}}@Overridepublic void onItemClick(int position, View v) {// Log.e("Evento","del click"+position);iTwoGetSkills.getPreference().setCapsuleUuidActive(capsuleList.get(position).get("uuid"));iTwoGetSkills.getPreference().setTopicUuidActive(capsuleList.get(position).get("topicuuid"));iTwoGetSkills.invokeFragment(Constants.IDX_FRAGMENT_SLIDES);iTwoGetSkills.getPreference().setOrigennavigation("welcome");iTwoGetSkills.hideKeyboard(v); //Ocultamos el teclado// Log.e("Completada",""+capsuleList.get(position).get("completado"));// Log.e("Capsula","topic active"+mDataSet.get(viewHolder.getAbsoluteAdapterPosition()).get("topicuuid"));}}