knight109

FragmentAttendance

Feb 2nd, 2022 (edited)
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.36 KB | None | 0 0
  1. public class FragmentAttendance extends Fragment {
  2.  
  3.     DatabaseReference databaseReferenceEvent, databaseReferenceAttendance, databaseReferenceUser;
  4.     ProgressBar progressBar;
  5.     HelperProgressBar helperProgressBar;
  6.     Button buttonAddEvent;
  7.     TextView textKegiatanKosong;
  8.     RecyclerView recyclerViewAttendance;
  9.     FirebaseRecyclerAdapter<ModelEvent, ViewHolderEvent> adapter;
  10.     String stringQR, stringQRDecrypt, stringNIPQR, stringValidation;
  11.     String stringNama, stringNIP, stringJabatan, stringOPD, stringEmail, stringEventID, stringWaktu;
  12.  
  13.     @Nullable
  14.     @Override
  15.     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  16.         View v = inflater.inflate(R.layout.fragment_attendance, container, false);
  17.  
  18.         //Initialization
  19.         buttonAddEvent = v.findViewById(R.id.button_add_event);
  20.         progressBar = v.findViewById(R.id.progress_bar_attendance);
  21.         recyclerViewAttendance = v.findViewById(R.id.recyclerAttendance);
  22.         textKegiatanKosong = v.findViewById(R.id.text_kegiatan_kosong);
  23.  
  24.  
  25.         helperProgressBar = new HelperProgressBar(getActivity(), progressBar);
  26.  
  27.         recyclerViewAttendance.setLayoutManager(new LinearLayoutManager(requireContext()));
  28.         recyclerViewAttendance.setHasFixedSize(true);
  29.  
  30.  
  31.         //Load Data
  32.         SharedPreferences sharedPreferences = requireActivity().getSharedPreferences(SHARED_PREFERENCE_NAME, MODE_PRIVATE);
  33.         stringEmail = sharedPreferences.getString(SHARED_EMAIL,"");
  34.         stringNama = sharedPreferences.getString(SHARED_NAMA,"");
  35.         stringNIP = sharedPreferences.getString(SHARED_NIP, "");
  36.         stringJabatan = sharedPreferences.getString(SHARED_JABATAN, "");
  37.         stringOPD = sharedPreferences.getString(SHARED_OPD, "");
  38.  
  39.         databaseReferenceEvent = FirebaseDatabase.getInstance().getReference("Event");
  40.         databaseReferenceEvent.keepSynced(true);
  41.         databaseReferenceAttendance = FirebaseDatabase.getInstance().getReference("Attendance");
  42.         databaseReferenceAttendance.keepSynced(true);
  43.         databaseReferenceUser = FirebaseDatabase.getInstance().getReference("Users");
  44.         databaseReferenceUser.keepSynced(true);
  45.  
  46.         buttonAddEvent.setOnClickListener(new View.OnClickListener() {
  47.             @Override
  48.             public void onClick(View v) {
  49.                 startActivity(new Intent(getContext(), ActivityAddEvent.class));
  50.             }
  51.         });
  52.  
  53.  
  54.         fetch();
  55.         recyclerViewAttendance.setAdapter(adapter);
  56.  
  57.         Log.i(TAG, "On Create .....");
  58.         return v;
  59.     }
  60.  
  61.  
  62.     //Attendance
  63.     //Getting data
  64.     private void fetch() {
  65.  
  66.         helperProgressBar.showProgressBar();
  67.         Query query = databaseReferenceEvent.orderByChild("eventPenyelenggara").equalTo(stringOPD);
  68.  
  69.         query.addListenerForSingleValueEvent(new ValueEventListener() {
  70.             @Override
  71.             public void onDataChange(@NonNull DataSnapshot snapshot) {
  72.                 if(!snapshot.exists()){
  73.                     helperProgressBar.hideProgressBar();
  74.                     textKegiatanKosong.setVisibility(View.VISIBLE);
  75.                 }
  76.                 if(snapshot.exists()) {
  77.                     helperProgressBar.showProgressBar();
  78.                     textKegiatanKosong.setVisibility(View.GONE);
  79.                 }
  80.             }
  81.  
  82.             @Override
  83.             public void onCancelled(@NonNull DatabaseError error) {
  84.                 Log.d(TAG, error.getMessage()); //Don't ignore errors!
  85.             }
  86.         });
  87.  
  88.         //Get Event data
  89.         FirebaseRecyclerOptions <ModelEvent> options = new FirebaseRecyclerOptions.Builder<ModelEvent>().setQuery(query, snapshot -> new ModelEvent(
  90.             Objects.requireNonNull(snapshot.child("eventID").getValue()).toString(),
  91.             Objects.requireNonNull(snapshot.child("eventNama").getValue()).toString(),
  92.             Objects.requireNonNull(snapshot.child("eventLokasi").getValue()).toString(),
  93.             Objects.requireNonNull(snapshot.child("eventTanggal").getValue()).toString(),
  94.             Objects.requireNonNull(snapshot.child("eventJam").getValue()).toString(),
  95.             Objects.requireNonNull(snapshot.child("eventPenyelenggara").getValue()).toString(),
  96.             Objects.requireNonNull(snapshot.child("eventStatus").getValue()).toString()))
  97.         .build();
  98.  
  99.         //For View Holder
  100.         adapter = new FirebaseRecyclerAdapter<ModelEvent, ViewHolderEvent>(options) {
  101.             @NonNull
  102.             @Override
  103.             public ViewHolderEvent onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  104.                 View view = LayoutInflater.from(parent.getContext())
  105.                         .inflate(R.layout.list_attendance, parent, false);
  106.  
  107.                 helperProgressBar.hideProgressBar();
  108.                 return new ViewHolderEvent(view);
  109.             }
  110.  
  111.             //Set data on each list
  112.             @Override
  113.             protected void onBindViewHolder(@NonNull ViewHolderEvent viewHolderEvent, int i, @NonNull ModelEvent modelEvent) {
  114.                 viewHolderEvent.setStringKegiatan(modelEvent.getEventNama());
  115.                 viewHolderEvent.setStringTanggal(modelEvent.getEventTanggal());
  116.                 viewHolderEvent.setStringLokasi(modelEvent.getEventLokasi());
  117.                 viewHolderEvent.setStringStatus(modelEvent.getEventStatus());
  118.  
  119.                 viewHolderEvent.buttonScan.setOnClickListener(v -> {
  120.                     stringEventID = modelEvent.getEventID();
  121.  
  122.                     scanInitialization();
  123.                 });
  124.             }
  125.         };
  126.     }
  127.  
  128.     //For Scanner
  129.     //Scanner Initialization
  130.     private void scanInitialization() {
  131.         Log.i(TAG, "On Scanner Initialization.....");
  132.  
  133.         ScanOptions scanOption = new ScanOptions();
  134.         scanOption.setDesiredBarcodeFormats(ScanOptions.ALL_CODE_TYPES); //Many type
  135.         scanOption.setPrompt("Scan absen");
  136.         scanOption.setOrientationLocked(true);
  137.         scanOption.setBeepEnabled(true);
  138.         fragmentLauncher.launch(scanOption);
  139.     }
  140.  
  141.     //Scanner Launcher
  142.     private final ActivityResultLauncher<ScanOptions> fragmentLauncher = registerForActivityResult(new ScanContract(),
  143.             result -> {
  144.  
  145.                 Log.i(TAG, "On Scanner Launcher.....");
  146.  
  147.                 //On Backpress
  148.                 if(result.getContents() == null) {
  149.                     Toast.makeText(getContext(), "Cancelled", Toast.LENGTH_LONG).show();
  150.                 }
  151.                 else {
  152.                     //Get data from QRCode
  153.                     stringQR = result.getContents();
  154.  
  155.                     //Decrypt data from QR
  156.                     ModelDecrypt modelDecrypt = new ModelDecrypt(stringQR);
  157.                     stringQRDecrypt = modelDecrypt.getDataDecrypt();
  158.  
  159.                     //There is a special String for the barcode to scan
  160.                     if(stringQRDecrypt != null && stringQRDecrypt.contains(",")){
  161.                         StringTokenizer tokenizer = new StringTokenizer(stringQRDecrypt, ",");
  162.                         stringValidation = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;
  163.                         stringNIPQR = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;
  164.  
  165.                         //AKB2017 is data validation from Home
  166.                         assert stringValidation != null;
  167.                         if(stringValidation.equals("AKB2017")){
  168.                             //Get Data
  169.                             //Get User Data from Users (userID);
  170.                             getUserData();
  171.  
  172.                             //Put Data
  173.                             //Put User data to Attendance (EventID)
  174.                             setUserAttendance();
  175.  
  176.  
  177.                             //Notification
  178.                             Toast.makeText(getContext(), "Nama: " + stringNama, Toast.LENGTH_LONG).show();
  179.                         }
  180.                         else{
  181.                             Toast.makeText(getContext(), "Data Barcode Tidak Valid", Toast.LENGTH_LONG).show();
  182.                         }
  183.                     }
  184.                     else{
  185.                         Toast.makeText(getContext(), "Bukan Barcode Absensi", Toast.LENGTH_LONG).show();
  186.                     }
  187.                 }
  188.             });
  189.  
  190.     private void setUserAttendance() {
  191.  
  192.         //Get current time
  193.         Locale id = new Locale("in", "ID");
  194.         SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MMMM/yyyy, HH:mm", id);
  195.         stringWaktu = dateFormat.format(new Date());
  196.  
  197.         ModelAttendance attendance = new ModelAttendance(
  198.                 stringNama,
  199.                 stringNIP,
  200.                 stringJabatan,
  201.                 stringOPD,
  202.                 stringWaktu);
  203.  
  204.         databaseReferenceAttendance.child(stringEventID).child(stringNIP).setValue(attendance)
  205.                 .addOnSuccessListener(success -> {
  206.                 })
  207.                 .addOnFailureListener(e -> {
  208.                     Log.d(TAG, e.getMessage()); //Don't ignore errors!
  209.                 });
  210.     }
  211.  
  212.     private void getUserData() {
  213.         databaseReferenceUser.child(stringNIPQR).addValueEventListener(new ValueEventListener() {
  214.             @Override
  215.             public void onDataChange(@NonNull DataSnapshot snapshot) {
  216.                 if(snapshot.exists()){
  217.                     stringNama = Objects.requireNonNull(snapshot.child("userNama").getValue()).toString();
  218.                     stringNIP = Objects.requireNonNull(snapshot.child("userNIP").getValue()).toString();
  219.                     stringJabatan = Objects.requireNonNull(snapshot.child("userJabatan").getValue()).toString();
  220.                     stringOPD = Objects.requireNonNull(snapshot.child("userOPD").getValue()).toString();
  221.                 }
  222.             }
  223.             @Override
  224.             public void onCancelled(@NonNull DatabaseError error) {
  225.                 Log.d(TAG, error.getMessage()); //Don't ignore errors!
  226.             }
  227.         });
  228.     }
  229.  
  230.  
  231.     //Pressed return button - returns to home
  232.     @Override
  233.     public void onResume() {
  234.         super.onResume();
  235.  
  236.         //Backpress
  237.         FragmentHome fragmentHome = new FragmentHome();
  238.  
  239.         requireView().setFocusableInTouchMode(true);
  240.         requireView().requestFocus();
  241.         requireView().setOnKeyListener((v, keyCode, event) -> {
  242.  
  243.             if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
  244.                 requireActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentHome).commit();
  245.                 BottomNavigationView mBottomNavigationView = requireActivity().findViewById(R.id.bottom_navigation_view);
  246.                 mBottomNavigationView.setSelectedItemId(R.id.nav_home);
  247.                 return true;
  248.             }
  249.             return false;
  250.         });
  251.     }
  252.  
  253.     @Override
  254.     public void onDestroy() {
  255.         super.onDestroy();
  256.         Log.i(TAG, "On Destroy .....");
  257.     }
  258.  
  259.     @Override
  260.     public void onPause() {
  261.         super.onPause();
  262.         Log.i(TAG, "On Pause .....");
  263.     }
  264.  
  265.     @Override
  266.     public void onStart() {
  267.         super.onStart();
  268.         adapter.startListening();
  269.         Log.i(TAG, "On Start .....");
  270.     }
  271.  
  272.     @Override
  273.     public void onStop() {
  274.         super.onStop();
  275.         adapter.stopListening();
  276.         Log.i(TAG, "On Stop .....");
  277.     }
  278. }
Add Comment
Please, Sign In to add comment