package com.utopiaindustries.hseobservationsapp.fragments; import android.app.DatePickerDialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.DatePicker; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.utopiaindustries.hseobservationsapp.R; import com.utopiaindustries.hseobservationsapp.activities.HSETrainingForms.HseOneActivity; import com.utopiaindustries.hseobservationsapp.activities.InjuryRecordForms.InjuryFormOne; import com.utopiaindustries.hseobservationsapp.activities.ObservationForms.ObservationOneActivity; import com.utopiaindustries.hseobservationsapp.activities.OtherHSEActivityForms.OtherHseActivity; import com.utopiaindustries.hseobservationsapp.activities.PermitToWorkForms.PermitOneActivity; import com.utopiaindustries.hseobservationsapp.activities.ProgressiveActivityForms.ProgressiveActivity; import com.utopiaindustries.hseobservationsapp.activities.WeeklyActivityForms.WeeklyFormOne; import com.utopiaindustries.hseobservationsapp.adapters.BuildingsAdapter; import com.utopiaindustries.hseobservationsapp.adapters.DepartmentAdapter; import com.utopiaindustries.hseobservationsapp.adapters.FloorsAdapter; import com.utopiaindustries.hseobservationsapp.adapters.RecordTypeAdapter; import com.utopiaindustries.hseobservationsapp.adapters.ShiftAdapter; import com.utopiaindustries.hseobservationsapp.adapters.SiteAdapter; import com.utopiaindustries.hseobservationsapp.adapters.SupervisorAdapter; import com.utopiaindustries.hseobservationsapp.helper.Helper; import com.utopiaindustries.hseobservationsapp.helper.Preference; import com.utopiaindustries.hseobservationsapp.models.HseData.HseBuilding; import com.utopiaindustries.hseobservationsapp.models.HseData.HseDepartment; import com.utopiaindustries.hseobservationsapp.models.HseData.HseFloor; import com.utopiaindustries.hseobservationsapp.models.HseData.RecordType; import com.utopiaindustries.hseobservationsapp.models.HseData.Site; import com.utopiaindustries.hseobservationsapp.models.HseData.Supervisor; import com.utopiaindustries.hseobservationsapp.models.HseData.Shift; import com.utopiaindustries.hseobservationsapp.utils.StorageManager.StorageManager; import com.utopiaindustries.hseobservationsapp.utils.ProgressDialogFragment; import com.utopiaindustries.hseobservationsapp.viewmodels.LoginViewModel; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Locale; import java.util.Objects; import java.util.stream.Collectors; public class HomeFragment extends Fragment { private int year, month, day; private Calendar calendar; private TextView txtUserName, txtDate; private ImageView imgCalendar; private Button btnNext; private AutoCompleteTextView siteTextView, supervisorTextView, shiftTextview, formTextview, departmentTextview, buildingTextview, floorTextview; private SiteAdapter siteAdapter; private ArrayList siteArrayList = new ArrayList<>(); private SupervisorAdapter supervisorAdapter; private ArrayList supervisorArrayList_temp = new ArrayList<>(); private ArrayList supervisorArrayList = new ArrayList<>(); private ShiftAdapter shiftAdapter; private ArrayList shiftArrayList = new ArrayList<>(); private RecordTypeAdapter recordTypeAdapter; private List recordTypeArrayList = new ArrayList<>(); private DepartmentAdapter departmentAdapter; private ArrayList departmentArrayList_temp = new ArrayList<>(); private ArrayList departmentArrayList = new ArrayList<>(); private ArrayList buildingArrayList_temp = new ArrayList<>(); private ArrayList buildingArrayList = new ArrayList<>(); private BuildingsAdapter buildingAdapter; private ArrayList floorArrayList_temp = new ArrayList<>(); private ArrayList floorArrayList = new ArrayList<>(); private FloorsAdapter floorsAdapter; int selectedOption = 0; String userName = ""; String siteName = ""; String supervisorName = ""; String shiftName = ""; String departmentName = "", buildingName = "", floorName = ""; LoginViewModel loginViewModel; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_home, container, false); initializeLayout(view); txtUserName.setText(String.format("User: %s", userName)); imgCalendar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDatePickerDialog(getActivity()); } }); siteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // Perform action when siteTextView item is clicked //Toast.makeText(getActivity(), "Item clicked: " + siteArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show(); siteName = siteArrayList.get(position).getTitle(); Site clickedItem = siteArrayList.get(position); supervisorTextView.setText(null); StorageManager.getInstance().setSite_id(clickedItem.getId()); if (!supervisorArrayList_temp.isEmpty()) { List filteredUnitItems = supervisorArrayList_temp.stream() .filter(item -> Objects.equals(item.getSiteId(), clickedItem.getId())) .collect(Collectors.toList()); supervisorArrayList.clear(); supervisorArrayList.addAll(filteredUnitItems); supervisorAdapter = new SupervisorAdapter(getActivity(), supervisorArrayList); supervisorTextView.setAdapter(supervisorAdapter); } //department if (!departmentArrayList_temp.isEmpty()) { List filteredUnitItems = departmentArrayList_temp.stream() .filter(item -> Objects.equals(item.getSiteId(), clickedItem.getId())) .collect(Collectors.toList()); departmentArrayList.clear(); departmentArrayList.addAll(filteredUnitItems); departmentAdapter = new DepartmentAdapter(getActivity(), departmentArrayList); departmentTextview.setAdapter(departmentAdapter); } //Location -- Building if (!buildingArrayList_temp.isEmpty()) { List filteredUnitItems = buildingArrayList_temp.stream() .filter(item -> Objects.equals(item.getSiteId(), clickedItem.getId())) .collect(Collectors.toList()); buildingArrayList.clear(); buildingArrayList.addAll(filteredUnitItems); buildingAdapter = new BuildingsAdapter(getActivity(), buildingArrayList); buildingTextview.setAdapter(buildingAdapter); } //Sub Location -- floor if (!floorArrayList_temp.isEmpty()) { List filteredUnitItems = floorArrayList_temp.stream() .filter(item -> Objects.equals(item.getSiteId(), clickedItem.getId())) .collect(Collectors.toList()); floorArrayList.clear(); floorArrayList.addAll(filteredUnitItems); floorsAdapter = new FloorsAdapter(getActivity(), floorArrayList); floorTextview.setAdapter(floorsAdapter); } } }); supervisorTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // Perform action when supervisorTextView item is clicked //Toast.makeText(getActivity(), "Item clicked: " + supervisorArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show(); supervisorName = supervisorArrayList.get(position).getName(); StorageManager.getInstance().setSupervisorId(supervisorArrayList.get(position).getId()); } }); shiftTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // Perform action when shiftTextview item is clicked //Toast.makeText(getActivity(), "Item clicked: " + shiftArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show(); shiftName = shiftArrayList.get(position).getTitle(); StorageManager.getInstance().setShift(shiftName); } }); formTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // Perform action when formTextview item is clicked // Toast.makeText(getActivity(), "Item clicked: " + formArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show(); selectedOption = recordTypeArrayList.get(position).getId(); StorageManager.getInstance().setRecordTypeId(selectedOption); } }); departmentTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // Perform action when departmentTextview item is clicked //Toast.makeText(getActivity(), "Item clicked: " + departmentArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show(); departmentName = departmentArrayList.get(position).getTitle(); StorageManager.getInstance().setDepartmentId(departmentArrayList.get(position).getId()); } }); buildingTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // Perform action when buildingTextview item is clicked //Toast.makeText(getActivity(), "Item clicked: " + buildingArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show(); buildingName = buildingArrayList.get(position).getTitle(); StorageManager.getInstance().setBuildingId(buildingArrayList.get(position).getId()); } }); floorTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // Perform action when floorTextview item is clicked //Toast.makeText(getActivity(), "Item clicked: " + floorArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show(); floorName = floorArrayList.get(position).getTitle(); StorageManager.getInstance().setFloorId(floorArrayList.get(position).getId()); } }); btnNext.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isValidate()) { switch (selectedOption) { case 1: startActivity(new Intent(getActivity(), ObservationOneActivity.class)); break; case 2: startActivity(new Intent(getActivity(), PermitOneActivity.class)); break; case 3: startActivity(new Intent(getActivity(), HseOneActivity.class)); break; case 4: startActivity(new Intent(getActivity(), InjuryFormOne.class)); break; case 5: startActivity(new Intent(getActivity(), WeeklyFormOne.class)); break; case 6: startActivity(new Intent(getActivity(), ProgressiveActivity.class)); break; case 7: startActivity(new Intent(getActivity(), OtherHseActivity.class)); break; default: startActivity(new Intent(getActivity(), ObservationOneActivity.class)); // Toast.makeText(getActivity(), "No option selected", Toast.LENGTH_SHORT).show(); break; } } } }); return view; } public void initializeLayout(View view) { calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH); day = calendar.get(Calendar.DAY_OF_MONTH); txtUserName = view.findViewById(R.id.txt_user_name); txtDate = view.findViewById(R.id.txt_date); imgCalendar = view.findViewById(R.id.img_calendar); btnNext = view.findViewById(R.id.btn_next); siteTextView = view.findViewById(R.id.site_textview); supervisorTextView = view.findViewById(R.id.supervisor_textview); shiftTextview = view.findViewById(R.id.shift_textview); formTextview = view.findViewById(R.id.form_textview); departmentTextview = view.findViewById(R.id.department_textview); buildingTextview = view.findViewById(R.id.building_textview); floorTextview = view.findViewById(R.id.floor_textview); userName = Preference.getMyStringPref(Helper.project_file, Helper.logInUser, getActivity()); loginViewModel = new ViewModelProvider(getActivity()).get(LoginViewModel.class); loginViewModel.getLoadingState().observe(getActivity(), isLoading -> { if (isLoading != null && isLoading) { showProgressDialog(); } else { dismissProgressDialog(); } }); loginViewModel.getErrorMessage().observe(getActivity(), errorResponse -> { Toast.makeText(getActivity(), errorResponse, Toast.LENGTH_SHORT).show(); }); loginViewModel.getUserLiveData().observe(getActivity(), qcResponse -> { if (qcResponse != null) { if (!qcResponse.getHseInjuryTypes().isEmpty()) { Helper.saveList(qcResponse.getHseInjuryTypes(), Helper.hseInjuryTypes, getActivity()); } if (!qcResponse.getHseKpis().isEmpty()) { Helper.saveList(qcResponse.getHseKpis(), Helper.hseKpis, getActivity()); } if (!qcResponse.getSites().isEmpty()) { Helper.saveList(qcResponse.getSites(), Helper.homeSite, getActivity()); siteArrayList.addAll(qcResponse.getSites()); siteAdapter = new SiteAdapter(getActivity(), siteArrayList); siteTextView.setAdapter(siteAdapter); } if (!qcResponse.getRecordTypes().isEmpty()) { Helper.saveList(qcResponse.getRecordTypes(), Helper.recordType, getActivity()); recordTypeArrayList.addAll(qcResponse.getRecordTypes()); recordTypeAdapter = new RecordTypeAdapter(getActivity(), recordTypeArrayList); formTextview.setAdapter(recordTypeAdapter); } if (!qcResponse.getSupervisors().isEmpty()) { Helper.saveList(qcResponse.getSupervisors(), Helper.superVisor, getActivity()); supervisorArrayList_temp.addAll(qcResponse.getSupervisors()); } if (!qcResponse.getHseObservationClasses().isEmpty()) { Helper.saveList(qcResponse.getHseObservationClasses(), Helper.observationClass, getActivity()); } if (!qcResponse.getHseObservationSubClasses().isEmpty()) { Helper.saveList(qcResponse.getHseObservationSubClasses(), Helper.observationSubClass, getActivity()); } if (!qcResponse.getHseFloors().isEmpty()) { Helper.saveList(qcResponse.getHseFloors(), Helper.hseFloors, getActivity()); floorArrayList_temp.addAll(qcResponse.getHseFloors()); } if (!qcResponse.getHseActivities().isEmpty()) { Helper.saveList(qcResponse.getHseActivities(), Helper.hseActivities, getActivity()); } if (!qcResponse.getHseDepartment().isEmpty()) { Helper.saveList(qcResponse.getHseDepartment(), Helper.hseDepartment, getActivity()); //department departmentArrayList_temp.addAll(qcResponse.getHseDepartment()); } if (!qcResponse.getHseIncidentTypes().isEmpty()) { Helper.saveList(qcResponse.getHseIncidentTypes(), Helper.hseIncidentTypes, getActivity()); } if (!qcResponse.getHseInjuredBodyPart().isEmpty()) { Helper.saveList(qcResponse.getHseInjuredBodyPart(), Helper.hseInjuredBodyPart, getActivity()); } if (!qcResponse.getHsePtwType().isEmpty()) { Helper.saveList(qcResponse.getHsePtwType(), Helper.hsePtwType, getActivity()); } if (!qcResponse.getHseSafetyTrainingTopics().isEmpty()) { Helper.saveList(qcResponse.getHseSafetyTrainingTopics(), Helper.hseSafetyTrainingTopics, getActivity()); } if (!qcResponse.getHseBuildings().isEmpty()) { Helper.saveList(qcResponse.getHseBuildings(), Helper.hseBuildings, getActivity()); buildingArrayList_temp.addAll(qcResponse.getHseBuildings()); } if (!qcResponse.getHseWorkingTeam().isEmpty()) { Helper.saveList(qcResponse.getHseWorkingTeam(), Helper.hseWorkingTeams, getActivity()); } if (!qcResponse.getHseInjuries().isEmpty()) { Helper.saveList(qcResponse.getHseInjuries(), Helper.hseInjuries, getActivity()); } Preference.setMyStringPref(Helper.project_file, Helper.firstTimeApiCall, getActivity(), "true"); } else { Toast.makeText(getActivity(), "Fetching Records Failed", Toast.LENGTH_SHORT).show(); } }); if (Preference.getMyStringPref(Helper.project_file, Helper.firstTimeApiCall, getActivity()).equalsIgnoreCase("false") || Preference.getMyStringPref(Helper.project_file, Helper.firstTimeApiCall, getActivity()).equalsIgnoreCase("default")) { loginViewModel.getHSEData(); } else { siteArrayList.clear(); recordTypeArrayList.clear(); siteArrayList.clear(); supervisorArrayList_temp.clear(); supervisorArrayList.clear(); departmentArrayList_temp.clear(); departmentArrayList.clear(); buildingArrayList_temp.clear(); buildingArrayList.clear(); floorArrayList_temp.clear(); floorArrayList.clear(); siteArrayList.addAll(Helper.getList(Helper.homeSite, getActivity(), Site.class)); siteAdapter = new SiteAdapter(getActivity(), siteArrayList); siteTextView.setAdapter(siteAdapter); supervisorArrayList_temp.addAll(Helper.getList(Helper.superVisor, getActivity(), Supervisor.class)); recordTypeArrayList.addAll(Helper.getList(Helper.recordType, getActivity(), RecordType.class)); recordTypeAdapter = new RecordTypeAdapter(getActivity(), recordTypeArrayList); formTextview.setAdapter(recordTypeAdapter); //department departmentArrayList_temp.addAll(Helper.getList(Helper.hseDepartment, getActivity(), HseDepartment.class)); //building buildingArrayList_temp.addAll(Helper.getList(Helper.hseBuildings, getActivity(), HseBuilding.class)); //floor floorArrayList_temp.addAll(Helper.getList(Helper.hseFloors, getActivity(), HseFloor.class)); } shiftArrayList.add(new Shift(1, "General Shift(08:00AM - 05:00PM)")); shiftArrayList.add(new Shift(2, "Evening Shift(12:00PM - 09:00PM)")); shiftArrayList.add(new Shift(3, "Night Shift(09:00PM - 06:00AM)")); shiftAdapter = new ShiftAdapter(getActivity(), shiftArrayList); shiftTextview.setAdapter(shiftAdapter); } private void showDatePickerDialog(Context context) { DatePickerDialog datePickerDialog = new DatePickerDialog( context, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // Month is 0-indexed, so we add 1 Calendar selectedCalendar = Calendar.getInstance(); selectedCalendar.set(year, monthOfYear, dayOfMonth); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); String selectedDate = dateFormat.format(selectedCalendar.getTime()); txtDate.setText(selectedDate); StorageManager.getInstance().setObservation_date(selectedDate); } }, year, month, day ); datePickerDialog.show(); } public boolean isValidate() { boolean returnValue = true; String message = ""; if (floorName.isEmpty()) { message = "Please select floor."; returnValue = false; } if (buildingName.isEmpty()) { message = "Please select building."; returnValue = false; } if (departmentName.isEmpty()) { message = "Please select department."; returnValue = false; } if (selectedOption == 0) { message = "Please select form type."; returnValue = false; } if (shiftName.isEmpty()) { message = "Please select shift."; returnValue = false; } if (supervisorName.isEmpty()) { message = "Please select supervisor."; returnValue = false; } if (siteName.isEmpty()) { message = "Please select site."; returnValue = false; } if (txtDate.getText().toString().isEmpty()) { message = "Please select date."; returnValue = false; } if (!returnValue) { Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show(); } return returnValue; } public void showProgressDialog() { ProgressDialogFragment progressDialog = new ProgressDialogFragment(); progressDialog.setCancelable(false); progressDialog.show(requireActivity().getSupportFragmentManager(), "progressDialog"); } public void dismissProgressDialog() { ProgressDialogFragment progressDialog = (ProgressDialogFragment) requireActivity().getSupportFragmentManager().findFragmentByTag("progressDialog"); if (progressDialog != null) { progressDialog.dismiss(); } } }