Proyectos de Subversion Android Microlearning - Nuevo Interface

Rev

Rev 59 | Ir a la última revisión | | 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
 
67
    private ITwoGetSkills iTwoGetSkills;  Capsule capsula;
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
            Toast.makeText(getActivity().getApplicationContext(), "Enviando tu comentario..", Toast.LENGTH_SHORT).show();
178
 
179
            String bodyComment = comentar.getText().toString();
180
            String rating = String.valueOf(ratinglevel.getRating());
181
 
182
            //Enviamos el comentario de la capsula
183
            addComment(capsula.getUuid(),
184
                    bodyComment,rating);
185
 
186
 
187
        });
188
 
189
        return view;
190
}
191
 
192
    public void loadComments(){
193
 
194
        commentList.clear();
195
 
196
        try {
197
            TimeZone timeZone = TimeZone.getTimeZone("UTC");
198
            Calendar calendar = Calendar.getInstance(timeZone);
199
            int created =  (int) (calendar.getTimeInMillis() / 1000);
200
 
201
            Random random = new Random(created);
202
            int rand = 1000 + random.nextInt(8999);
203
 
204
            String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' +  created + ':' + rand);
205
 
206
            Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
207
            OkHttpClient client = http.getHttpClient(false);
208
 
209
            Request request = new Request.Builder()
210
                    .url(Configuration.URL_COMMENTS+capsula.getUuid())
211
                    .build();
212
 
213
 
214
            Call call = client.newCall(request);
215
            call.enqueue(new okhttp3.Callback() {
216
                public void onResponse(Call call, Response response)
217
                        throws IOException {
218
                    Log.d("TAG", "Response :  " +  response.body().toString());
219
 
220
                    processResponseSyncToServer(response.body().string());
221
                }
222
 
223
                public void onFailure(Call call, IOException e) {
224
                    Log.d("Tag", "Error :  " +  e.getMessage());
225
                }
226
            });
227
        } catch (Exception e) {
228
        }
229
 
230
 
231
 
232
    }
233
 
234
 
235
    public void addComment(String capsuleUuid, String bodycomment, String rating)
236
    {
237
        //Preparo el numero
238
        rating= rating.substring(0,1);
239
 
240
        try {
241
            TimeZone timeZone = TimeZone.getTimeZone("UTC");
242
            Calendar calendar = Calendar.getInstance(timeZone);
243
            int created =  (int) (calendar.getTimeInMillis() / 1000);
244
 
245
            Random random = new Random(created);
246
            int rand = 1000 + random.nextInt(8999);
247
 
248
            String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' +  created + ':' + rand);
249
 
250
            Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
251
            OkHttpClient client = http.getHttpClient(false);
252
 
253
            RequestBody formBody = new FormBody.Builder()
254
                    .add("comment",  bodycomment)
255
                    .add("rating", rating)
256
                    .build();
257
 
258
            Request request = new Request.Builder()
259
                    .url(Configuration.URL_COMMENTS+capsuleUuid+"/add")
260
                    .post(formBody)
261
                    .build();
262
 
263
 
264
            Call call = client.newCall(request);
265
            call.enqueue(new okhttp3.Callback() {
266
                public void onResponse(Call call, Response response)
267
                        throws IOException {
268
                    Log.d("TAG", "Response :  " +  response.body().toString());
269
 
270
                    processResponseSyncToServer(response.body().string());
271
                }
272
 
273
                public void onFailure(Call call, IOException e) {
274
                    Log.d("Tag", "Error :  " +  e.getMessage());
275
                }
276
            });
277
        } catch (Exception e) {
278
        }
279
    }
280
 
281
 
282
    private void processResponseSyncToServer(String dataString)
