Proyectos de Subversion Android Microlearning - Nuevo Interface

Rev

Rev 58 | Rev 60 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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