Proyectos de Subversion Android Microlearning - Nuevo Interface

Rev

Rev 71 | | 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
 
63 gabriel 12
import android.os.Handler;
58 gabriel 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.cesams.twogetskills.Configuration;
27
import com.cesams.twogetskills.Constants;
28
import com.cesams.twogetskills.R;
29
import com.cesams.twogetskills.activity.MainActivity;
30
import com.cesams.twogetskills.adapter.CommentListViewAdapter;
31
import com.cesams.twogetskills.dao.CapsuleDao;
32
import com.cesams.twogetskills.dao.ProgressDao;
33
import com.cesams.twogetskills.entity.Capsule;
34
import com.cesams.twogetskills.entity.Progress;
35
import com.cesams.twogetskills.library.Http;
71 efrain 36
import com.cesams.twogetskills.library.ImageService;
58 gabriel 37
import com.cesams.twogetskills.library.MD5;
38
import com.cesams.twogetskills.skeleton.IReloadData;
39
import com.cesams.twogetskills.skeleton.ITwoGetSkills;
40
import com.google.android.material.tabs.TabLayout;
41
 
42
import org.json.JSONArray;
43
import org.json.JSONException;
44
import org.json.JSONObject;
45
 
46
import java.io.IOException;
47
import java.text.DecimalFormat;
48
import java.util.ArrayList;
49
import java.util.Calendar;
50
import java.util.HashMap;
51
import java.util.Random;
52
import java.util.TimeZone;
63 gabriel 53
import java.util.concurrent.TimeUnit;
58 gabriel 54
 
55
import okhttp3.Call;
56
import okhttp3.FormBody;
63 gabriel 57
import okhttp3.Interceptor;
58 gabriel 58
import okhttp3.OkHttpClient;
59
import okhttp3.Request;
60
import okhttp3.RequestBody;
61
import okhttp3.Response;
62
 
63
 
64
public class CapsuleDetail extends Fragment implements CommentListViewAdapter.ClickListener {
65
 
59 gabriel 66
    private ITwoGetSkills iTwoGetSkills;  Capsule capsula;  Progress progreso;
58 gabriel 67
    TextView nombrecapsula, descripcion, puntuacion, comentarios, porcentaje,docomments;
68
    ImageView capsuleImage; ProgressBar mProgressbar;     private DecimalFormat mDecimalFormat; CardView tarjeta;
69
    TabLayout tabscapsule; RecyclerView listadecomentarios; EditText comentar; Button comentarBoton, continuar; RatingBar ratinglevel;
70
    CommentListViewAdapter adapter;     ArrayList<HashMap<String, String>> commentList;
71
 
72
 
73
    public CapsuleDetail() {
74
        // Required empty public constructor
75
    }
76
 
77
    @Override
78
    public void onCreate(Bundle savedInstanceState) {
79
        super.onCreate(savedInstanceState);
80
    }
81
 
82
    @Override
83
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
84
                             Bundle savedInstanceState) {
85
        View view = inflater.inflate(R.layout.fragment_capsule_detail, container, false);
86
 
87
        iTwoGetSkills = (ITwoGetSkills) getActivity();
88
        ratinglevel = view.findViewById(R.id.ratingBar); continuar= view.findViewById(R.id.continuarbutton); tarjeta= view.findViewById(R.id.cardView3);
89
        capsuleImage = view.findViewById(R.id.imageView4); mProgressbar= view.findViewById(R.id.progressBar3);
90
        nombrecapsula = view.findViewById(R.id.textView19); descripcion = view.findViewById(R.id.textView20);
91
        comentarios = view.findViewById(R.id.textView21); puntuacion = view.findViewById(R.id.textView22);
92
        porcentaje = view.findViewById(R.id.textView17); mDecimalFormat = new DecimalFormat("#.##");
93
        tabscapsule = view.findViewById(R.id.tabLayout2); listadecomentarios = view.findViewById(R.id.recyclerView);
94
        comentar = view.findViewById(R.id.editTextComentar); comentarBoton = view.findViewById(R.id.button4); docomments=view.findViewById(R.id.textView23);
95
 
96
        commentList = new ArrayList<>();
97
        adapter = new CommentListViewAdapter(getContext(),commentList);
98
 
99
        GridLayoutManager layoutcomments = new GridLayoutManager(getContext(),1,GridLayoutManager.VERTICAL, false);
100
        listadecomentarios.setLayoutManager(layoutcomments);
101
        listadecomentarios.setAdapter(adapter);
102
 
103
        adapter.setClickListener(this);
104
 
105
        loaddata();
106
 
63 gabriel 107
 
58 gabriel 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);
71 efrain 143
                    if(capsula.getTotalComments()==0)
58 gabriel 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
 
64 gabriel 186
               // Log.e("La added_on"," "+capsula.getAddedOn());