283
    {
284
        boolean success = false;
285
        long sync_id = 0;
286
        JSONArray comentariosarray;
287
 
288
        try {
289
            JSONObject objJSON = new JSONObject(dataString);
290
            success = objJSON.has("success") ? objJSON.getBoolean("success")  : false;
291
            if(success  && objJSON.has("data")) {
292
                JSONObject jsonObjectData = objJSON.getJSONObject("data");
293
 
294
               // Log.e("Respuesta server:", jsonObjectData.toString());
295
 
296
 
297
                if(jsonObjectData.has("message"))
298
                {
299
 
300
                    if(jsonObjectData.getString("message").equals("El comentario ha sido borrado con exito"))
301
                    {
302
                        getActivity().runOnUiThread(() -> Toast.makeText(getActivity().getApplicationContext(), "¡Comentario eliminado, cargando comentarios..!", Toast.LENGTH_SHORT).show());
303
                        loadComments();
304
                    }
305
                    else {
306
                        getActivity().runOnUiThread(() -> Toast.makeText(getActivity().getApplicationContext(), "¡Comentario enviado, cargando comentarios..!", Toast.LENGTH_SHORT).show());
307
                        getActivity().runOnUiThread(() -> tabscapsule.selectTab(tabscapsule.getTabAt(1), true));
308
                    }
309
                }
310
 
311
                if(jsonObjectData.has("comments"))
312
                {
313
                    //getActivity().runOnUiThread(() -> Toast.makeText(getActivity().getApplicationContext(), "Hay comentarios nuevos", Toast.LENGTH_SHORT).show());
314
 
315
 
316
                    comentariosarray = jsonObjectData.getJSONArray("comments");
317
                    Log.e("Comentarios",""+comentariosarray);
318
 
319
                    for(int i = 0; i < comentariosarray.length(); i++)
320
                    {
321
                        JSONObject objects = comentariosarray.getJSONObject(i);
322
                        HashMap<String, String> m_li;
323
                        m_li = new HashMap<>();
324
                        m_li.put("user", objects.getString("fullname"));
325
                        m_li.put("body", objects.getString("comment"));
326
                        m_li.put("fecha", objects.getString("date"));
327
                        m_li.put("rating", objects.getString("rating"));
328
                        m_li.put("image", objects.getString("image"));
329
                        m_li.put("urldelete", objects.getString("link_delete"));
330
 
331
                        commentList.add(m_li);
332
 
333
 
334
                    }
335
 
336
                    Log.e("Lista de comentarios"," "+commentList.toString());
337
                  getActivity().runOnUiThread(new Runnable() {
338
                      @Override
339
                      public void run() {
340
                          adapter.notifyDataSetChanged();
341
 
342
                      }
343
                  });
344
 
345
                }
346
 
347
 
348
                JSONObject capsule_update= jsonObjectData.getJSONObject("capsule");
349
 
350
                CapsuleDao updatecapsule = iTwoGetSkills.getDatabase().getCapsuleDao();
351
                updatecapsule.updateByUuid(capsula.getUuid(),capsule_update.getString("total_comments"),capsule_update.getString("total_rating"));
352
 
353
 
354
            }
355
            else
356
            {
357
                Log.e("Ocurrio un problema",objJSON.toString());
358
            }
359
 
360
        } catch (JSONException e) {
361
            e.printStackTrace();
362
        }
363
    }
364
 
365
    @Override
366
    public void onHiddenChanged(boolean hidden) {
367
        super.onHiddenChanged(hidden);
368
 
369
        if(!hidden) {
370
 
371
            getActivity().runOnUiThread(() -> {
372
 
373
                loaddata();
374
 
375
 
376
            });
377
 
378
 
379
        }
380
    }
381
 
382
    public void loaddata(){
383
 
384
    CapsuleDao capsuleDao = iTwoGetSkills.getDatabase().getCapsuleDao();
385
    ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();
386
 
387
    Progress progreso = progressDao.selectByCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());
388
 
389
 
390
    capsula = capsuleDao.selectByUuid(iTwoGetSkills.getCapsuleUuidActive());
391
 
392
    nombrecapsula.setText(capsula.getName()); descripcion.setText(Html.fromHtml(capsula.getDescription(), Html.FROM_HTML_MODE_COMPACT));
393
    comentarios.setText("Comentarios: "+capsula.getTotal_comments()); puntuacion.setText("Puntuación: "+capsula.getTotal_rating());
394
    ratinglevel.setMax(5); ratinglevel.setRating(capsula.getTotal_rating());
395
    ratinglevel.setEnabled(false);
396
    mProgressbar.setMax(progreso.getTotalSlides()); mProgressbar.setProgress(progreso.getViewSlides()); porcentaje.setText(mDecimalFormat.format(progreso.getProgress()) + " %");
