Proyectos de Subversion Android Microlearning - Inconcert

Rev

Rev 15 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
14 gabriel 1
package com.cesams.twogetskills.inconcert.fragment;
2
 
3
import android.app.AlertDialog;
4
import android.content.DialogInterface;
5
import android.os.Bundle;
6
 
7
import androidx.cardview.widget.CardView;
8
import androidx.fragment.app.Fragment;
9
import androidx.recyclerview.widget.GridLayoutManager;
10
import androidx.recyclerview.widget.RecyclerView;
11
 
12
import android.os.Handler;
13
import android.text.Html;
14
import android.util.Log;
15
import android.view.LayoutInflater;
16
import android.view.View;
17
import android.view.ViewGroup;
18
import android.widget.Button;
19
import android.widget.EditText;
20
import android.widget.ImageView;
21
import android.widget.ProgressBar;
22
import android.widget.RatingBar;
23
import android.widget.TextView;
24
import android.widget.Toast;
25
 
26
import com.bumptech.glide.Glide;
27
import com.bumptech.glide.load.engine.DiskCacheStrategy;
28
import com.bumptech.glide.load.model.GlideUrl;
29
import com.bumptech.glide.load.model.LazyHeaders;
30
import com.bumptech.glide.request.RequestOptions;
31
import com.cesams.twogetskills.inconcert.Configuration;
32
import com.cesams.twogetskills.inconcert.Constants;
33
import com.cesams.twogetskills.inconcert.R;
34
import com.cesams.twogetskills.inconcert.activity.MainActivity;
35
import com.cesams.twogetskills.inconcert.adapter.CommentListViewAdapter;
36
import com.cesams.twogetskills.inconcert.dao.CapsuleDao;
37
import com.cesams.twogetskills.inconcert.dao.ProgressDao;
38
import com.cesams.twogetskills.inconcert.entity.Capsule;
39
import com.cesams.twogetskills.inconcert.entity.Progress;
40
import com.cesams.twogetskills.inconcert.library.Http;
41
import com.cesams.twogetskills.inconcert.library.MD5;
42
import com.cesams.twogetskills.inconcert.skeleton.IReloadData;
43
import com.cesams.twogetskills.inconcert.skeleton.ITwoGetSkills;
44
import com.google.android.material.tabs.TabLayout;
45
 
46
import org.json.JSONArray;
47
import org.json.JSONException;
48
import org.json.JSONObject;
49
 
50
import java.io.IOException;
51
import java.text.DecimalFormat;
52
import java.util.ArrayList;
53
import java.util.Calendar;
54
import java.util.HashMap;
55
import java.util.Random;
56
import java.util.TimeZone;
57
import java.util.concurrent.TimeUnit;
58
 
59
import okhttp3.Call;
60
import okhttp3.FormBody;
61
import okhttp3.Interceptor;
62
import okhttp3.OkHttpClient;
63
import okhttp3.Request;
64
import okhttp3.RequestBody;
65
import okhttp3.Response;
66
 
67
 
