Vassa007

soal_latihan_controller

Sep 20th, 2023
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 19.80 KB | None | 0 0
  1. package com.kudisprivate.student.activity.mapel.latihan;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.annotation.TargetApi;
  5. import android.app.Activity;
  6. import android.os.Build;
  7. import android.os.CountDownTimer;
  8. import android.util.Log;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.ImageView;
  12. import android.widget.LinearLayout;
  13. import android.widget.RadioButton;
  14. import android.widget.RadioGroup;
  15. import android.widget.TextView;
  16.  
  17.  
  18. import androidx.recyclerview.widget.GridLayoutManager;
  19. import androidx.recyclerview.widget.RecyclerView;
  20.  
  21. import com.bumptech.glide.Glide;
  22. import com.bumptech.glide.request.RequestOptions;
  23. import com.github.chrisbanes.photoview.PhotoView;
  24. import com.google.android.material.dialog.MaterialAlertDialogBuilder;
  25. import com.kudisprivate.student.R;
  26. import com.kudisprivate.student.activity.mapel.model.DetailSoal;
  27. import com.kudisprivate.student.activity.mapel.model.ResponseSoalLatihan;
  28. import com.kudisprivate.student.config.manager.AlertDialogManager;
  29. import com.kudisprivate.student.config.manager.BackgroundManager;
  30. import com.kudisprivate.student.config.manager.ItemDecorationColumns;
  31. import com.kudisprivate.student.config.manager.SessionManager;
  32. import com.kudisprivate.student.config.network.CheckError;
  33. import com.kudisprivate.student.config.network.Connection;
  34.  
  35. import org.json.JSONException;
  36. import org.json.JSONObject;
  37.  
  38. import java.util.ArrayList;
  39. import java.util.Arrays;
  40. import java.util.Collections;
  41. import java.util.List;
  42. import java.util.Locale;
  43. import java.util.Objects;
  44. import java.util.concurrent.TimeUnit;
  45.  
  46. import okhttp3.ResponseBody;
  47. import retrofit2.Call;
  48. import retrofit2.Callback;
  49. import retrofit2.Response;
  50.  
  51. public class Soal_LatihanController {
  52.     private static final String TAG = Soal_LatihanController.class.getSimpleName();
  53.     private Activity activity;
  54.  
  55.     private TextView tv_waktu, tv_no_urut, tv_soal, ket_tv;
  56.     private LinearLayout constraintLayout2;
  57.     private ImageView image_soal;
  58.     private TextView pilihan1, pilihan2, pilihan3, pilihan4, pilihan5;
  59.     private RadioGroup rg_pilihan;
  60.     private RadioButton radioButton1, radioButton2, radioButton3, radioButton4, radioButton5;
  61.     private Button button_prev, button_next, button_selesai;
  62.     private RecyclerView recyclerView;
  63.  
  64.     private Object pil1, pil2, pil3, pil4, pil5;
  65.  
  66.     public int latihan_id;
  67.  
  68.     private CounterClass mCountDownTimer;
  69.     private int id_jawaban_dipilih[] = null;
  70.     private String jawaban_dipilih[] = null;
  71.     private String waktu_pilihan[] = null;
  72.     private int jawabanYgBenar[] = null;
  73.     private boolean cekPertanyaan = false;
  74.     private int urutanPertanyaan = 0;
  75.  
  76.     private List<DetailSoal> list;
  77.     private int waktu;
  78.     private int waktu_sisa;
  79.  
  80.     private boolean isPaused = false;
  81.     private boolean isCanceled = false;
  82.  
  83.     public Soal_LatihanController(Activity activity) {
  84.         this.activity = activity;
  85.     }
  86.  
  87.     public void bind() {
  88.         constraintLayout2 = activity.findViewById(R.id.constraintLayout2);
  89.         tv_waktu = activity.findViewById(R.id.tv_waktu);
  90.         tv_no_urut = activity.findViewById(R.id.tv_no_urut);
  91.         tv_soal = activity.findViewById(R.id.tv_soal);
  92.         image_soal = activity.findViewById(R.id.image_soal);
  93.         ket_tv = activity.findViewById(R.id.label_image);
  94.         pilihan1 = activity.findViewById(R.id.pilihan1);
  95.         pilihan2 = activity.findViewById(R.id.pilihan2);
  96.         pilihan3 = activity.findViewById(R.id.pilihan3);
  97.         pilihan4 = activity.findViewById(R.id.pilihan4);
  98.         pilihan5 = activity.findViewById(R.id.pilihan5);
  99.  
  100.         rg_pilihan = activity.findViewById(R.id.rg_pilihan);
  101.         radioButton1 = activity.findViewById(R.id.radioButton1);
  102.         radioButton2 = activity.findViewById(R.id.radioButton2);
  103.         radioButton3 = activity.findViewById(R.id.radioButton3);
  104.         radioButton4 = activity.findViewById(R.id.radioButton4);
  105.         radioButton5 = activity.findViewById(R.id.radioButton5);
  106.         button_prev = activity.findViewById(R.id.button_prev);
  107.         button_selesai = activity.findViewById(R.id.button_selesai);
  108.         button_next = activity.findViewById(R.id.button_next);
  109.  
  110.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
  111.             constraintLayout2.setBackground(new BackgroundManager().rounded_fill("#FFFFFF", 16.0f));
  112.         }
  113.  
  114.         image_soal.setVisibility(View.GONE);
  115.  
  116.         button_prev.setOnClickListener(this::klikSebelum);
  117.         button_selesai.setOnClickListener(this::klikSelesai);
  118.         button_next.setOnClickListener(this::klikBerikut);
  119.  
  120.         startLatihan(0);
  121.     }
  122.  
  123.     public void binView(View view) {
  124.         recyclerView = view.findViewById(R.id.recylerview);
  125.         startLatihan(1);
  126.     }
  127.  
  128.  
  129.     public void startLatihan(int i) {
  130.         JSONObject jsonObject = new JSONObject();
  131.         try {
  132.             jsonObject.put("latihan", latihan_id);
  133.         } catch (JSONException e) {
  134.             e.printStackTrace();
  135.         }
  136.  
  137.         new Connection().getLatihanEndpoint().soal_latihan(new SessionManager(activity).get_token(), jsonObject.toString())
  138.                 .enqueue(new Callback<ResponseSoalLatihan>() {
  139.                     @Override
  140.                     public void onResponse(Call<ResponseSoalLatihan> call, Response<ResponseSoalLatihan> response) {
  141.                         try {
  142.                             if (response.isSuccessful()) {
  143.                                 ResponseSoalLatihan responseSoalLatihan = response.body();
  144.  
  145.                                 if (responseSoalLatihan.getSuccess() == true) {
  146.                                     waktu = responseSoalLatihan.getDataSoal().getLatihan_detik();
  147.                                     list = responseSoalLatihan.getDataSoal().getDetailSoal();
  148.  
  149.                                     long latihan_id = responseSoalLatihan.getDataSoal().getLatihanId();
  150.  
  151.                                     id_jawaban_dipilih = new int[list.size()];
  152.                                     jawaban_dipilih = new String[list.size()];
  153.                                     waktu_pilihan = new String[list.size()];
  154.                                     Arrays.fill(id_jawaban_dipilih, -1);
  155.                                     Arrays.fill(jawaban_dipilih, "");
  156.                                     Arrays.fill(waktu_pilihan, "");
  157.  
  158.                                     jawabanYgBenar = new int[list.size()];
  159.                                     Arrays.fill(jawabanYgBenar, -1);
  160.  
  161.  
  162.                                     if (i == 0) {
  163.                                         setUpSoal(list);
  164.                                     } else {
  165.                                         SoalGridAdapter adapter = new SoalGridAdapter(list, activity, latihan_id);
  166.                                         GridLayoutManager manager = new GridLayoutManager(activity, 3,
  167.                                                 GridLayoutManager.VERTICAL, false);
  168.                                         recyclerView.setHasFixedSize(true);
  169.                                         recyclerView.setLayoutManager(manager);
  170.                                         recyclerView.addItemDecoration(new ItemDecorationColumns(1, 4));
  171.                                         recyclerView.setAdapter(adapter);
  172.                                     }
  173.  
  174.                                 } else {
  175.                                     new CheckError(activity).errorCode(responseSoalLatihan.getCode(), responseSoalLatihan.getMessage());
  176.                                 }
  177.  
  178.                             } else {
  179.                                 ResponseBody responseError = response.errorBody();
  180.                                 JSONObject object = new JSONObject(responseError.string());
  181.                                 String message = object.getString("message");
  182.                                 AlertDialogManager.showAlertDialog(activity, message)
  183.                                         .setNegativeButton("Coba Lagi", (dialog, which) -> dialog.dismiss()).show();
  184.                             }
  185.                         } catch (Exception e) {
  186.                             e.printStackTrace();
  187.                         }
  188.                     }
  189.  
  190.                     @Override
  191.                     public void onFailure(Call<ResponseSoalLatihan> call, Throwable t) {
  192.                         AlertDialogManager.retroOnFailure(activity, t);
  193.                     }
  194.                 });
  195.     }
  196.  
  197.     private void setUpSoal(List<DetailSoal> list) {
  198.         Collections.shuffle(list);
  199.         tunjukanPertanyaan(0, cekPertanyaan);
  200.     }
  201.  
  202.     /** Tunjukan pertanyaan dan initiallize**/
  203.     private void tunjukanPertanyaan(int urutan_soal_soal, boolean cekPertanyaan) {
  204.         button_selesai.setEnabled(false);
  205.         button_selesai.setVisibility(View.GONE);
  206.  
  207. //        if(urutan_soal_soal == 0)
  208. //            setup waktu
  209. //            setUpWaktu();
  210.  
  211.         try {
  212.             rg_pilihan.clearCheck();
  213.  
  214.             String no_urut = list.get(urutan_soal_soal).getId();
  215.             String soal = list.get(urutan_soal_soal).getSoal();
  216.             //set soal
  217.             tv_soal.setText(soal);
  218.             //set gambar soal
  219.             if (!list.get(urutan_soal_soal).getGambar().equals("")) {
  220.                 RequestOptions options = new RequestOptions()
  221.                         .centerInside()
  222.                         .placeholder(R.mipmap.ic_launcher_round)
  223.                         .error(R.mipmap.ic_launcher_round);
  224.                 Glide.with(activity).load(list.get(urutan_soal_soal).getGambar()).apply(options).into(image_soal);
  225.                 image_soal.setVisibility(View.VISIBLE);
  226.  
  227.                 ket_tv.setVisibility(View.VISIBLE);
  228.  
  229.                 image_soal.setOnClickListener(v -> {
  230.                     View view = activity.getLayoutInflater().inflate(R.layout.dialog_custom_layout, null);
  231.                     PhotoView imageView = view.findViewById(R.id.imageView);
  232.                     RequestOptions opt = new RequestOptions()
  233.                             .placeholder(R.mipmap.ic_launcher_round)
  234.                             .error(R.mipmap.ic_launcher_round);
  235.                     Glide.with(view).load(list.get(urutan_soal_soal).getGambar()).apply(opt).into(imageView);
  236.                     new MaterialAlertDialogBuilder(activity)
  237.                             .setView(view)
  238.                             .setCancelable(true)
  239.                             .show();
  240.                 });
  241.             } else  {
  242.                 image_soal.setVisibility(View.GONE);
  243.                 ket_tv.setVisibility(View.GONE);
  244.             }
  245.  
  246.             //set pilihan jawaban
  247.             rg_pilihan.check(-1);
  248.  
  249.             pil1 = list.get(urutan_soal_soal).getPilihan().getA();
  250.             pil2 = list.get(urutan_soal_soal).getPilihan().getB();
  251.             pil3 = list.get(urutan_soal_soal).getPilihan().getC();
  252.             pil4 = list.get(urutan_soal_soal).getPilihan().getD();
  253.             pil5 = list.get(urutan_soal_soal).getPilihan().getE();
  254.  
  255.             if (pil1 == null && pil2 == null && pil3 == null && pil4 == null && pil5 == null) {
  256.                 pilihan1.setVisibility(View.GONE);
  257.                 pilihan2.setVisibility(View.GONE);
  258.                 pilihan3.setVisibility(View.GONE);
  259.                 pilihan4.setVisibility(View.GONE);
  260.                 pilihan5.setVisibility(View.GONE);
  261.             } else {
  262.                 pilihan1.setText("A. " +list.get(urutan_soal_soal).getPilihan().getA());
  263.                 pilihan2.setText("B. " +list.get(urutan_soal_soal).getPilihan().getB());
  264.                 pilihan3.setText("C. " +list.get(urutan_soal_soal).getPilihan().getC());
  265.                 pilihan4.setText("D. " +list.get(urutan_soal_soal).getPilihan().getD());
  266.                 pilihan5.setText("E. " +list.get(urutan_soal_soal).getPilihan().getE());
  267.             }
  268.  
  269.             Log.d(TAG, id_jawaban_dipilih[urutan_soal_soal] + "");
  270.             if (id_jawaban_dipilih[urutan_soal_soal] == 1) {
  271.                 rg_pilihan.check(R.id.radioButton1);
  272.                 jawaban_dipilih[urutan_soal_soal] = list.get(urutan_soal_soal).getId();
  273.                 Log.e(TAG, "tunjukanPertanyaan: " + list.get(urutan_soal_soal).getId());
  274.             }
  275.             if (id_jawaban_dipilih[urutan_soal_soal] == 2) {
  276.                 rg_pilihan.check(R.id.radioButton2);
  277.                 jawaban_dipilih[urutan_soal_soal] = list.get(urutan_soal_soal).getId();
  278.                 Log.e(TAG, "tunjukanPertanyaan: " + list.get(urutan_soal_soal).getId());
  279.             }
  280.  
  281.             if (id_jawaban_dipilih[urutan_soal_soal] == 3) {
  282.                 rg_pilihan.check(R.id.radioButton3);
  283.                 jawaban_dipilih[urutan_soal_soal] = list.get(urutan_soal_soal).getId();
  284.                 Log.e(TAG, "tunjukanPertanyaan: " + list.get(urutan_soal_soal).getId());
  285.             }
  286.             if (id_jawaban_dipilih[urutan_soal_soal] == 4) {
  287.                 rg_pilihan.check(R.id.radioButton4);
  288.                 jawaban_dipilih[urutan_soal_soal] = list.get(urutan_soal_soal).getId();
  289.                 Log.e(TAG, "tunjukanPertanyaan: " + list.get(urutan_soal_soal).getId());
  290.             }
  291.             if (id_jawaban_dipilih[urutan_soal_soal] == 5) {
  292.                 rg_pilihan.check(R.id.radioButton5);
  293.                 jawaban_dipilih[urutan_soal_soal] = list.get(urutan_soal_soal).getId();
  294.                 Log.e(TAG, "tunjukanPertanyaan: " + list.get(urutan_soal_soal).getId());
  295.             }
  296.  
  297.             pasangLabelDanNomorUrut();
  298.  
  299.             if (urutan_soal_soal == (list.size() - 1)) {
  300.                 button_next.setEnabled(false);
  301.                 button_next.setVisibility(View.INVISIBLE);
  302.                 button_selesai.setEnabled(true);
  303.                 button_selesai.setVisibility(View.VISIBLE);
  304.  
  305.             }
  306.  
  307.             if (urutan_soal_soal == 0)
  308.                 button_prev.setEnabled(false);
  309.  
  310.             if (urutan_soal_soal > 0) {
  311.                 button_prev.setEnabled(true);
  312.             }
  313.  
  314.             if (urutan_soal_soal < (list.size() - 1)) {
  315.                 button_next.setEnabled(true);
  316.                 button_next.setVisibility(View.VISIBLE);
  317.             }
  318.  
  319.         } catch (Exception e) {
  320.             e.printStackTrace();
  321.             Log.e(this.getClass().toString(), e.getMessage(), e.getCause());
  322.         }
  323.     }
  324.  
  325.     public void pilihSoal(View view) {
  326.         Log.e(TAG, "pilihSoal: " + waktu );
  327.  
  328.     }
  329.  
  330.     private void pasangLabelDanNomorUrut() {
  331.         tv_no_urut.setText("Soal Ke " + (urutanPertanyaan + 1)+ " dari "
  332.                 + list.size() + " soal");
  333.     }
  334.  
  335.     public void setUpWaktu() {
  336. //        mCountDownTimer = new CounterClass(240000, 1000);
  337.         int p2 = 600 / 60;
  338. //        Log.e(TAG, "setUpWaktu: "+ p2 );
  339.  
  340.         Log.e(TAG, "setUpWaktu: " + waktu );
  341. //
  342.         mCountDownTimer = new CounterClass(activity.getIntent().getIntExtra("waktu",0)*1000, 1000);
  343.         mCountDownTimer.start();
  344.     }
  345.  
  346.     public class CounterClass extends CountDownTimer {
  347.  
  348.         public CounterClass(long millisInFuture, long countDownInterval) {
  349.             super(millisInFuture, countDownInterval);
  350.         }
  351.  
  352.         @Override
  353.         public void onFinish() {
  354.             AlertDialogManager.showAlertDialog(activity, "Anda telah kehabisan waktu, soal yang belum terjawab akan tetap dismipan.")
  355.                     .setPositiveButton("oke", (dialog, which) -> {
  356.                         aturJawaban_nya();
  357.                         SimpanJawaban simpanJawaban = new SimpanJawaban(activity);
  358.                         simpanJawaban.setLatihan_id(latihan_id);
  359.                         simpanJawaban.setJawaban(Arrays.toString(jawaban_dipilih));
  360.                         simpanJawaban.simpan();
  361.  
  362.                         dialog.dismiss();
  363.                     }).show();
  364.  
  365.             Log.e(TAG, "onFinish: hayoo" );
  366.         }
  367.  
  368.         @SuppressLint("NewApi")
  369.         @TargetApi(Build.VERSION_CODES.GINGERBREAD)
  370.         @Override
  371.         public void onTick(long millisUntilFinished) {
  372.             long millis = millisUntilFinished;
  373.             String hms = String.format(
  374.                     "%02d:%02d:%02d",
  375.                     TimeUnit.MILLISECONDS.toHours(millis),
  376.                     TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
  377.                     TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
  378.             tv_waktu.setText(hms);
  379.         }
  380.  
  381.     }
  382.  
  383.     private void klikSebelum(View view) {
  384.         aturJawaban_nya();
  385.         urutanPertanyaan--;
  386.         if (urutanPertanyaan < 0)
  387.             urutanPertanyaan = 0;
  388.  
  389.         tunjukanPertanyaan(urutanPertanyaan, cekPertanyaan);
  390.     }
  391.  
  392.     private void klikSelesai(View view) {
  393.         aturJawaban_nya();
  394.  
  395.         AlertDialogManager.showAlertDialog(activity, "Anda akan menyudahi Latihan ini.")
  396.                 .setPositiveButton("Simpan", (dialog, which) -> {
  397.                     mCountDownTimer.cancel();
  398.  
  399.                     SimpanJawaban simpanJawaban = new SimpanJawaban(activity);
  400.                     simpanJawaban.setLatihan_id(latihan_id);
  401.                     simpanJawaban.setJawaban(Arrays.toString(jawaban_dipilih));
  402.                     simpanJawaban.simpan();
  403.  
  404.                 })
  405.                 .setNegativeButton("Tutup", (dialog, which) -> {
  406. //                    mCountDownTimer.cancel();
  407. //                    cekPertanyaan = false;
  408.                     dialog.dismiss();
  409.  
  410.                 }).show();
  411.     }
  412.  
  413.     private void aturJawaban_nya() {
  414.         JSONObject jsonObject = new JSONObject();
  415.         try {
  416.             if (radioButton1.isChecked()) {
  417.                 id_jawaban_dipilih[urutanPertanyaan] = 1;
  418.  
  419.                 jsonObject.put("soal_id",list.get(urutanPertanyaan).getId());
  420.                 jsonObject.put("jawaban", "A");
  421.                 jawaban_dipilih[urutanPertanyaan] = jsonObject.toString();
  422.  
  423.             }
  424.             if (radioButton2.isChecked()) {
  425.                 id_jawaban_dipilih[urutanPertanyaan] = 2;
  426.  
  427.                 jsonObject.put("soal_id",list.get(urutanPertanyaan).getId());
  428.                 jsonObject.put("jawaban", "B");
  429.                 jawaban_dipilih[urutanPertanyaan] = jsonObject.toString();
  430.             }
  431.             if (radioButton3.isChecked()) {
  432.                 id_jawaban_dipilih[urutanPertanyaan] = 3;
  433.  
  434.                 jsonObject.put("soal_id",list.get(urutanPertanyaan).getId());
  435.                 jsonObject.put("jawaban", "C");
  436.                 jawaban_dipilih[urutanPertanyaan] = jsonObject.toString();
  437.             }
  438.             if (radioButton4.isChecked()) {
  439.                 id_jawaban_dipilih[urutanPertanyaan] = 4;
  440.  
  441.                 jsonObject.put("soal_id",list.get(urutanPertanyaan).getId());
  442.                 jsonObject.put("jawaban", "D");
  443.                 jawaban_dipilih[urutanPertanyaan] = jsonObject.toString();
  444.             }
  445.             if (radioButton5.isChecked()) {
  446.                 id_jawaban_dipilih[urutanPertanyaan] = 5;
  447.  
  448.                 jsonObject.put("soal_id",list.get(urutanPertanyaan).getId());
  449.                 jsonObject.put("jawaban", "E");
  450.                 jawaban_dipilih[urutanPertanyaan] = jsonObject.toString();
  451.             }
  452.         } catch (JSONException e) {
  453.             e.printStackTrace();
  454.         }
  455.  
  456.         Log.e(TAG, "Hasil >> "+ Arrays.toString(jawaban_dipilih));
  457.         List<String> ls = new ArrayList<>();
  458.         ls.add(Arrays.toString(jawaban_dipilih));
  459.         Log.e(TAG, "aturJawaban_nya: "+ ls );
  460.         Log.d("", Arrays.toString(jawabanYgBenar));
  461.     }
  462.  
  463.     private void klikBerikut(View view) {
  464.         aturJawaban_nya();
  465.         urutanPertanyaan++;
  466.         if (urutanPertanyaan >= list.size()) {
  467.             urutanPertanyaan = list.size() - 1;
  468.         }
  469.  
  470.         tunjukanPertanyaan(urutanPertanyaan, cekPertanyaan);
  471.  
  472.         Log.e(TAG, "klikBerikut waktu: " + waktu_sisa);
  473.     }
  474. }
  475.  
Add Comment
Please, Sign In to add comment