397
 
398
    iTwoGetSkills.setTitleActionBar(capsula.getName());
399
 
400
    TimeZone timeZone = TimeZone.getTimeZone("UTC");
401
    Calendar calendar = Calendar.getInstance(timeZone);
402
    TimeZone tz = calendar.getTimeZone();
403
    int created =  (int) (calendar.getTimeInMillis() / 1000);
404
 
405
    Random random = new Random(created);
406
    int rand = 1000 + random.nextInt(8999);
407
 
408
 
409
    String deviceUuid = iTwoGetSkills.getPreference().getDeviceUuid();
410
    String password =  iTwoGetSkills.getPreference().getPassword();
411
 
412
 
413
    String secret = MD5.generar(password + ':' +  created + ':' + rand);
414
 
415
    GlideUrl url = new GlideUrl(capsula.getImage(), new LazyHeaders.Builder()
416
            .addHeader(Constants.HTTP_HEADER_ACCEPT, Constants.HTTP_HEADER_ACCEPT_VALUE)
417
            .addHeader(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceUuid)
418
            .addHeader(Constants.HTTP_HEADER_SECURITY_SECRET, secret)
419
            .addHeader(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created))
420
            .addHeader(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand))
421
            .build());
422
 
423
    RequestOptions options = new RequestOptions()
424
            .diskCacheStrategy(DiskCacheStrategy.ALL);
425
 
426
    Glide.with(getContext()).load(url)
427
            .thumbnail()
428
            .apply(options)
429
            .into(capsuleImage);
430
 
431
}
432
 
433
    @Override
434
    public void onResume() {
435
        super.onResume();
436
        loaddata();
437
    }
438
 
439
    @Override
440
    public void onItemClick(int position, View v) {
441
 
442
        Log.e("On","click");
443
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
444
        alertDialogBuilder.setMessage("¿Deseas eliminar este comentario?");
445
        alertDialogBuilder.setPositiveButton("Si, eliminarlo",
446
                new DialogInterface.OnClickListener() {
447
                    @Override
448
                    public void onClick(DialogInterface arg0, int arg1) {
449
 
450
                       String urldelete= commentList.get(position).get("urldelete");
451
 
452
                        try {
453
                            TimeZone timeZone = TimeZone.getTimeZone("UTC");
454
                            Calendar calendar = Calendar.getInstance(timeZone);
455
                            int created =  (int) (calendar.getTimeInMillis() / 1000);
456
 
457
                            Random random = new Random(created);
458
                            int rand = 1000 + random.nextInt(8999);
459
 
460
                            String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' +  created + ':' + rand);
461
 
462
                            Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
463
                            OkHttpClient client = http.getHttpClient(false);
464
 
465
                            RequestBody formBody = new FormBody.Builder()
466
                                    .add("",  "")
467
                                    .build();
468
                            assert urldelete != null;
469
                            Request request = new Request.Builder()
470
                                    .url(urldelete).post(formBody)
471
                                    .build();
472
 
473
 
474
                            Call call = client.newCall(request);
475
                            call.enqueue(new okhttp3.Callback() {
476
                                public void onResponse(Call call, Response response)
477
                                        throws IOException {
478
                                    Log.d("TAG", "Response :  " +  response.body().toString());
479
 
480
                                    processResponseSyncToServer(response.body().string());
481
                                }
482
 
483
                                public void onFailure(Call call, IOException e) {
484
                                    Log.d("Tag", "Error :  " +  e.getMessage());
485
                                }
486
                            });
487
                        } catch (Exception e) {
488
                        }
489
                    }
490
                });
491
 
492
 
493
        alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
494
            @Override
495
            public void onClick(DialogInterface dialog, int which) {
496
 
497
            }
498
        });
499
        AlertDialog alertDialog = alertDialogBuilder.create();
500
        alertDialog.show();
501
        alertDialog.getButton(alertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.design_default_color_error, null));
502
        alertDialog.getButton(alertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorTextColor, null));
503
 
504
        alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
505
            @Override
506
            public void onDismiss(DialogInterface dialogInterface) {
507
 
508
 
509
 
510
            }
511
        });
512
 
513
    }
514
}