68
public class CapsuleDetail extends Fragment implements CommentListViewAdapter.ClickListener {
69
 
70
    private ITwoGetSkills iTwoGetSkills;  Capsule capsula;  Progress progreso;
71
    TextView nombrecapsula, descripcion, puntuacion, comentarios, porcentaje,docomments;
72
    ImageView capsuleImage; ProgressBar mProgressbar;     private DecimalFormat mDecimalFormat; CardView tarjeta;
73
    TabLayout tabscapsule; RecyclerView listadecomentarios; EditText comentar; Button comentarBoton, continuar; RatingBar ratinglevel;
74
    CommentListViewAdapter adapter;     ArrayList<HashMap<String, String>> commentList;
75
 
76
 
77
    public CapsuleDetail() {
78
        // Required empty public constructor
79
    }
80
 
81
    @Override
82
    public void onCreate(Bundle savedInstanceState) {
83
        super.onCreate(savedInstanceState);
84
    }
85
 
86
    @Override
87
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
88
                             Bundle savedInstanceState) {
89
        View view = inflater.inflate(R.layout.fragment_capsule_detail, container, false);
90
 
91
        iTwoGetSkills = (ITwoGetSkills) getActivity();
92
        ratinglevel = view.findViewById(R.id.ratingBar); continuar= view.findViewById(R.id.continuarbutton); tarjeta= view.findViewById(R.id.cardView3);
93
        capsuleImage = view.findViewById(R.id.imageView4); mProgressbar= view.findViewById(R.id.progressBar3);
94
        nombrecapsula = view.findViewById(R.id.textView19); descripcion = view.findViewById(R.id.textView20);
95
        comentarios = view.findViewById(R.id.textView21); puntuacion = view.findViewById(R.id.textView22);
96
        porcentaje = view.findViewById(R.id.textView17); mDecimalFormat = new DecimalFormat("#.##");
97
        tabscapsule = view.findViewById(R.id.tabLayout2); listadecomentarios = view.findViewById(R.id.recyclerView);
98
        comentar = view.findViewById(R.id.editTextComentar); comentarBoton = view.findViewById(R.id.button4); docomments=view.findViewById(R.id.textView23);
99
 
100
        commentList = new ArrayList<>();
101
        adapter = new CommentListViewAdapter(getContext(),commentList);
102
 
103
        GridLayoutManager layoutcomments = new GridLayoutManager(getContext(),1,GridLayoutManager.VERTICAL, false);
104
        listadecomentarios.setLayoutManager(layoutcomments);
105
        listadecomentarios.setAdapter(adapter);
106
 
107
        adapter.setClickListener(this);
108
 
109
        loaddata();
110
 
111
 
112
        comentar.setOnFocusChangeListener((v, hasFocus) -> {
113
 
114
            if(hasFocus){
115
 
116
                tarjeta.setVisibility(View.GONE);
117
            }
118
            else
119
            {
120
                tarjeta.setVisibility(View.VISIBLE);
121
                iTwoGetSkills.hideKeyboard(v);
122
            }
123
        });
124
 
125
        continuar.setOnClickListener(v -> iTwoGetSkills.invokeFragment(Constants.IDX_FRAGMENT_SLIDES));
126
 
127
        tabscapsule.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
128
            @Override
129
            public void onTabSelected(TabLayout.Tab tab) {
130
                int position = tab.getPosition();
131
 
132
                if (position == 0) {
133
                    descripcion.setVisibility(View.VISIBLE);
134
                    descripcion.setText(Html.fromHtml(capsula.getDescription(), Html.FROM_HTML_MODE_COMPACT));
135
                    listadecomentarios.setVisibility(View.GONE);
136
                    comentar.setVisibility(View.GONE);
137
                    comentarBoton.setVisibility(View.GONE);  ratinglevel.setVisibility(View.VISIBLE);
138
                    ratinglevel.setEnabled(false);
139
                    docomments.setVisibility(View.GONE);
140
 
141
 
142
                } else if (position == 1) {
143
                    descripcion.setVisibility(View.GONE);
144
                    listadecomentarios.setVisibility(View.VISIBLE);
145
                    comentar.setVisibility(View.GONE);
146
                    ratinglevel.setVisibility(View.GONE);
147
                    if(capsula.getTotal_comments()==0)
148
                    {
149
                        descripcion.setVisibility(View.VISIBLE);
150
                        descripcion.setText(R.string.no_comments);
151
                    }
152
 
153
                    comentarBoton.setVisibility(View.GONE);
154
                    docomments.setVisibility(View.GONE);
155
 
156
                    loadComments();
157
 
158
                } else if (position == 2) {
159
                    descripcion.setVisibility(View.GONE);
160
                    listadecomentarios.setVisibility(View.GONE);
161
                    comentar.setVisibility(View.VISIBLE);
162
                    comentarBoton.setVisibility(View.VISIBLE); ratinglevel.setVisibility(View.VISIBLE);
163
                    ratinglevel.setEnabled(true);
164
                    docomments.setVisibility(View.VISIBLE);
165
 
166
                }
167
            }
168
 
169
            @Override
170
            public void onTabUnselected(TabLayout.Tab tab) {
171
 
172
            }
173
 
174
            @Override
175
            public void onTabReselected(TabLayout.Tab tab) {
176
 
177
            }
178
        });
