Rev 15 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
package com.cesams.twogetskills.inconcert.fragment;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import androidx.cardview.widget.CardView;import androidx.fragment.app.Fragment;import androidx.recyclerview.widget.GridLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.os.Handler;import android.text.Html;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.RatingBar;import android.widget.TextView;import android.widget.Toast;import com.cesams.twogetskills.inconcert.Configuration;import com.cesams.twogetskills.inconcert.Constants;import com.cesams.twogetskills.inconcert.R;import com.cesams.twogetskills.inconcert.activity.MainActivity;import com.cesams.twogetskills.inconcert.adapter.CommentListViewAdapter;import com.cesams.twogetskills.inconcert.dao.CapsuleDao;import com.cesams.twogetskills.inconcert.dao.ProgressDao;import com.cesams.twogetskills.inconcert.entity.Capsule;import com.cesams.twogetskills.inconcert.entity.Progress;import com.cesams.twogetskills.inconcert.library.Http;import com.cesams.twogetskills.inconcert.library.ImageService;import com.cesams.twogetskills.inconcert.library.MD5;import com.cesams.twogetskills.inconcert.skeleton.IReloadData;import com.cesams.twogetskills.inconcert.skeleton.ITwoGetSkills;import com.google.android.material.tabs.TabLayout;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.HashMap;import java.util.Random;import java.util.TimeZone;import java.util.concurrent.TimeUnit;import okhttp3.Call;import okhttp3.FormBody;import okhttp3.Interceptor;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;public class CapsuleDetail extends Fragment implements CommentListViewAdapter.ClickListener {private ITwoGetSkills iTwoGetSkills; Capsule capsula; Progress progreso;TextView nombrecapsula, descripcion, puntuacion, comentarios, porcentaje,docomments;ImageView capsuleImage; ProgressBar mProgressbar; private DecimalFormat mDecimalFormat; CardView tarjeta;TabLayout tabscapsule; RecyclerView listadecomentarios; EditText comentar; Button comentarBoton, continuar; RatingBar ratinglevel;CommentListViewAdapter adapter; ArrayList<HashMap<String, String>> commentList;public CapsuleDetail() {// Required empty public constructor}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_capsule_detail, container, false);iTwoGetSkills = (ITwoGetSkills) getActivity();ratinglevel = view.findViewById(R.id.ratingBar); continuar= view.findViewById(R.id.continuarbutton); tarjeta= view.findViewById(R.id.cardView3);capsuleImage = view.findViewById(R.id.imageView4); mProgressbar= view.findViewById(R.id.progressBar3);nombrecapsula = view.findViewById(R.id.textView19); descripcion = view.findViewById(R.id.textView20);comentarios = view.findViewById(R.id.textView21); puntuacion = view.findViewById(R.id.textView22);porcentaje = view.findViewById(R.id.textView17); mDecimalFormat = new DecimalFormat("#.##");tabscapsule = view.findViewById(R.id.tabLayout2); listadecomentarios = view.findViewById(R.id.recyclerView);comentar = view.findViewById(R.id.editTextComentar); comentarBoton = view.findViewById(R.id.button4); docomments=view.findViewById(R.id.textView23);commentList = new ArrayList<>();adapter = new CommentListViewAdapter(getContext(),commentList);GridLayoutManager layoutcomments = new GridLayoutManager(getContext(),1,GridLayoutManager.VERTICAL, false);listadecomentarios.setLayoutManager(layoutcomments);listadecomentarios.setAdapter(adapter);adapter.setClickListener(this);loaddata();comentar.setOnFocusChangeListener((v, hasFocus) -> {if(hasFocus){tarjeta.setVisibility(View.GONE);}else{tarjeta.setVisibility(View.VISIBLE);iTwoGetSkills.hideKeyboard(v);}});continuar.setOnClickListener(v -> iTwoGetSkills.invokeFragment(Constants.IDX_FRAGMENT_SLIDES));tabscapsule.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Overridepublic void onTabSelected(TabLayout.Tab tab) {int position = tab.getPosition();if (position == 0) {descripcion.setVisibility(View.VISIBLE);descripcion.setText(Html.fromHtml(capsula.getDescription(), Html.FROM_HTML_MODE_COMPACT));listadecomentarios.setVisibility(View.GONE);comentar.setVisibility(View.GONE);comentarBoton.setVisibility(View.GONE); ratinglevel.setVisibility(View.VISIBLE);ratinglevel.setEnabled(false);docomments.setVisibility(View.GONE);} else if (position == 1) {descripcion.setVisibility(View.GONE);listadecomentarios.setVisibility(View.VISIBLE);comentar.setVisibility(View.GONE);ratinglevel.setVisibility(View.GONE);if(capsula.getTotalComments()==0){descripcion.setVisibility(View.VISIBLE);descripcion.setText(R.string.no_comments);}comentarBoton.setVisibility(View.GONE);docomments.setVisibility(View.GONE);loadComments();} else if (position == 2) {descripcion.setVisibility(View.GONE);listadecomentarios.setVisibility(View.GONE);comentar.setVisibility(View.VISIBLE);comentarBoton.setVisibility(View.VISIBLE); ratinglevel.setVisibility(View.VISIBLE);ratinglevel.setEnabled(true);docomments.setVisibility(View.VISIBLE);}}@Overridepublic void onTabUnselected(TabLayout.Tab tab) {}@Overridepublic void onTabReselected(TabLayout.Tab tab) {}});comentarBoton.setOnClickListener(v -> {if(progreso != null) {if(progreso.getProgress() >0){Toast.makeText(getActivity().getApplicationContext(), "Enviando tu comentario..", Toast.LENGTH_SHORT).show();String bodyComment = comentar.getText().toString();String rating = String.valueOf(ratinglevel.getRating());// Log.e("La added_on"," "+capsula.getAddedOn());//Enviamos el comentario de la capsulaaddComment(capsula.getUuid(),bodyComment,rating, capsula.getAddedOn());}}else{Toast.makeText(getActivity().getApplicationContext(), "Toma tiempo para ver esta cápsula antes de comentar", Toast.LENGTH_SHORT).show();}});return view;}private final Handler taskHandler = new android.os.Handler();private final Runnable repeatativeTaskRunnable = new Runnable() {public void run() {loadComments();Log.e("Ando","cargando comentarios");}};void startHandler() {taskHandler.postDelayed(repeatativeTaskRunnable, 5 * 1000);}void stopHandler() {taskHandler.removeCallbacks(repeatativeTaskRunnable);}public void loadComments(){commentList.clear();if(iTwoGetSkills.isConnectedInternet()) {try {TimeZone timeZone = TimeZone.getTimeZone("UTC");Calendar calendar = Calendar.getInstance(timeZone);int created = (int) (calendar.getTimeInMillis() / 1000);Random random = new Random(created);int rand = 1000 + random.nextInt(8999);String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);OkHttpClient client = http.getHttpClient(false);Request request = new Request.Builder().url(Configuration.URL_COMMENTS + capsula.getUuid()).build();Call call = client.newCall(request);call.enqueue(new okhttp3.Callback() {public void onResponse(Call call, Response response)throws IOException {Log.d("TAG", "Response : " + response.body().toString());processResponseSyncToServer(response.body().string());stopHandler();}public void onFailure(Call call, IOException e) {Log.d("Tag", "Error : " + e.getMessage());startHandler();}});} catch (Exception e) {Log.e("Exception load"," comentarios"+e);}}else{descripcion.setVisibility(View.VISIBLE);descripcion.setText("No tienes conexión en este momento");startHandler();}}public void addComment(String capsuleUuid, String bodycomment, String rating, String added_on){//Preparo el numerorating= rating.substring(0,1);if(iTwoGetSkills.isConnectedInternet()) {try {TimeZone timeZone = TimeZone.getTimeZone("UTC");Calendar calendar = Calendar.getInstance(timeZone);int created = (int) (calendar.getTimeInMillis() / 1000);Random random = new Random(created);int rand = 1000 + random.nextInt(8999);String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);OkHttpClient client = http.getHttpClient(false);RequestBody formBody = new FormBody.Builder().add("comment", bodycomment).add("rating", rating).add("added_on",added_on).build();Request request = new Request.Builder().url(Configuration.URL_COMMENTS + capsuleUuid + "/add").post(formBody).build();Call call = client.newCall(request);call.enqueue(new okhttp3.Callback() {public void onResponse(Call call, Response response)throws IOException {Log.d("TAG", "Response : " + response.body().toString());processResponseSyncToServer(response.body().string());}public void onFailure(Call call, IOException e) {Log.d("Tag", "Error : " + e.getMessage());}});} catch (Exception e) {}}else{Toast.makeText(getActivity().getApplicationContext(), "En este momento no tienes conexión para enviar el comentario", Toast.LENGTH_SHORT).show();}}private void processResponseSyncToServer(String dataString){boolean success = false;long sync_id = 0;JSONArray comentariosarray;try {JSONObject objJSON = new JSONObject(dataString);success = objJSON.has("success") ? objJSON.getBoolean("success") : false;if(success && objJSON.has("data")) {JSONObject jsonObjectData = objJSON.getJSONObject("data");Log.e("Respuesta server:", jsonObjectData.toString());if(jsonObjectData.has("message")){if(jsonObjectData.getString("message").equals("El comentario ha sido borrado con éxito")){requireActivity().runOnUiThread(() -> Toast.makeText(requireActivity().getApplicationContext(), "¡Comentario eliminado, cargando comentarios..!", Toast.LENGTH_SHORT).show());loadComments();}else {requireActivity().runOnUiThread(() -> Toast.makeText(requireActivity().getApplicationContext(), "¡Comentario enviado, cargando comentarios..!", Toast.LENGTH_SHORT).show());requireActivity().runOnUiThread(this::loaddata);requireActivity().runOnUiThread(() -> tabscapsule.selectTab(tabscapsule.getTabAt(1), true));requireActivity().runOnUiThread(() -> comentar.setText(""));}}if(jsonObjectData.has("comments")){//getActivity().runOnUiThread(() -> Toast.makeText(getActivity().getApplicationContext(), "Hay comentarios nuevos", Toast.LENGTH_SHORT).show());comentariosarray = jsonObjectData.getJSONArray("comments");Log.e("Comentarios",""+comentariosarray);for(int i = 0; i < comentariosarray.length(); i++){JSONObject objects = comentariosarray.getJSONObject(i);HashMap<String, String> m_li;m_li = new HashMap<>();m_li.put("user", objects.getString("fullname"));m_li.put("body", objects.getString("comment"));m_li.put("fecha", objects.getString("date"));m_li.put("rating", objects.getString("rating"));m_li.put("image", objects.getString("image"));m_li.put("urldelete", objects.getString("link_delete"));commentList.add(m_li);}Log.e("Lista de comentarios"," "+commentList.toString());getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {if(commentList.size() >0){adapter.notifyDataSetChanged();descripcion.setVisibility(View.GONE);}}});}JSONObject capsule_update= jsonObjectData.getJSONObject("capsule");CapsuleDao updatecapsule = iTwoGetSkills.getDatabase().getCapsuleDao();updatecapsule.updateByUuid(capsula.getUuid(),capsule_update.getString("total_comments"),capsule_update.getString("total_rating"));}else{Log.e("Ocurrio un problema",objJSON.toString());}} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onHiddenChanged(boolean hidden) {super.onHiddenChanged(hidden);if(!hidden) {requireActivity().runOnUiThread(() -> {loaddata();tabscapsule.selectTab(tabscapsule.getTabAt(0), true);});}}public void loaddata(){CapsuleDao capsuleDao = iTwoGetSkills.getDatabase().getCapsuleDao();ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();progreso = progressDao.selectByCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());capsula = capsuleDao.selectByUuid(iTwoGetSkills.getCapsuleUuidActive());nombrecapsula.setText(capsula.getName()); descripcion.setText(Html.fromHtml(capsula.getDescription(), Html.FROM_HTML_MODE_COMPACT));comentarios.setText("Comentarios: "+capsula.getTotalComments()); puntuacion.setText("Puntuación: "+capsula.getTotalRating());ratinglevel.setMax(5); ratinglevel.setRating(capsula.getTotalRating());ratinglevel.setEnabled(false);if(progreso != null) {mProgressbar.setMax(progreso.getTotalSlides());mProgressbar.setProgress(progreso.getViewSlides());porcentaje.setText(mDecimalFormat.format(progreso.getProgress()) + " %");}else{mProgressbar.setMax(100);mProgressbar.setProgress(0);porcentaje.setText("0%");}iTwoGetSkills.setTitleActionBar(capsula.getName());ImageService.retrieve(getContext(), capsula.getImage(), capsuleImage);}@Overridepublic void onResume() {super.onResume();loaddata();}@Overridepublic void onItemClick(int position, View v) {Log.e("On", "click");if (iTwoGetSkills.isConnectedInternet()) {AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());alertDialogBuilder.setMessage("¿Deseas eliminar este comentario?");alertDialogBuilder.setPositiveButton("Si, eliminarlo",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {String urldelete = commentList.get(position).get("urldelete");String user = commentList.get(position).get("user");if (user.equals(iTwoGetSkills.getPreference().getFirstName() + " " + iTwoGetSkills.getPreference().getLastName())) {try {TimeZone timeZone = TimeZone.getTimeZone("UTC");Calendar calendar = Calendar.getInstance(timeZone);int created = (int) (calendar.getTimeInMillis() / 1000);Random random = new Random(created);int rand = 1000 + random.nextInt(8999);String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);OkHttpClient client = http.getHttpClient(false);RequestBody formBody = new FormBody.Builder().add("", "").build();assert urldelete != null;Request request = new Request.Builder().url(urldelete).post(formBody).build();Call call = client.newCall(request);call.enqueue(new okhttp3.Callback() {public void onResponse(Call call, Response response)throws IOException {Log.d("TAG", "Response : " + response.body().toString());processResponseSyncToServer(response.body().string());}public void onFailure(Call call, IOException e) {Log.d("Tag", "Error : " + e.getMessage());}});} catch (Exception e) {}} else {Log.e("No es mi ", " comentario");}}});alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});AlertDialog alertDialog = alertDialogBuilder.create();alertDialog.show();alertDialog.getButton(alertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.design_default_color_error, null));alertDialog.getButton(alertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorTextColor, null));alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialogInterface) {}});}else{Toast.makeText(requireActivity().getApplicationContext(), "No tienes conexión en este momento para ver los detalles.", Toast.LENGTH_SHORT).show();}}}