Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class FragmentAttendance extends Fragment {
- DatabaseReference databaseReferenceEvent, databaseReferenceAttendance, databaseReferenceUser;
- ProgressBar progressBar;
- HelperProgressBar helperProgressBar;
- Button buttonAddEvent;
- TextView textKegiatanKosong;
- RecyclerView recyclerViewAttendance;
- FirebaseRecyclerAdapter<ModelEvent, ViewHolderEvent> adapter;
- String stringQR, stringQRDecrypt, stringNIPQR, stringValidation;
- String stringNama, stringNIP, stringJabatan, stringOPD, stringEmail, stringEventID, stringWaktu;
- @Nullable
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.fragment_attendance, container, false);
- //Initialization
- buttonAddEvent = v.findViewById(R.id.button_add_event);
- progressBar = v.findViewById(R.id.progress_bar_attendance);
- recyclerViewAttendance = v.findViewById(R.id.recyclerAttendance);
- textKegiatanKosong = v.findViewById(R.id.text_kegiatan_kosong);
- helperProgressBar = new HelperProgressBar(getActivity(), progressBar);
- recyclerViewAttendance.setLayoutManager(new LinearLayoutManager(requireContext()));
- recyclerViewAttendance.setHasFixedSize(true);
- //Load Data
- SharedPreferences sharedPreferences = requireActivity().getSharedPreferences(SHARED_PREFERENCE_NAME, MODE_PRIVATE);
- stringEmail = sharedPreferences.getString(SHARED_EMAIL,"");
- stringNama = sharedPreferences.getString(SHARED_NAMA,"");
- stringNIP = sharedPreferences.getString(SHARED_NIP, "");
- stringJabatan = sharedPreferences.getString(SHARED_JABATAN, "");
- stringOPD = sharedPreferences.getString(SHARED_OPD, "");
- databaseReferenceEvent = FirebaseDatabase.getInstance().getReference("Event");
- databaseReferenceEvent.keepSynced(true);
- databaseReferenceAttendance = FirebaseDatabase.getInstance().getReference("Attendance");
- databaseReferenceAttendance.keepSynced(true);
- databaseReferenceUser = FirebaseDatabase.getInstance().getReference("Users");
- databaseReferenceUser.keepSynced(true);
- buttonAddEvent.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(new Intent(getContext(), ActivityAddEvent.class));
- }
- });
- fetch();
- recyclerViewAttendance.setAdapter(adapter);
- Log.i(TAG, "On Create .....");
- return v;
- }
- //Attendance
- //Getting data
- private void fetch() {
- helperProgressBar.showProgressBar();
- Query query = databaseReferenceEvent.orderByChild("eventPenyelenggara").equalTo(stringOPD);
- query.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot snapshot) {
- if(!snapshot.exists()){
- helperProgressBar.hideProgressBar();
- textKegiatanKosong.setVisibility(View.VISIBLE);
- }
- if(snapshot.exists()) {
- helperProgressBar.showProgressBar();
- textKegiatanKosong.setVisibility(View.GONE);
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError error) {
- Log.d(TAG, error.getMessage()); //Don't ignore errors!
- }
- });
- //Get Event data
- FirebaseRecyclerOptions <ModelEvent> options = new FirebaseRecyclerOptions.Builder<ModelEvent>().setQuery(query, snapshot -> new ModelEvent(
- Objects.requireNonNull(snapshot.child("eventID").getValue()).toString(),
- Objects.requireNonNull(snapshot.child("eventNama").getValue()).toString(),
- Objects.requireNonNull(snapshot.child("eventLokasi").getValue()).toString(),
- Objects.requireNonNull(snapshot.child("eventTanggal").getValue()).toString(),
- Objects.requireNonNull(snapshot.child("eventJam").getValue()).toString(),
- Objects.requireNonNull(snapshot.child("eventPenyelenggara").getValue()).toString(),
- Objects.requireNonNull(snapshot.child("eventStatus").getValue()).toString()))
- .build();
- //For View Holder
- adapter = new FirebaseRecyclerAdapter<ModelEvent, ViewHolderEvent>(options) {
- @NonNull
- @Override
- public ViewHolderEvent onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- View view = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.list_attendance, parent, false);
- helperProgressBar.hideProgressBar();
- return new ViewHolderEvent(view);
- }
- //Set data on each list
- @Override
- protected void onBindViewHolder(@NonNull ViewHolderEvent viewHolderEvent, int i, @NonNull ModelEvent modelEvent) {
- viewHolderEvent.setStringKegiatan(modelEvent.getEventNama());
- viewHolderEvent.setStringTanggal(modelEvent.getEventTanggal());
- viewHolderEvent.setStringLokasi(modelEvent.getEventLokasi());
- viewHolderEvent.setStringStatus(modelEvent.getEventStatus());
- viewHolderEvent.buttonScan.setOnClickListener(v -> {
- stringEventID = modelEvent.getEventID();
- scanInitialization();
- });
- }
- };
- }
- //For Scanner
- //Scanner Initialization
- private void scanInitialization() {
- Log.i(TAG, "On Scanner Initialization.....");
- ScanOptions scanOption = new ScanOptions();
- scanOption.setDesiredBarcodeFormats(ScanOptions.ALL_CODE_TYPES); //Many type
- scanOption.setPrompt("Scan absen");
- scanOption.setOrientationLocked(true);
- scanOption.setBeepEnabled(true);
- fragmentLauncher.launch(scanOption);
- }
- //Scanner Launcher
- private final ActivityResultLauncher<ScanOptions> fragmentLauncher = registerForActivityResult(new ScanContract(),
- result -> {
- Log.i(TAG, "On Scanner Launcher.....");
- //On Backpress
- if(result.getContents() == null) {
- Toast.makeText(getContext(), "Cancelled", Toast.LENGTH_LONG).show();
- }
- else {
- //Get data from QRCode
- stringQR = result.getContents();
- //Decrypt data from QR
- ModelDecrypt modelDecrypt = new ModelDecrypt(stringQR);
- stringQRDecrypt = modelDecrypt.getDataDecrypt();
- //There is a special String for the barcode to scan
- if(stringQRDecrypt != null && stringQRDecrypt.contains(",")){
- StringTokenizer tokenizer = new StringTokenizer(stringQRDecrypt, ",");
- stringValidation = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;
- stringNIPQR = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;
- //AKB2017 is data validation from Home
- assert stringValidation != null;
- if(stringValidation.equals("AKB2017")){
- //Get Data
- //Get User Data from Users (userID);
- getUserData();
- //Put Data
- //Put User data to Attendance (EventID)
- setUserAttendance();
- //Notification
- Toast.makeText(getContext(), "Nama: " + stringNama, Toast.LENGTH_LONG).show();
- }
- else{
- Toast.makeText(getContext(), "Data Barcode Tidak Valid", Toast.LENGTH_LONG).show();
- }
- }
- else{
- Toast.makeText(getContext(), "Bukan Barcode Absensi", Toast.LENGTH_LONG).show();
- }
- }
- });
- private void setUserAttendance() {
- //Get current time
- Locale id = new Locale("in", "ID");
- SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MMMM/yyyy, HH:mm", id);
- stringWaktu = dateFormat.format(new Date());
- ModelAttendance attendance = new ModelAttendance(
- stringNama,
- stringNIP,
- stringJabatan,
- stringOPD,
- stringWaktu);
- databaseReferenceAttendance.child(stringEventID).child(stringNIP).setValue(attendance)
- .addOnSuccessListener(success -> {
- })
- .addOnFailureListener(e -> {
- Log.d(TAG, e.getMessage()); //Don't ignore errors!
- });
- }
- private void getUserData() {
- databaseReferenceUser.child(stringNIPQR).addValueEventListener(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot snapshot) {
- if(snapshot.exists()){
- stringNama = Objects.requireNonNull(snapshot.child("userNama").getValue()).toString();
- stringNIP = Objects.requireNonNull(snapshot.child("userNIP").getValue()).toString();
- stringJabatan = Objects.requireNonNull(snapshot.child("userJabatan").getValue()).toString();
- stringOPD = Objects.requireNonNull(snapshot.child("userOPD").getValue()).toString();
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError error) {
- Log.d(TAG, error.getMessage()); //Don't ignore errors!
- }
- });
- }
- //Pressed return button - returns to home
- @Override
- public void onResume() {
- super.onResume();
- //Backpress
- FragmentHome fragmentHome = new FragmentHome();
- requireView().setFocusableInTouchMode(true);
- requireView().requestFocus();
- requireView().setOnKeyListener((v, keyCode, event) -> {
- if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
- requireActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentHome).commit();
- BottomNavigationView mBottomNavigationView = requireActivity().findViewById(R.id.bottom_navigation_view);
- mBottomNavigationView.setSelectedItemId(R.id.nav_home);
- return true;
- }
- return false;
- });
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- Log.i(TAG, "On Destroy .....");
- }
- @Override
- public void onPause() {
- super.onPause();
- Log.i(TAG, "On Pause .....");
- }
- @Override
- public void onStart() {
- super.onStart();
- adapter.startListening();
- Log.i(TAG, "On Start .....");
- }
- @Override
- public void onStop() {
- super.onStop();
- adapter.stopListening();
- Log.i(TAG, "On Stop .....");
- }
- }
Add Comment
Please, Sign In to add comment