179
 
180
        comentarBoton.setOnClickListener(v -> {
181
 
182
            if(progreso != null) {
183
            if(progreso.getProgress() >0)
184
            {
185
                Toast.makeText(getActivity().getApplicationContext(), "Enviando tu comentario..", Toast.LENGTH_SHORT).show();
186
 
187
                String bodyComment = comentar.getText().toString();
188
                String rating = String.valueOf(ratinglevel.getRating());
189
 
190
               // Log.e("La added_on"," "+capsula.getAddedOn());
191
                //Enviamos el comentario de la capsula
192
                addComment(capsula.getUuid(),
193
                        bodyComment,rating, capsula.getAddedOn());
194
            }
195
 
196
            }
197
            else{
198
                Toast.makeText(getActivity().getApplicationContext(), "Toma tiempo para ver esta cápsula antes de comentar", Toast.LENGTH_SHORT).show();
199
            }
200
        });
201
 
202
        return view;
203
}
204
 
205
    private final Handler taskHandler = new android.os.Handler();
206
 
207
    private final Runnable repeatativeTaskRunnable = new Runnable() {
208
        public void run() {
209
                    loadComments();
210
                    Log.e("Ando","cargando comentarios");
211
        }
212
    };
213
 
214
    void startHandler() {
215
        taskHandler.postDelayed(repeatativeTaskRunnable, 5 * 1000);
216
    }
217
 
218
    void stopHandler() {
219
        taskHandler.removeCallbacks(repeatativeTaskRunnable);
220
    }
221
 
222
    public void loadComments(){
223
 
224
        commentList.clear();
225
 
226
        if(iTwoGetSkills.isConnectedInternet()) {
227
            try {
228
                TimeZone timeZone = TimeZone.getTimeZone("UTC");
229
                Calendar calendar = Calendar.getInstance(timeZone);
230
                int created = (int) (calendar.getTimeInMillis() / 1000);
231
 
232
                Random random = new Random(created);
233
                int rand = 1000 + random.nextInt(8999);
234
 
235
                String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);
236
 
237
                Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
238
                OkHttpClient client = http.getHttpClient(false);
239
 
240
                Request request = new Request.Builder()
241
                        .url(Configuration.URL_COMMENTS + capsula.getUuid())
242
                        .build();
243
 
244
 
245
                Call call = client.newCall(request);
246
                call.enqueue(new okhttp3.Callback() {
247
                    public void onResponse(Call call, Response response)
248
                            throws IOException {
249
                        Log.d("TAG", "Response :  " + response.body().toString());
250
 
251
                        processResponseSyncToServer(response.body().string());
252
                        stopHandler();
253
                    }
254
 
255
                    public void onFailure(Call call, IOException e) {
256
                        Log.d("Tag", "Error :  " + e.getMessage());
257
                        startHandler();
258
                    }
259
                });
260
            } catch (Exception e) {
261
                Log.e("Exception load"," comentarios"+e);
262
            }
263
        }
264
        else
265
        {
266
            descripcion.setVisibility(View.VISIBLE);
267
            descripcion.setText("No tienes conexión en este momento");
268
            startHandler();
269
        }
270
 
271
 
272
    }
273
 
274
 
275
    public void addComment(String capsuleUuid, String bodycomment, String rating, String added_on)