59 gabriel 187
                //Enviamos el comentario de la capsula
188
                addComment(capsula.getUuid(),
64 gabriel 189
                        bodyComment,rating, capsula.getAddedOn());
59 gabriel 190
            }
58 gabriel 191
 
59 gabriel 192
            }
193
            else{
194
                Toast.makeText(getActivity().getApplicationContext(), "Toma tiempo para ver esta cápsula antes de comentar", Toast.LENGTH_SHORT).show();
195
            }
58 gabriel 196
        });
197
 
198
        return view;
199
}
200
 
73 efrain 201
    private final Handler taskHandler = new Handler();
63 gabriel 202
 
203
    private final Runnable repeatativeTaskRunnable = new Runnable() {
204
        public void run() {
205
                    loadComments();
206
                    Log.e("Ando","cargando comentarios");
207
        }
208
    };
209
 
210
    void startHandler() {
211
        taskHandler.postDelayed(repeatativeTaskRunnable, 5 * 1000);
212
    }
213
 
214
    void stopHandler() {
215
        taskHandler.removeCallbacks(repeatativeTaskRunnable);
216
    }
217
 
58 gabriel 218
    public void loadComments(){
219
 
220
        commentList.clear();
221
 
60 gabriel 222
        if(iTwoGetSkills.isConnectedInternet()) {
223
            try {
224
                TimeZone timeZone = TimeZone.getTimeZone("UTC");
225
                Calendar calendar = Calendar.getInstance(timeZone);
226
                int created = (int) (calendar.getTimeInMillis() / 1000);
58 gabriel 227
 
60 gabriel 228
                Random random = new Random(created);
229
                int rand = 1000 + random.nextInt(8999);
58 gabriel 230
 
60 gabriel 231
                String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);
58 gabriel 232
 
60 gabriel 233
                Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
234
                OkHttpClient client = http.getHttpClient(false);
58 gabriel 235
 
60 gabriel 236
                Request request = new Request.Builder()
237
                        .url(Configuration.URL_COMMENTS + capsula.getUuid())
238
                        .build();
58 gabriel 239
 
240
 
60 gabriel 241
                Call call = client.newCall(request);
242
                call.enqueue(new okhttp3.Callback() {
243
                    public void onResponse(Call call, Response response)
244
                            throws IOException {
245
                        Log.d("TAG", "Response :  " + response.body().toString());
58 gabriel 246
 
60 gabriel 247
                        processResponseSyncToServer(response.body().string());
63 gabriel 248
                        stopHandler();
60 gabriel 249
                    }
58 gabriel 250
 
60 gabriel 251
                    public void onFailure(Call call, IOException e) {
252
                        Log.d("Tag", "Error :  " + e.getMessage());
63 gabriel 253
                        startHandler();
60 gabriel 254
                    }
255
                });
256
            } catch (Exception e) {
63 gabriel 257
                Log.e("Exception load"," comentarios"+e);
60 gabriel 258
            }
58 gabriel 259
        }
60 gabriel 260
        else
261
        {
262
            descripcion.setVisibility(View.VISIBLE);
263
            descripcion.setText("No tienes conexión en este momento");
63 gabriel 264
            startHandler();
60 gabriel 265
        }
58 gabriel 266
 
267
 
268
    }
269
 
270
 
64 gabriel 271
    public void addComment(String capsuleUuid, String bodycomment, String rating, String added_on)
58 gabriel 272
    {
273
        //Preparo el numero
274
        rating= rating.substring(0,1);
275
 
60 gabriel 276
        if(iTwoGetSkills.isConnectedInternet()) {
277
            try {
278
                TimeZone timeZone = TimeZone.getTimeZone("UTC");
279
                Calendar calendar = Calendar.getInstance(timeZone);
280
                int created = (int) (calendar.getTimeInMillis() / 1000);
58 gabriel 281
 
60 gabriel 282
                Random random = new Random(created);
283
                int rand = 1000 + random.nextInt(8999);
58 gabriel 284
 
60 gabriel 285
                String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);
58 gabriel 286
 
60 gabriel 287
                Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
288
                OkHttpClient client = http.getHttpClient(false);
58 gabriel 289
 
60 gabriel 290
                RequestBody formBody = new FormBody.Builder()
291
                        .add("comment", bodycomment)
292
                        .add("rating", rating)
64 gabriel 293
                        .add("added_on",added_on)
60 gabriel 294
                        .build();
58 gabriel 295
 
60 gabriel 296
                Request request = new Request.Builder()
297
                        .url(Configuration.URL_COMMENTS + capsuleUuid + "/add")
298
                        .post(formBody)
299
                        .build();
58 gabriel 300
 
301
 
60 gabriel 302
                Call call = client.newCall(request);
303
                call.enqueue(new okhttp3.Callback() {
304
                    public void onResponse(Call call, Response response)
305
                            throws IOException {
306
                        Log.d("TAG", "Response :  " + response.body().toString());
58 gabriel 307
 
60 gabriel 308
                        processResponseSyncToServer(response.body().string());
309
                    }
58 gabriel 310
 
60 gabriel 311
                    public void onFailure(Call call, IOException e) {
312
                        Log.d("Tag", "Error :  " + e.getMessage());
63 gabriel 313
 
60 gabriel 314
                    }
315
                });
316
            } catch (Exception e) {
317
            }
318
        }else
