Rev 14 | Ir a la última revisión | 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.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.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.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
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public 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() {
@Override
public 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.getTotal_comments()==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);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public 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 capsula
addComment(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 numero
rating= 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() {
@Override
public 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();
}
}
@Override
public 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.getTotal_comments()); puntuacion.setText("Puntuación: "+capsula.getTotal_rating());
ratinglevel.setMax(5); ratinglevel.setRating(capsula.getTotal_rating());
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());
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(capsula.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(capsuleImage);
}
@Override
public void onResume() {
super.onResume();
loaddata();
}
@Override
public 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() {
@Override
public 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() {
@Override
public 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() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
}
});
}
else
{
Toast.makeText(requireActivity().getApplicationContext(), "No tienes conexión en este momento para ver los detalles.", Toast.LENGTH_SHORT).show();
}
}
}