276
    {
277
        //Preparo el numero
278
        rating= rating.substring(0,1);
279
 
280
        if(iTwoGetSkills.isConnectedInternet()) {
281
            try {
282
                TimeZone timeZone = TimeZone.getTimeZone("UTC");
283
                Calendar calendar = Calendar.getInstance(timeZone);
284
                int created = (int) (calendar.getTimeInMillis() / 1000);
285
 
286
                Random random = new Random(created);
287
                int rand = 1000 + random.nextInt(8999);
288
 
289
                String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);
290
 
291
                Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
292
                OkHttpClient client = http.getHttpClient(false);
293
 
294
                RequestBody formBody = new FormBody.Builder()
295
                        .add("comment", bodycomment)
296
                        .add("rating", rating)
297
                        .add("added_on",added_on)
298
                        .build();
299
 
300
                Request request = new Request.Builder()
301
                        .url(Configuration.URL_COMMENTS + capsuleUuid + "/add")
302
                        .post(formBody)
303
                        .build();
304
 
305
 
306
                Call call = client.newCall(request);
307
                call.enqueue(new okhttp3.Callback() {
308
                    public void onResponse(Call call, Response response)
309
                            throws IOException {
310
                        Log.d("TAG", "Response :  " + response.body().toString());
311
 
312
                        processResponseSyncToServer(response.body().string());
313
                    }
314
 
315
                    public void onFailure(Call call, IOException e) {
316
                        Log.d("Tag", "Error :  " + e.getMessage());
317
 
318
                    }
319
                });
320
            } catch (Exception e) {
321
            }
322
        }else
323
        {
324
            Toast.makeText(getActivity().getApplicationContext(), "En este momento no tienes conexión para enviar el comentario", Toast.LENGTH_SHORT).show();
325
        }
326
    }
327
 
328
 
329
    private void processResponseSyncToServer(String dataString)
330
    {
331
        boolean success = false;
332
        long sync_id = 0;
333
        JSONArray comentariosarray;
334
 
335
        try {
336
            JSONObject objJSON = new JSONObject(dataString);
337
            success = objJSON.has("success") ? objJSON.getBoolean("success")  : false;
338
            if(success  && objJSON.has("data")) {
339
                JSONObject jsonObjectData = objJSON.getJSONObject("data");
340
 
341
                Log.e("Respuesta server:", jsonObjectData.toString());
342
 
343
 
344
                if(jsonObjectData.has("message"))
345
                {
346
 
347
                    if(jsonObjectData.getString("message").equals("El comentario ha sido borrado con éxito"))
348
                    {
349
                        requireActivity().runOnUiThread(() -> Toast.makeText(requireActivity().getApplicationContext(), "¡Comentario eliminado, cargando comentarios..!", Toast.LENGTH_SHORT).show());
350
                        loadComments();
351
                    }
352
                    else {
353
                        requireActivity().runOnUiThread(() -> Toast.makeText(requireActivity().getApplicationContext(), "¡Comentario enviado, cargando comentarios..!", Toast.LENGTH_SHORT).show());
354
                        requireActivity().runOnUiThread(this::loaddata);
355
                        requireActivity().runOnUiThread(() -> tabscapsule.selectTab(tabscapsule.getTabAt(1), true));
356
                        requireActivity().runOnUiThread(() -> comentar.setText(""));
357
 
358
                    }
359
                }
360
 
361
                if(jsonObjectData.has("comments"))
362
                {
363
                    //getActivity().runOnUiThread(() -> Toast.makeText(getActivity().getApplicationContext(), "Hay comentarios nuevos", Toast.LENGTH_SHORT).show());
364
 
365
 
366
                    comentariosarray = jsonObjectData.getJSONArray("comments");
367
                    Log.e("Comentarios",""+comentariosarray);
368
 
369
                    for(int i = 0; i < comentariosarray.length(); i++)
370
                    {
371
                        JSONObject objects = comentariosarray.getJSONObject(i);
372
                        HashMap<String, String> m_li;
373
                        m_li = new HashMap<>();
374
                        m_li.put("user", objects.getString("fullname"));
375
                        m_li.put("body", objects.getString("comment"));
376
                        m_li.put("fecha", objects.getString("date"));
377
                        m_li.put("rating", objects.getString("rating"));
378
                        m_li.put("image", objects.getString("image"));
379
                        m_li.put("urldelete", objects.getString("link_delete"));
380
 
381
                        commentList.add(m_li);
382
 
383
 
384
                    }
385
 
386
                    Log.e("Lista de comentarios"," "+commentList.toString());
387
                  getActivity().runOnUiThread(new Runnable() {
388
                      @Override
389
                      public void run() {
390
                          adapter.notifyDataSetChanged();
391
                          descripcion.setVisibility(View.GONE);
392
                      }
393
                  });
394
 
395
                }
396
 
397
 
398
                JSONObject capsule_update= jsonObjectData.getJSONObject("capsule");
399
 
400
                CapsuleDao updatecapsule = iTwoGetSkills.getDatabase().getCapsuleDao();
401
                updatecapsule.updateByUuid(capsula.getUuid(),capsule_update.getString("total_comments"),capsule_update.getString("total_rating"));
402
 
403
 
404
            }
405
            else
406
            {
407
                Log.e("Ocurrio un problema",objJSON.toString());
408
            }
409
 
410
        } catch (JSONException e) {
411
            e.printStackTrace();
412
        }
413
    }