319
        {
320
            Toast.makeText(getActivity().getApplicationContext(), "En este momento no tienes conexión para enviar el comentario", Toast.LENGTH_SHORT).show();
58 gabriel 321
        }
322
    }
323
 
324
 
325
    private void processResponseSyncToServer(String dataString)
326
    {
327
        boolean success = false;
328
        long sync_id = 0;
329
        JSONArray comentariosarray;
330
 
331
        try {
332
            JSONObject objJSON = new JSONObject(dataString);
333
            success = objJSON.has("success") ? objJSON.getBoolean("success")  : false;
334
            if(success  && objJSON.has("data")) {
335
                JSONObject jsonObjectData = objJSON.getJSONObject("data");
336
 
64 gabriel 337
                Log.e("Respuesta server:", jsonObjectData.toString());
58 gabriel 338
 
339
 
340
                if(jsonObjectData.has("message"))
341
                {
342
 
59 gabriel 343
                    if(jsonObjectData.getString("message").equals("El comentario ha sido borrado con éxito"))
58 gabriel 344
                    {
63 gabriel 345
                        requireActivity().runOnUiThread(() -> Toast.makeText(requireActivity().getApplicationContext(), "¡Comentario eliminado, cargando comentarios..!", Toast.LENGTH_SHORT).show());
58 gabriel 346
                        loadComments();
347
                    }
348
                    else {
63 gabriel 349
                        requireActivity().runOnUiThread(() -> Toast.makeText(requireActivity().getApplicationContext(), "¡Comentario enviado, cargando comentarios..!", Toast.LENGTH_SHORT).show());
350
                        requireActivity().runOnUiThread(this::loaddata);
351
                        requireActivity().runOnUiThread(() -> tabscapsule.selectTab(tabscapsule.getTabAt(1), true));
352
                        requireActivity().runOnUiThread(() -> comentar.setText(""));
353
 
58 gabriel 354
                    }
355
                }
356
 
357
                if(jsonObjectData.has("comments"))
358
                {
359
                    //getActivity().runOnUiThread(() -> Toast.makeText(getActivity().getApplicationContext(), "Hay comentarios nuevos", Toast.LENGTH_SHORT).show());
360
 
361
 
362
                    comentariosarray = jsonObjectData.getJSONArray("comments");
363
                    Log.e("Comentarios",""+comentariosarray);
364
 
365
                    for(int i = 0; i < comentariosarray.length(); i++)
366
                    {
367
                        JSONObject objects = comentariosarray.getJSONObject(i);
368
                        HashMap<String, String> m_li;
369
                        m_li = new HashMap<>();
370
                        m_li.put("user", objects.getString("fullname"));
371
                        m_li.put("body", objects.getString("comment"));
372
                        m_li.put("fecha", objects.getString("date"));
373
                        m_li.put("rating", objects.getString("rating"));
374
                        m_li.put("image", objects.getString("image"));
375
                        m_li.put("urldelete", objects.getString("link_delete"));
376
 
377
                        commentList.add(m_li);
378
 
379
 
380
                    }
381
 
382
                    Log.e("Lista de comentarios"," "+commentList.toString());
383
                  getActivity().runOnUiThread(new Runnable() {
384
                      @Override
385
                      public void run() {
66 gabriel 386
                          if(commentList.size() >0)
387
                          {
388
                              adapter.notifyDataSetChanged();
389
                              descripcion.setVisibility(View.GONE);
390
                          }
391
 
58 gabriel 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
 
63 gabriel 421
            requireActivity().runOnUiThread(() -> {
58 gabriel 422
 
423
                loaddata();
63 gabriel 424
                tabscapsule.selectTab(tabscapsule.getTabAt(0), true);
58 gabriel 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
 
59 gabriel 438
    progreso = progressDao.selectByCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());
58 gabriel 439
 
440
 
441
    capsula = capsuleDao.selectByUuid(iTwoGetSkills.getCapsuleUuidActive());
442
 
65 gabriel 443
 
58 gabriel 444
    nombrecapsula.setText(capsula.getName()); descripcion.setText(Html.fromHtml(capsula.getDescription(), Html.FROM_HTML_MODE_COMPACT));
71 efrain 445
    comentarios.setText("Comentarios: "+capsula.getTotalComments()); puntuacion.setText("Puntuación: "+capsula.getTotalRating());
446
    ratinglevel.setMax(5); ratinglevel.setRating(capsula.getTotalRating());
58 gabriel 447
    ratinglevel.setEnabled(false);
59 gabriel 448
    if(progreso != null) {
449
        mProgressbar.setMax(progreso.getTotalSlides());
450
        mProgressbar.setProgress(progreso.getViewSlides());
451
        porcentaje.setText(mDecimalFormat.format(progreso.getProgress()) + " %");
452
    }
62 gabriel 453
    else
454
    {
455
        mProgressbar.setMax(100);
456
        mProgressbar.setProgress(0);
457
        porcentaje.setText("0%");
458
    }
58 gabriel 459
    iTwoGetSkills.setTitleActionBar(capsula.getName());
460
 
71 efrain 461
    ImageService.retrieve(getContext(), capsula.getImage(), capsuleImage);
58 gabriel 462
 
463
}
464
 
465
    @Override
466
    public void onResume() {
467
        super.onResume();
468
        loaddata();
469
    }
470
 
471
    @Override
472
    public void onItemClick(int position, View v) {
473
 
60 gabriel 474
        Log.e("On", "click");
475
        if (iTwoGetSkills.isConnectedInternet()) {
58 gabriel 476
 
60 gabriel 477
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
478
            alertDialogBuilder.setMessage("¿Deseas eliminar este comentario?");
479
            alertDialogBuilder.setPositiveButton("Si, eliminarlo",
480
                    new DialogInterface.OnClickListener() {
481
                        @Override
482
                        public void onClick(DialogInterface arg0, int arg1) {
58 gabriel 483
 
60 gabriel 484
                            String urldelete = commentList.get(position).get("urldelete");
485
                            String user = commentList.get(position).get("user");
58 gabriel 486
 
60 gabriel 487
                            if (user.equals(iTwoGetSkills.getPreference().getFirstName() + " " + iTwoGetSkills.getPreference().getLastName())) {
488
                                try {
489
                                    TimeZone timeZone = TimeZone.getTimeZone("UTC");
490
                                    Calendar calendar = Calendar.getInstance(timeZone);
491
                                    int created = (int) (calendar.getTimeInMillis() / 1000);
58 gabriel 492
 
60 gabriel 493
                                    Random random = new Random(created);
494
                                    int rand = 1000 + random.nextInt(8999);
58 gabriel 495
 
60 gabriel 496
                                    String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);
58 gabriel 497
 
60 gabriel 498
                                    Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
499
                                    OkHttpClient client = http.getHttpClient(false);
58 gabriel 500
 
63 gabriel 501
 
60 gabriel 502
                                    RequestBody formBody = new FormBody.Builder()
503
                                            .add("", "")
504
                                            .build();
505
                                    assert urldelete != null;
506
                                    Request request = new Request.Builder()
507
                                            .url(urldelete).post(formBody)
508
                                            .build();
58 gabriel 509
 
510
 
60 gabriel 511
                                    Call call = client.newCall(request);
512
                                    call.enqueue(new okhttp3.Callback() {
513
                                        public void onResponse(Call call, Response response)
514
                                                throws IOException {
515
                                            Log.d("TAG", "Response :  " + response.body().toString());
58 gabriel 516
 
60 gabriel 517
                                            processResponseSyncToServer(response.body().string());
518
                                        }
59 gabriel 519
 
60 gabriel 520
                                        public void onFailure(Call call, IOException e) {
521
                                            Log.d("Tag", "Error :  " + e.getMessage());
522
                                        }
523
                                    });
524
                                } catch (Exception e) {
525
                                }
526
                            } else {
527
                                Log.e("No es mi ", " comentario");
528
                            }
59 gabriel 529
 
58 gabriel 530
 
60 gabriel 531
                        }
532
                    });
58 gabriel 533
 
534
 
60 gabriel 535
            alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
536
                @Override
537
                public void onClick(DialogInterface dialog, int which) {
58 gabriel 538
 
60 gabriel 539
                }
540
            });
541
            AlertDialog alertDialog = alertDialogBuilder.create();
542
            alertDialog.show();
543
            alertDialog.getButton(alertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.design_default_color_error, null));
544
            alertDialog.getButton(alertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorTextColor, null));
58 gabriel 545
 
60 gabriel 546
            alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
547
                @Override
548
                public void onDismiss(DialogInterface dialogInterface) {
58 gabriel 549
 
550
 
60 gabriel 551
                }
552
            });
58 gabriel 553
 
60 gabriel 554
        }
555
        else
556
        {
63 gabriel 557
            Toast.makeText(requireActivity().getApplicationContext(), "No tienes conexión en este momento para ver los detalles.", Toast.LENGTH_SHORT).show();
60 gabriel 558
        }
58 gabriel 559
    }
560
}