414
 
415
    @Override
416
    public void onHiddenChanged(boolean hidden) {
417
        super.onHiddenChanged(hidden);
418
 
419
        if(!hidden) {
420
 
421
            requireActivity().runOnUiThread(() -> {
422
 
423
                loaddata();
424
                tabscapsule.selectTab(tabscapsule.getTabAt(0), true);
425
 
426
 
427
            });
428
 
429
 
430
        }
431
    }
432
 
433
    public void loaddata(){
434
 
435
    CapsuleDao capsuleDao = iTwoGetSkills.getDatabase().getCapsuleDao();
436
    ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();
437
 
438
    progreso = progressDao.selectByCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());
439
 
440
 
441
    capsula = capsuleDao.selectByUuid(iTwoGetSkills.getCapsuleUuidActive());
442
 
443
 
444
    nombrecapsula.setText(capsula.getName()); descripcion.setText(Html.fromHtml(capsula.getDescription(), Html.FROM_HTML_MODE_COMPACT));
445
    comentarios.setText("Comentarios: "+capsula.getTotal_comments()); puntuacion.setText("Puntuación: "+capsula.getTotal_rating());
446
    ratinglevel.setMax(5); ratinglevel.setRating(capsula.getTotal_rating());
447
    ratinglevel.setEnabled(false);
448
    if(progreso != null) {
449
        mProgressbar.setMax(progreso.getTotalSlides());
450
        mProgressbar.setProgress(progreso.getViewSlides());
451
        porcentaje.setText(mDecimalFormat.format(progreso.getProgress()) + " %");
452
    }
453
    else
454
    {
455
        mProgressbar.setMax(100);
456
        mProgressbar.setProgress(0);
457
        porcentaje.setText("0%");
458
    }
459
    iTwoGetSkills.setTitleActionBar(capsula.getName());
460
 
461
    TimeZone timeZone = TimeZone.getTimeZone("UTC");
462
    Calendar calendar = Calendar.getInstance(timeZone);
463
    TimeZone tz = calendar.getTimeZone();
464
    int created =  (int) (calendar.getTimeInMillis() / 1000);
465
 
466
    Random random = new Random(created);
467
    int rand = 1000 + random.nextInt(8999);
468
 
469
 
470
    String deviceUuid = iTwoGetSkills.getPreference().getDeviceUuid();
471
    String password =  iTwoGetSkills.getPreference().getPassword();
472
 
473
 
474
    String secret = MD5.generar(password + ':' +  created + ':' + rand);
475
 
476
    GlideUrl url = new GlideUrl(capsula.getImage(), new LazyHeaders.Builder()
477
            .addHeader(Constants.HTTP_HEADER_ACCEPT, Constants.HTTP_HEADER_ACCEPT_VALUE)
478
            .addHeader(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceUuid)
479
            .addHeader(Constants.HTTP_HEADER_SECURITY_SECRET, secret)
480
            .addHeader(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created))
481
            .addHeader(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand))
482
            .build());
483
 
484
    RequestOptions options = new RequestOptions()
485
            .diskCacheStrategy(DiskCacheStrategy.ALL);
486
 
487
    Glide.with(getContext()).load(url)
488
            .thumbnail()
489
            .apply(options)
490
            .into(capsuleImage);
491
 
492
}
493
 
494
    @Override
495
    public void onResume() {
496
        super.onResume();
497
        loaddata();
498
    }
499
 
500
    @Override
501
    public void onItemClick(int position, View v) {
502
 
503
        Log.e("On", "click");
504
        if (iTwoGetSkills.isConnectedInternet()) {
505
 
506
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
507
            alertDialogBuilder.setMessage("¿Deseas eliminar este comentario?");
508
            alertDialogBuilder.setPositiveButton("Si, eliminarlo",
509
                    new DialogInterface.OnClickListener() {
510
                        @Override
511
                        public void onClick(DialogInterface arg0, int arg1) {
512
 
513
                            String urldelete = commentList.get(position).get("urldelete");
514
                            String user = commentList.get(position).get("user");
515
 
516
                            if (user.equals(iTwoGetSkills.getPreference().getFirstName() + " " + iTwoGetSkills.getPreference().getLastName())) {
517
                                try {
518
                                    TimeZone timeZone = TimeZone.getTimeZone("UTC");
519
                                    Calendar calendar = Calendar.getInstance(timeZone);
520
                                    int created = (int) (calendar.getTimeInMillis() / 1000);
521
 
522
                                    Random random = new Random(created);
523
                                    int rand = 1000 + random.nextInt(8999);
524
 
525
                                    String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);
526
 
527
                                    Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
528
                                    OkHttpClient client = http.getHttpClient(false);
529
 
530
 
531
                                    RequestBody formBody = new FormBody.Builder()
532
                                            .add("", "")
533
                                            .build();
534
                                    assert urldelete != null;
535
                                    Request request = new Request.Builder()
536
                                            .url(urldelete).post(formBody)
537
                                            .build();
538
 
539
 
540
                                    Call call = client.newCall(request);
541
                                    call.enqueue(new okhttp3.Callback() {
542
                                        public void onResponse(Call call, Response response)
543
                                                throws IOException {
544
                                            Log.d("TAG", "Response :  " + response.body().toString());
545
 
546
                                            processResponseSyncToServer(response.body().string());
547
                                        }
548
 
549
                                        public void onFailure(Call call, IOException e) {
550
                                            Log.d("Tag", "Error :  " + e.getMessage());
551
                                        }
552
                                    });
553
                                } catch (Exception e) {
554
                                }
555
                            } else {
556
                                Log.e("No es mi ", " comentario");
557
                            }
558
 
559
 
560
                        }
561
                    });
562
 
563
 
564
            alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
565
                @Override
566
                public void onClick(DialogInterface dialog, int which) {
567
 
568
                }
569
            });
570
            AlertDialog alertDialog = alertDialogBuilder.create();
571
            alertDialog.show();
572
            alertDialog.getButton(alertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.design_default_color_error, null));
573
            alertDialog.getButton(alertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorTextColor, null));
574
 
575
            alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
576
                @Override
577
                public void onDismiss(DialogInterface dialogInterface) {
578
 
579
 
580
                }
581
            });
582
 
583
        }
584
        else
585
        {
586
            Toast.makeText(requireActivity().getApplicationContext(), "No tienes conexión en este momento para ver los detalles.", Toast.LENGTH_SHORT).show();
587
        }
588
    }
589
}