From 1eabc8672eb5b6230d1be4b00e062d7c93dfbf57 Mon Sep 17 00:00:00 2001 From: "saad.siddiq" Date: Mon, 19 May 2025 18:01:36 +0500 Subject: [PATCH] Add persist data functionality --- app/src/main/AndroidManifest.xml | 5 +- .../HSETrainingForms/HseOneActivity.java | 191 +++--- .../HSETrainingForms/HseTwoActivity.java | 82 +-- .../ObservationOneActivity.java | 599 ++++++++++++++++-- .../ObservationThreeActivity.java | 141 +---- .../ObservationTwoActivity.java | 582 +++++------------ .../PermitToWorkForms/PermitOneActivity.java | 205 +++--- .../PermitToWorkForms/PermitTwoActivity.java | 71 ++- .../fragments/HomeFragment.java | 132 +++- .../StorageManager/HseReportRequest.java | 33 +- .../StorageManager/HseTrainingModel.java | 54 -- .../StorageManager/ObservationModel.java | 59 -- .../StorageManager/PermitToWorkModel.java | 54 -- .../utils/StorageManager/StorageManager.java | 99 ++- app/src/main/res/layout/activity_hse_one.xml | 109 ++-- app/src/main/res/layout/activity_hse_two.xml | 59 -- .../res/layout/activity_observation_one.xml | 95 +-- .../res/layout/activity_observation_three.xml | 80 --- .../res/layout/activity_observation_two.xml | 193 +++--- .../main/res/layout/activity_permit_one.xml | 123 +--- .../main/res/layout/activity_permit_two.xml | 35 +- .../res/layout/custom_layout_for_exit.xml | 87 +++ app/src/main/res/layout/fragment_home.xml | 113 ++++ 23 files changed, 1623 insertions(+), 1578 deletions(-) create mode 100644 app/src/main/res/layout/custom_layout_for_exit.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 651e3d3..34a3315 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -77,7 +77,8 @@ + android:screenOrientation="portrait" + android:windowSoftInputMode="adjustResize"/> + android:screenOrientation="portrait"/> safetyTrainingArrayList = new ArrayList<>(); - private ArrayList departmentArrayList = new ArrayList<>(); - private ArrayList departmentArrayList_temp = new ArrayList<>(); - private DepartmentAdapter departmentAdapter; private SafetyTrainingAdapter safetyTrainingAdapter; private String safetyTrainingTopic = ""; - private String targetAudience = "", location = "", subLocation = ""; EditText etNoOfEmployees; - private ArrayList locationArrayList_temp = new ArrayList<>(); - private ArrayList locationArrayList = new ArrayList<>(); - private BuildingsAdapter buildingAdapter; - - private ArrayList subLocationArrayList_temp = new ArrayList<>(); - private ArrayList subLocationArrayList = new ArrayList<>(); - private FloorsAdapter floorsAdapter; - - - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -118,12 +108,10 @@ public class HseOneActivity extends AppCompatActivity { initializeLayouts(); - - imgBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + alertExit(HseOneActivity.this); } }); @@ -143,30 +131,7 @@ public class HseOneActivity extends AppCompatActivity { public void onItemClick(AdapterView parent, View view, int position, long id) { safetyTrainingTopic = safetyTrainingArrayList.get(position).getTitle(); StorageManager.getInstance().getHseTrainingModel().get(0).setSafetyTopicId(safetyTrainingArrayList.get(position).getId()); - } - }); - - targetAudienceTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - targetAudience = departmentArrayList.get(position).getTitle(); - StorageManager.getInstance().getHseTrainingModel().get(0).setTargetAudienceId(departmentArrayList.get(position).getId()); - } - }); - - locationTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - location = locationArrayList.get(position).getTitle(); - StorageManager.getInstance().getHseTrainingModel().get(0).setLocationId(locationArrayList.get(position).getId()); - } - }); - - subLocationTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - subLocation = subLocationArrayList.get(position).getTitle(); - StorageManager.getInstance().getHseTrainingModel().get(0).setSubLocationId(subLocationArrayList.get(position).getId()); + StorageManager.getInstance().getHseTrainingModel().get(0).setSafetyTopicName(safetyTrainingArrayList.get(position).getTitle()); } }); @@ -189,67 +154,99 @@ public class HseOneActivity extends AppCompatActivity { } }); + + etDescription.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + StorageManager.getInstance().getHseTrainingModel().get(0).setDescription(s.toString()); + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + etTrainingSession.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (!s.toString().isEmpty()) { + StorageManager.getInstance().getHseTrainingModel().get(0).setTrainingMinutes(Double.parseDouble(s.toString())); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); } private void initializeLayouts() { imgBack = findViewById(R.id.img_back); btnNext = findViewById(R.id.btn_next); etNoOfEmployees = findViewById(R.id.et_no_of_employees); + etTrainingSession = findViewById(R.id.et_training_session); + etDescription = findViewById(R.id.et_description); + etDescription.setImeOptions(EditorInfo.IME_ACTION_DONE); + etDescription.setRawInputType(InputType.TYPE_CLASS_TEXT); safetyTextview = findViewById(R.id.safety_textview); - targetAudienceTextview = findViewById(R.id.target_audience_textview); - - locationTextview = findViewById(R.id.location_textview); - subLocationTextView = findViewById(R.id.sub_location_textview); safetyTrainingArrayList.addAll(Helper.getList(Helper.hseSafetyTrainingTopics, this, HseSafetyTrainingTopic.class)); safetyTrainingAdapter = new SafetyTrainingAdapter(this, safetyTrainingArrayList); safetyTextview.setAdapter(safetyTrainingAdapter); - departmentArrayList_temp.addAll(Helper.getList(Helper.hseDepartment, this, HseDepartment.class)); + } - if (!departmentArrayList_temp.isEmpty()) { + public void alertExit(Context con) { + ViewGroup viewGroup = findViewById(android.R.id.content); - List filteredUnitItems = departmentArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); + TextView dialogOkBtn, dialogCancelBtn; - departmentArrayList.clear(); - departmentArrayList.addAll(filteredUnitItems); - departmentAdapter = new DepartmentAdapter(this, departmentArrayList); - targetAudienceTextview.setAdapter(departmentAdapter); - } + AlertDialog.Builder builder = new AlertDialog.Builder(con); + View view1 = LayoutInflater.from(con).inflate(R.layout.custom_layout_for_exit, viewGroup, false); + builder.setCancelable(false); + builder.setView(view1); - locationArrayList_temp.addAll(Helper.getList(Helper.hseBuildings, this, HseBuilding.class)); + dialogOkBtn = view1.findViewById(R.id.dialogOkBtn); + dialogCancelBtn = view1.findViewById(R.id.dialogCancelBtn); - //Location -- Building - if (!locationArrayList_temp.isEmpty()) { + AlertDialog alertDialog = builder.create(); + alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - List filteredUnitItems = locationArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); + dialogOkBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { - locationArrayList.clear(); - locationArrayList.addAll(filteredUnitItems); - buildingAdapter = new BuildingsAdapter(this, locationArrayList); - locationTextview.setAdapter(buildingAdapter); - } + alertDialog.dismiss(); - subLocationArrayList_temp.addAll(Helper.getList(Helper.hseFloors, this, HseFloor.class)); + StorageManager.getInstance().getHseTrainingModel().clear(); + finish(); - //Sub Location -- floor - if (!subLocationArrayList_temp.isEmpty()) { + } + }); - List filteredUnitItems = subLocationArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); + dialogCancelBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { - subLocationArrayList.clear(); - subLocationArrayList.addAll(filteredUnitItems); - floorsAdapter = new FloorsAdapter(this, subLocationArrayList); - subLocationTextView.setAdapter(floorsAdapter); - } + alertDialog.dismiss(); + } + }); + + alertDialog.show(); } /*@AfterPermissionGranted(CAMERA_REQUEST_ITEM) @@ -289,23 +286,17 @@ public class HseOneActivity extends AppCompatActivity { }*/ - public boolean isValidate() { boolean returnValue = true; String message = ""; - if (subLocation.isEmpty()) { - message = "Please select floor."; + if (etDescription.getText().toString().isEmpty()) { + message = "Please enter Description"; returnValue = false; } - if (location.isEmpty()) { - message = "Please select building."; - returnValue = false; - } - - if (targetAudience.isEmpty()) { - message = "Please select department."; + if (etTrainingSession.getText().toString().isEmpty()) { + message = "Please enter Minutes of Session."; returnValue = false; } @@ -325,4 +316,28 @@ public class HseOneActivity extends AppCompatActivity { return returnValue; } + + @Override + protected void onResume() { + super.onResume(); + + if (StorageManager.getInstance().getHseTrainingModel() != null && + !StorageManager.getInstance().getHseTrainingModel().isEmpty()) { + showPersistData(); + } + } + + private void showPersistData() { + safetyTextview.post(() -> safetyTextview.setText(StorageManager.getInstance().getHseTrainingModel().get(0).getSafetyTopicName(), false)); + + if (StorageManager.getInstance().getHseTrainingModel().get(0).getEmployeeAttendance() != 0) { + etNoOfEmployees.setText(String.valueOf(StorageManager.getInstance().getHseTrainingModel().get(0).getEmployeeAttendance())); + } + + if (StorageManager.getInstance().getHseTrainingModel().get(0).getTrainingMinutes() != 0.0) { + etTrainingSession.setText(String.valueOf(StorageManager.getInstance().getHseTrainingModel().get(0).getTrainingMinutes())); + } + + etDescription.setText(StorageManager.getInstance().getHseTrainingModel().get(0).getDescription()); + } } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/HSETrainingForms/HseTwoActivity.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/HSETrainingForms/HseTwoActivity.java index 0cb12d1..b826e27 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/HSETrainingForms/HseTwoActivity.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/HSETrainingForms/HseTwoActivity.java @@ -76,7 +76,7 @@ public class HseTwoActivity extends AppCompatActivity implements EasyPermissions EasyPermissions.RationaleCallbacks{ Button btnSubmit; - EditText etTrainingSession, etDescription; + LoginViewModel loginViewModel; ImageView imgBack; @@ -198,6 +198,7 @@ public class HseTwoActivity extends AppCompatActivity implements EasyPermissions imgBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + StorageManager.getInstance().getHseTrainingModel().get(0).setPictures(imageList); finish(); } }); @@ -226,54 +227,15 @@ public class HseTwoActivity extends AppCompatActivity implements EasyPermissions } }); - etTrainingSession.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - if (!s.toString().isEmpty()) { - StorageManager.getInstance().getHseTrainingModel().get(0).setTrainingMinutes(Double.parseDouble(s.toString())); - } - } - - @Override - public void afterTextChanged(Editable s) { - - } - }); - - etDescription.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - StorageManager.getInstance().getHseTrainingModel().get(0).setDescription(s.toString()); - } - - @Override - public void afterTextChanged(Editable s) { - - } - }); } private void initializeLayouts() { btnSubmit = findViewById(R.id.btn_submit); - etTrainingSession = findViewById(R.id.et_training_session); + imgBack = findViewById(R.id.img_back); imgUpload = findViewById(R.id.img_upload); - etDescription = findViewById(R.id.et_description); - etDescription.setImeOptions(EditorInfo.IME_ACTION_DONE); - etDescription.setRawInputType(InputType.TYPE_CLASS_TEXT); - trainingPicRecyclerView = findViewById(R.id.tPicturesRecyclerView); imagePaperAdapter = new PTWImageAdapter(imageList, this, ""); @@ -337,6 +299,9 @@ public class HseTwoActivity extends AppCompatActivity implements EasyPermissions hseTrainingRequest.setSupervisorId(StorageManager.getInstance().getSupervisorId()); hseTrainingRequest.setSupervisorName(StorageManager.getInstance().getSupervisorName()); hseTrainingRequest.setShift(StorageManager.getInstance().getShift()); + hseTrainingRequest.setDepartmentId(StorageManager.getInstance().getDepartmentId()); + hseTrainingRequest.setBuildingId(StorageManager.getInstance().getBuildingId()); + hseTrainingRequest.setFloorId(StorageManager.getInstance().getFloorId()); hseTrainingRequest.setRecordTypeId(StorageManager.getInstance().getRecordTypeId()); hseTrainingRequest.setReportData(reportList); @@ -344,7 +309,7 @@ public class HseTwoActivity extends AppCompatActivity implements EasyPermissions String jsonRequest = gson.toJson(hseTrainingRequest); Log.e("RequestModel JSON", jsonRequest); - loginViewModel.saveHSEData(hseTrainingRequest); + //loginViewModel.saveHSEData(hseTrainingRequest); } @@ -381,16 +346,6 @@ public class HseTwoActivity extends AppCompatActivity implements EasyPermissions boolean returnValue = true; String message = ""; - if (etDescription.getText().toString().isEmpty()) { - message = "Please enter Description"; - returnValue = false; - } - - if (etTrainingSession.getText().toString().isEmpty()) { - message = "Please enter Minutes of Session."; - returnValue = false; - } - if (!returnValue) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } @@ -684,4 +639,27 @@ public class HseTwoActivity extends AppCompatActivity implements EasyPermissions public void onRationaleDenied(int requestCode) { } + + @Override + protected void onResume() { + super.onResume(); + + if (StorageManager.getInstance().getPermitToWorkModel() != null && + !StorageManager.getInstance().getPermitToWorkModel().isEmpty()) { + showPersistData(); + } + } + + private void showPersistData() { + + if (StorageManager.getInstance().getHseTrainingModel().get(0).getPictures() != null + && !StorageManager.getInstance().getHseTrainingModel().get(0).getPictures().isEmpty()) { + imageList.clear(); + imageList.addAll(StorageManager.getInstance().getHseTrainingModel().get(0).getPictures()); + imagePaperAdapter = new PTWImageAdapter(imageList, this, ""); + trainingPicRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); + trainingPicRecyclerView.setAdapter(imagePaperAdapter); + + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationOneActivity.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationOneActivity.java index 200a024..c85dba6 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationOneActivity.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationOneActivity.java @@ -1,41 +1,78 @@ package com.utopiaindustries.hseobservationsapp.activities.ObservationForms; +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; import android.util.Log; +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.ImageView; +import android.widget.TextView; import android.widget.Toast; import androidx.activity.EdgeToEdge; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.FileProvider; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; import com.utopiaindustries.hseobservationsapp.R; +import com.utopiaindustries.hseobservationsapp.activities.DashboardActivity; +import com.utopiaindustries.hseobservationsapp.activities.LoginActivity; import com.utopiaindustries.hseobservationsapp.adapters.BuildingsAdapter; import com.utopiaindustries.hseobservationsapp.adapters.FloorsAdapter; import com.utopiaindustries.hseobservationsapp.adapters.ObservationClassAdapter; import com.utopiaindustries.hseobservationsapp.adapters.ObservationSubClassAdapter; 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.HseFloor; import com.utopiaindustries.hseobservationsapp.models.HseData.HseObservationClass; import com.utopiaindustries.hseobservationsapp.models.HseData.HseObservationSubClass; import com.utopiaindustries.hseobservationsapp.utils.StorageManager.StorageManager; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import java.util.stream.Collectors; -public class ObservationOneActivity extends AppCompatActivity { +import pub.devrel.easypermissions.AfterPermissionGranted; +import pub.devrel.easypermissions.AppSettingsDialog; +import pub.devrel.easypermissions.EasyPermissions; - private AutoCompleteTextView observationTextview, observationSubTextview, buildingTextview, floorTextview; +public class ObservationOneActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks, + EasyPermissions.RationaleCallbacks{ + + private AutoCompleteTextView observationTextview, observationSubTextview; private ObservationClassAdapter observationClassAdapter; private ObservationSubClassAdapter observationSubClassAdapter; @@ -44,19 +81,165 @@ public class ObservationOneActivity extends AppCompatActivity { private ArrayList obSubClassArrayList_temp = new ArrayList<>(); private ArrayList obSubClassArrayList = new ArrayList<>(); - private ArrayList hseBuildingArrayList_temp = new ArrayList<>(); - private ArrayList hseBuildingArrayList = new ArrayList<>(); - - private ArrayList hseFloorArrayList_temp = new ArrayList<>(); - private ArrayList hseFloorArrayList = new ArrayList<>(); - private Button btnNext; ImageView imgBack; - String observationClass = "", observationSubClass = "", building = "", floor = ""; + String observationClass = "", observationSubClass = ""; int observationClassId = 0, observationSubClassId = 0; - private BuildingsAdapter buildingAdapter; - private FloorsAdapter floorsAdapter; + + ImageView imgBefore, beforeCrossButton, imgAfter, afterCrossButton; + private static final int CAMERA_REQUEST = 100; + private static final int GALLERY_REQUEST = 200; + + String filePathBefore = "no_pic"; + String filePathAfter = "no_pic"; + + + String imgType = ""; + + // Activity Result Launcher for Gallery + private final ActivityResultLauncher imagePickerLauncher = + registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + if (result.getResultCode() == RESULT_OK && result.getData() != null) { + Uri selectedImage = result.getData().getData(); + + if (imgType.equalsIgnoreCase("before")) { + + uriToByteArrayAsync( + this, + selectedImage, + 100, // Target size in KB + compressedImage -> { + // Handle the compressed image here, e.g., display it + runOnUiThread(() -> { + Glide.with(this) + .load(compressedImage) // Glide will handle the decoding and placeholder + .placeholder(R.drawable.img_load) + .apply(new RequestOptions().centerCrop()) + .into(imgBefore); + + List tempList = new ArrayList<>(); + tempList.add(compressedImage); + StorageManager.getInstance().getObservationsModel().get(0).setBeforePictures(tempList); + }); + }, + error -> { + // Handle any errors + runOnUiThread(() -> { + Toast.makeText(this, "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); + }); + } + ); + + } + else { + uriToByteArrayAsync( + this, + selectedImage, + 100, // Target size in KB + compressedImage -> { + // Handle the compressed image here, e.g., display it + runOnUiThread(() -> { + Glide.with(this) + .load(compressedImage) // Glide will handle the decoding and placeholder + .placeholder(R.drawable.img_load) + .apply(new RequestOptions().centerCrop()) + .into(imgAfter); + + List tempList = new ArrayList<>(); + tempList.add(compressedImage); + StorageManager.getInstance().getObservationsModel().get(0).setAfterPictures(tempList); + }); + }, + error -> { + // Handle any errors + runOnUiThread(() -> { + Toast.makeText(this, "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); + }); + } + ); + } + } + else if (result.getResultCode() == RESULT_CANCELED) { + Toast.makeText(this, "Gallery Selection Cancelled!", Toast.LENGTH_SHORT).show(); + } + else { + Toast.makeText(this, "Gallery Selection Cancelled!", Toast.LENGTH_SHORT).show(); + } + }); + + // Activity Result Launcher for Camera + private final ActivityResultLauncher cameraLauncher = + registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + + if (result.getResultCode() == RESULT_OK) { + + if (imgType.equalsIgnoreCase("before")) { + Uri contentUri = Uri.fromFile(new File((filePathBefore))); + + uriToByteArrayAsync( + this, + contentUri, + 100, // Target size in KB + compressedImage -> { + // Handle the compressed image here, e.g., display it + runOnUiThread(() -> { + Glide.with(this) + .load(contentUri) // Glide will handle the decoding and placeholder + .placeholder(R.drawable.img_load) + .apply(new RequestOptions().centerCrop()) + .into(imgBefore); + + List tempList = new ArrayList<>(); + tempList.add(compressedImage); + StorageManager.getInstance().getObservationsModel().get(0).setBeforePictures(tempList); + }); + }, + error -> { + // Handle any errors + runOnUiThread(() -> { + Toast.makeText(this, "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); + }); + } + ); + } + else { + Uri contentUri = Uri.fromFile(new File((filePathAfter))); + + uriToByteArrayAsync( + this, + contentUri, + 100, // Target size in KB + compressedImage -> { + // Handle the compressed image here, e.g., display it + runOnUiThread(() -> { + Glide.with(this) + .load(contentUri) // Glide will handle the decoding and placeholder + .placeholder(R.drawable.img_load) + .apply(new RequestOptions().centerCrop()) + .into(imgAfter); + + List tempList = new ArrayList<>(); + tempList.add(compressedImage); + StorageManager.getInstance().getObservationsModel().get(0).setAfterPictures(tempList); + }); + }, + error -> { + // Handle any errors + runOnUiThread(() -> { + Toast.makeText(this, "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); + }); + } + ); + } + } + else if (result.getResultCode() == RESULT_CANCELED) { + Toast.makeText(this, "Camera capture failed!", Toast.LENGTH_SHORT).show(); + } + else { + Toast.makeText(this, "Camera capture failed!", Toast.LENGTH_SHORT).show(); + } + }); @Override protected void onCreate(Bundle savedInstanceState) { @@ -74,7 +257,39 @@ public class ObservationOneActivity extends AppCompatActivity { imgBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + alertExit(ObservationOneActivity.this); + } + }); + + imgBefore.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + imgType = "before"; + alertForPictures(ObservationOneActivity.this); + } + }); + + imgAfter.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + imgType = "after"; + alertForPictures(ObservationOneActivity.this); + } + }); + + beforeCrossButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + imgBefore.setImageResource(R.drawable.icon_image); + StorageManager.getInstance().getObservationsModel().get(0).getBeforePictures().clear(); + } + }); + + afterCrossButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + imgAfter.setImageResource(R.drawable.icon_image); + StorageManager.getInstance().getObservationsModel().get(0).getAfterPictures().clear(); } }); @@ -134,70 +349,66 @@ public class ObservationOneActivity extends AppCompatActivity { StorageManager.getInstance().getObservationsModel().get(0).setHseObservationSubClassName(observationSubClass); } }); + } - buildingTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { + public void alertExit(Context con) { + ViewGroup viewGroup = findViewById(android.R.id.content); + + TextView dialogOkBtn, dialogCancelBtn; + + AlertDialog.Builder builder = new AlertDialog.Builder(con); + View view1 = LayoutInflater.from(con).inflate(R.layout.custom_layout_for_exit, viewGroup, false); + builder.setCancelable(false); + builder.setView(view1); + + dialogOkBtn = view1.findViewById(R.id.dialogOkBtn); + dialogCancelBtn = view1.findViewById(R.id.dialogCancelBtn); + + AlertDialog alertDialog = builder.create(); + alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + dialogOkBtn.setOnClickListener(new View.OnClickListener() { @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - building = hseBuildingArrayList.get(position).getTitle(); - StorageManager.getInstance().getObservationsModel().get(0).setBuildingId(hseBuildingArrayList.get(position).getId()); - StorageManager.getInstance().getObservationsModel().get(0).setBuildingName(hseBuildingArrayList.get(position).getTitle()); + public void onClick(View view) { + + alertDialog.dismiss(); + + StorageManager.getInstance().getObservationsModel().clear(); + finish(); } }); - floorTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { + dialogCancelBtn.setOnClickListener(new View.OnClickListener() { @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - floor = hseFloorArrayList.get(position).getTitle(); - StorageManager.getInstance().getObservationsModel().get(0).setFloorId(hseFloorArrayList.get(position).getId()); - StorageManager.getInstance().getObservationsModel().get(0).setFloorName(hseFloorArrayList.get(position).getTitle()); + public void onClick(View view) { + + alertDialog.dismiss(); + } }); + + alertDialog.show(); } public void initializeLayout() { observationTextview = findViewById(R.id.observation_textview); observationSubTextview = findViewById(R.id.observation_sub_textview); - buildingTextview = findViewById(R.id.building_textview); - floorTextview = findViewById(R.id.floor_textview); btnNext = findViewById(R.id.btn_next); imgBack = findViewById(R.id.img_back); + imgBefore = findViewById(R.id.img_before); + imgAfter = findViewById(R.id.img_after); + + beforeCrossButton = findViewById(R.id.before_cross_button); + afterCrossButton = findViewById(R.id.after_cross_button); + obClassArrayList.addAll(Helper.getList(Helper.observationClass, this, HseObservationClass.class)); obSubClassArrayList_temp.addAll(Helper.getList(Helper.observationSubClass, this, HseObservationSubClass.class)); observationClassAdapter = new ObservationClassAdapter(this, obClassArrayList); observationTextview.setAdapter(observationClassAdapter); - hseBuildingArrayList_temp.addAll(Helper.getList(Helper.hseBuildings, this, HseBuilding.class)); - hseFloorArrayList_temp.addAll(Helper.getList(Helper.hseFloors, this, HseFloor.class)); - - //Location -- Building - if (!hseBuildingArrayList_temp.isEmpty()) { - - List filteredUnitItems = hseBuildingArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); - - hseBuildingArrayList.clear(); - hseBuildingArrayList.addAll(filteredUnitItems); - buildingAdapter = new BuildingsAdapter(this, hseBuildingArrayList); - buildingTextview.setAdapter(buildingAdapter); - } - - //Sub Location -- floor - if (!hseFloorArrayList_temp.isEmpty()) { - - List filteredUnitItems = hseFloorArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); - - hseFloorArrayList.clear(); - hseFloorArrayList.addAll(filteredUnitItems); - floorsAdapter = new FloorsAdapter(this, hseFloorArrayList); - floorTextview.setAdapter(floorsAdapter); - } - //observation sub class items //for Unsafe //for condition @@ -206,20 +417,234 @@ public class ObservationOneActivity extends AppCompatActivity { //observationSubTextview.setAdapter(observationSubClassAdapter); } + @SuppressLint("MissingInflatedId") + public void alertForPictures(Context con) { + ViewGroup viewGroup = findViewById(android.R.id.content); + + TextView dialogCameraBtn, dialogGalleryBtn; + + AlertDialog.Builder builder = new AlertDialog.Builder(con); + View view1 = LayoutInflater.from(con).inflate(R.layout.custom_layout_for_image, viewGroup, false); + builder.setCancelable(false); + builder.setView(view1); + + dialogCameraBtn = view1.findViewById(R.id.dialog_camera_btn); + dialogGalleryBtn = view1.findViewById(R.id.dialog_gallery_btn); + + AlertDialog alertDialog = builder.create(); + alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + dialogCameraBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + alertDialog.dismiss(); + openCamera(); + + } + }); + + dialogGalleryBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + alertDialog.dismiss(); + openGallery(); + + } + }); + + alertDialog.show(); + } + + @AfterPermissionGranted(CAMERA_REQUEST) + public void openCamera() { + if (hasCameraPermission()) { + try { + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + File photoFile = null; + try { + photoFile = createImageFile(imgType); + } catch (IOException ex) { + // Error occurred while creating the File + } + + if (photoFile != null) { + Uri photoURI = FileProvider.getUriForFile(this, + "com.utopiaindustries.hseobservationsapp", + photoFile); + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); + //startActivityForResult(takePictureIntent, CAMERA_REQUEST); + cameraLauncher.launch(takePictureIntent); + } + } catch (ActivityNotFoundException e) { + Toast.makeText(this, "Camera app not found", Toast.LENGTH_SHORT).show(); + } + } else { + // Ask for one permission + String[] perms = {}; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.CAMERA}; + } else { + perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; + } + + EasyPermissions.requestPermissions(this, getString(R.string.rationale_camera), CAMERA_REQUEST, perms); + } + } + + @AfterPermissionGranted(GALLERY_REQUEST) + public void openGallery() { + if (hasGalleryPermission()) { + // Have permission, do the thing! + Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + // Start the Intent + //startActivityForResult(galleryIntent, GALLERY_REQUEST); + imagePickerLauncher.launch(galleryIntent); + } else { + // Ask for one permission + String[] perms = {}; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES}; + } else { + perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + + } + EasyPermissions.requestPermissions(this, getString(R.string.rationale_gallery), GALLERY_REQUEST, perms); + } + } + + private boolean hasGalleryPermission() { + String[] perms = {}; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES}; + } else { + perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + } + + return EasyPermissions.hasPermissions(this, perms); + } + + private boolean hasCameraPermission() { + String[] perms = {}; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + //Log.e("TIRAMISU: ","***"); + perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.CAMERA}; + } else { + //Log.e("Not-TIRAMISU: ","***"); + perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; + + } + + //Log.e("perms: ",""+perms); + return EasyPermissions.hasPermissions(this, perms); + } + + private File createImageFile(String imgType) throws IOException { + // Create an image file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + String imageFileName = "JPEG_" + timeStamp + "_"; + File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); + File image = File.createTempFile( + imageFileName, /* prefix */ + ".jpg", /* suffix */ + storageDir /* directory */ + ); + + if (imgType.equals("before")) { + filePathBefore = image.getAbsolutePath(); + } + else { + filePathAfter = image.getAbsolutePath(); + } + + return image; + } + + public void uriToByteArrayAsync( + Context context, + Uri uri, + int targetSizeInKB, + Consumer onSuccess, + Consumer onError + ) { + new Thread(() -> { + try { + int targetSizeInBytes = targetSizeInKB * 1024; + + // Load the image as a Bitmap without scaling + Bitmap bitmap; + try (InputStream inputStream = context.getContentResolver().openInputStream(uri)) { + bitmap = BitmapFactory.decodeStream(inputStream); + } + + if (bitmap == null) { + throw new IOException("Failed to decode image from URI."); + } + + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + int minQuality = 10; + int maxQuality = 100; + int quality = maxQuality; + + // Binary search for the best quality that meets the target size + while (minQuality <= maxQuality) { + byteArrayOutputStream.reset(); + bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteArrayOutputStream); + + int byteSize = byteArrayOutputStream.size(); + if (byteSize > targetSizeInBytes) { + maxQuality = quality - 1; + } else { + minQuality = quality + 1; + } + quality = (minQuality + maxQuality) / 2; + } + + onSuccess.accept(byteArrayOutputStream.toByteArray()); + } catch (IOException e) { + onError.accept(e); + } + }).start(); + } + + @Override + public void onPermissionsGranted(int requestCode, @NonNull List perms) { + + } + + @Override + public void onPermissionsDenied(int requestCode, @NonNull List perms) { + if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { + new AppSettingsDialog.Builder(this).build().show(); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, + @NonNull String[] permissions, + @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + // EasyPermissions handles the request result. + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); + } + + @Override + public void onRationaleAccepted(int requestCode) { + + } + + @Override + public void onRationaleDenied(int requestCode) { + + } + public boolean isValidate() { boolean returnValue = true; String message = ""; - if (floor.isEmpty()) { - message = "Please select floor."; - returnValue = false; - } - - if (building.isEmpty()) { - message = "Please select building."; - returnValue = false; - } - if (observationSubClass.isEmpty()) { message = "Please select observation sub class."; returnValue = false; @@ -236,4 +661,52 @@ public class ObservationOneActivity extends AppCompatActivity { return returnValue; } + + private void showPersistData() { + //locationSiteTextview.post(() -> locationSiteTextview.setText(Preference.getMyStringPref(Helper.project_file, Helper.locationSiteName, getActivity()), false)); + observationTextview.post(() -> observationTextview.setText(StorageManager.getInstance().getObservationsModel().get(0).getHseObservationName(), false)); + observationSubTextview.post(() -> observationSubTextview.setText(StorageManager.getInstance().getObservationsModel().get(0).getHseObservationSubClassName(), false)); + + if (!obSubClassArrayList_temp.isEmpty()) { + + List filteredUnitItems = obSubClassArrayList_temp.stream() + .filter(item -> Objects.equals(item.getObservationClassId(), StorageManager.getInstance().getObservationsModel().get(0).getObservationClassId())) + .collect(Collectors.toList()); + + obSubClassArrayList.clear(); + obSubClassArrayList.addAll(filteredUnitItems); + observationSubClassAdapter = new ObservationSubClassAdapter(ObservationOneActivity.this, filteredUnitItems); + observationSubTextview.setAdapter(observationSubClassAdapter); + + } + + if (StorageManager.getInstance().getObservationsModel().get(0).getBeforePictures() != null + && !StorageManager.getInstance().getObservationsModel().get(0).getBeforePictures().isEmpty()) { + Glide.with(this) + .load(StorageManager.getInstance().getObservationsModel().get(0).getBeforePictures().get(0)) + .placeholder(R.drawable.img_load) + .apply(new RequestOptions().centerCrop()) + .into(imgBefore); + } + + if (StorageManager.getInstance().getObservationsModel().get(0).getAfterPictures() != null + && !StorageManager.getInstance().getObservationsModel().get(0).getAfterPictures().isEmpty()) { + Glide.with(this) + .load(StorageManager.getInstance().getObservationsModel().get(0).getAfterPictures().get(0)) // Glide will handle the decoding and placeholder + .placeholder(R.drawable.img_load) + .apply(new RequestOptions().centerCrop()) + .into(imgAfter); + } + + } + + @Override + protected void onResume() { + super.onResume(); + + if (StorageManager.getInstance().getObservationsModel() != null && + !StorageManager.getInstance().getObservationsModel().isEmpty()) { + showPersistData(); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationThreeActivity.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationThreeActivity.java index d62e024..255692a 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationThreeActivity.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationThreeActivity.java @@ -47,13 +47,12 @@ import java.util.List; public class ObservationThreeActivity extends AppCompatActivity { - RadioGroup rg1; + ImageView imgBack; Button btnSubmit, btnDraft; - EditText etDescription; - String obStatus = ""; - LoginViewModel loginViewModel; + + @Override protected void onCreate(Bundle savedInstanceState) { @@ -75,42 +74,10 @@ public class ObservationThreeActivity extends AppCompatActivity { } }); - etDescription.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - StorageManager.getInstance().getObservationsModel().get(0).setDescription(s.toString()); - } - - @Override - public void afterTextChanged(Editable s) { - - } - }); - - rg1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() - { - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.rb_open) { - obStatus = "true"; - StorageManager.getInstance().getObservationsModel().get(0).setObservationStatus(true); - } else if (checkedId == R.id.rb_closed) { - obStatus = "false"; - StorageManager.getInstance().getObservationsModel().get(0).setObservationStatus(false); - } - } - }); - btnSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (isValidate()) { - alertReportSubmit(ObservationThreeActivity.this); - } + } }); @@ -124,95 +91,15 @@ public class ObservationThreeActivity extends AppCompatActivity { private void initializeLayouts() { - rg1 = findViewById(R.id.rg1); imgBack = findViewById(R.id.img_back); - etDescription = findViewById(R.id.et_description); - etDescription.setImeOptions(EditorInfo.IME_ACTION_DONE); - etDescription.setRawInputType(InputType.TYPE_CLASS_TEXT); btnSubmit = findViewById(R.id.btn_submit); btnDraft = findViewById(R.id.btn_draft); - loginViewModel = new ViewModelProvider(this).get(LoginViewModel.class); - loginViewModel.getLoadingState().observe(this, isLoading -> { - - if (isLoading != null && isLoading) { - showProgressDialog(); - } else { - dismissProgressDialog(); - } - }); - - loginViewModel.getErrorMessage().observe(this, errorResponse -> { - Toast.makeText(this, errorResponse, Toast.LENGTH_SHORT).show(); - }); - - loginViewModel.getUserSaveLiveData().observe(this, hseSaveResponse -> { - if (hseSaveResponse != null && hseSaveResponse.getStatus().equals("success")) { - Toast.makeText(this, "Reported Submitted", Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(ObservationThreeActivity.this, DashboardActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); - } - }); } - public void alertReportSubmit(Context con) { - ViewGroup viewGroup = findViewById(android.R.id.content); - TextView dialogOkBtn, dialogCancelBtn; - - AlertDialog.Builder builder = new AlertDialog.Builder(con); - View view1 = LayoutInflater.from(con).inflate(R.layout.custom_layout_for_report_submission, viewGroup, false); - builder.setCancelable(false); - builder.setView(view1); - - dialogOkBtn = view1.findViewById(R.id.dialogOkBtn); - dialogCancelBtn = view1.findViewById(R.id.dialogCancelBtn); - - AlertDialog alertDialog = builder.create(); - alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - dialogOkBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - alertDialog.dismiss(); - - List observationList = StorageManager.getInstance().getObservationsModel(); - HseReportRequest observationRequest = new HseReportRequest<>(); - observationRequest.setObservation_date(StorageManager.getInstance().getObservation_date()); - observationRequest.setUserId(StorageManager.getInstance().getUserId()); - observationRequest.setSite_id(StorageManager.getInstance().getSite_id()); - observationRequest.setSupervisorId(StorageManager.getInstance().getSupervisorId()); - observationRequest.setSupervisorName(StorageManager.getInstance().getSupervisorName()); - observationRequest.setShift(StorageManager.getInstance().getShift()); - observationRequest.setRecordTypeId(StorageManager.getInstance().getRecordTypeId()); - observationRequest.setReportData(observationList); - - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String jsonRequest = gson.toJson(observationRequest); - Log.e("RequestModel JSON", jsonRequest); - - loginViewModel.saveHSEData(observationRequest); - } - }); - - dialogCancelBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - alertDialog.dismiss(); - //Toast.makeText(con, "Cancel", Toast.LENGTH_SHORT).show(); - - } - }); - - alertDialog.show(); - } private byte[] convertReportToByteArray() { byte[] bytes = new byte[0]; @@ -242,33 +129,13 @@ public class ObservationThreeActivity extends AppCompatActivity { return bytes; } - public void showProgressDialog() { - ProgressDialogFragment progressDialog = new ProgressDialogFragment(); - progressDialog.setCancelable(false); - progressDialog.show(getSupportFragmentManager(), "progressDialog"); - } - public void dismissProgressDialog() { - ProgressDialogFragment progressDialog = (ProgressDialogFragment) - getSupportFragmentManager().findFragmentByTag("progressDialog"); - if (progressDialog != null) { - progressDialog.dismiss(); - } - } public boolean isValidate() { boolean returnValue = true; String message = ""; - if (etDescription.getText().toString().isEmpty()) { - message = "Please enter description."; - returnValue = false; - } - if (obStatus.isEmpty()) { - message = "Please select Status."; - returnValue = false; - } if (!returnValue) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationTwoActivity.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationTwoActivity.java index b9660bf..f759afc 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationTwoActivity.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationTwoActivity.java @@ -14,13 +14,21 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; +import android.text.Editable; +import android.text.InputType; +import android.text.TextWatcher; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.AutoCompleteTextView; import android.widget.Button; +import android.widget.EditText; import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; @@ -34,15 +42,23 @@ import androidx.core.content.FileProvider; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import androidx.lifecycle.ViewModelProvider; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.utopiaindustries.hseobservationsapp.R; +import com.utopiaindustries.hseobservationsapp.activities.DashboardActivity; import com.utopiaindustries.hseobservationsapp.adapters.DepartmentAdapter; import com.utopiaindustries.hseobservationsapp.adapters.RiskLevelAdapter; import com.utopiaindustries.hseobservationsapp.helper.Helper; import com.utopiaindustries.hseobservationsapp.models.HseData.HseDepartment; +import com.utopiaindustries.hseobservationsapp.utils.ProgressDialogFragment; +import com.utopiaindustries.hseobservationsapp.utils.StorageManager.HseReportRequest; +import com.utopiaindustries.hseobservationsapp.utils.StorageManager.ObservationModel; import com.utopiaindustries.hseobservationsapp.utils.StorageManager.StorageManager; +import com.utopiaindustries.hseobservationsapp.viewmodels.LoginViewModel; import java.io.ByteArrayOutputStream; import java.io.File; @@ -60,175 +76,22 @@ import pub.devrel.easypermissions.AfterPermissionGranted; import pub.devrel.easypermissions.AppSettingsDialog; import pub.devrel.easypermissions.EasyPermissions; -public class ObservationTwoActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks, - EasyPermissions.RationaleCallbacks{ +public class ObservationTwoActivity extends AppCompatActivity { private Button btnNext; ImageView imgBack; - ImageView imgBefore, beforeCrossButton, imgAfter, afterCrossButton; - private AutoCompleteTextView departmentTextview, riskLevelTextview; - private DepartmentAdapter departmentAdapter; + private AutoCompleteTextView riskLevelTextview; + private RiskLevelAdapter riskLevelAdapter; - private ArrayList departmentArrayList = new ArrayList<>(); - private ArrayList departmentArrayList_temp = new ArrayList<>(); - private ArrayList riskLevelArrayList = new ArrayList<>(); - - private static final int CAMERA_REQUEST = 100; - private static final int GALLERY_REQUEST = 200; - - String filePathBefore = "no_pic"; - String filePathAfter = "no_pic"; - String departmentName = ""; String riskLevel = ""; - - String imgType = ""; - - // Activity Result Launcher for Gallery - private final ActivityResultLauncher imagePickerLauncher = - registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { - if (result.getResultCode() == RESULT_OK && result.getData() != null) { - Uri selectedImage = result.getData().getData(); - - if (imgType.equalsIgnoreCase("before")) { - - uriToByteArrayAsync( - this, - selectedImage, - 100, // Target size in KB - compressedImage -> { - // Handle the compressed image here, e.g., display it - runOnUiThread(() -> { - Glide.with(this) - .load(compressedImage) // Glide will handle the decoding and placeholder - .placeholder(R.drawable.img_load) - .apply(new RequestOptions().centerCrop()) - .into(imgBefore); - - List tempList = new ArrayList<>(); - tempList.add(compressedImage); - StorageManager.getInstance().getObservationsModel().get(0).setBeforePictures(tempList); - }); - }, - error -> { - // Handle any errors - runOnUiThread(() -> { - Toast.makeText(this, "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); - }); - } - ); - - } - else { - uriToByteArrayAsync( - this, - selectedImage, - 100, // Target size in KB - compressedImage -> { - // Handle the compressed image here, e.g., display it - runOnUiThread(() -> { - Glide.with(this) - .load(compressedImage) // Glide will handle the decoding and placeholder - .placeholder(R.drawable.img_load) - .apply(new RequestOptions().centerCrop()) - .into(imgAfter); - - List tempList = new ArrayList<>(); - tempList.add(compressedImage); - StorageManager.getInstance().getObservationsModel().get(0).setAfterPictures(tempList); - }); - }, - error -> { - // Handle any errors - runOnUiThread(() -> { - Toast.makeText(this, "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); - }); - } - ); - } - } - else if (result.getResultCode() == RESULT_CANCELED) { - Toast.makeText(this, "Gallery Selection Cancelled!", Toast.LENGTH_SHORT).show(); - } - else { - Toast.makeText(this, "Gallery Selection Cancelled!", Toast.LENGTH_SHORT).show(); - } - }); - - // Activity Result Launcher for Camera - private final ActivityResultLauncher cameraLauncher = - registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { - - if (result.getResultCode() == RESULT_OK) { - - if (imgType.equalsIgnoreCase("before")) { - Uri contentUri = Uri.fromFile(new File((filePathBefore))); - - uriToByteArrayAsync( - this, - contentUri, - 100, // Target size in KB - compressedImage -> { - // Handle the compressed image here, e.g., display it - runOnUiThread(() -> { - Glide.with(this) - .load(contentUri) // Glide will handle the decoding and placeholder - .placeholder(R.drawable.img_load) - .apply(new RequestOptions().centerCrop()) - .into(imgBefore); - - List tempList = new ArrayList<>(); - tempList.add(compressedImage); - StorageManager.getInstance().getObservationsModel().get(0).setBeforePictures(tempList); - }); - }, - error -> { - // Handle any errors - runOnUiThread(() -> { - Toast.makeText(this, "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); - }); - } - ); - } - else { - Uri contentUri = Uri.fromFile(new File((filePathAfter))); - - uriToByteArrayAsync( - this, - contentUri, - 100, // Target size in KB - compressedImage -> { - // Handle the compressed image here, e.g., display it - runOnUiThread(() -> { - Glide.with(this) - .load(contentUri) // Glide will handle the decoding and placeholder - .placeholder(R.drawable.img_load) - .apply(new RequestOptions().centerCrop()) - .into(imgAfter); - - List tempList = new ArrayList<>(); - tempList.add(compressedImage); - StorageManager.getInstance().getObservationsModel().get(0).setAfterPictures(tempList); - }); - }, - error -> { - // Handle any errors - runOnUiThread(() -> { - Toast.makeText(this, "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); - }); - } - ); - } - } - else if (result.getResultCode() == RESULT_CANCELED) { - Toast.makeText(this, "Camera capture failed!", Toast.LENGTH_SHORT).show(); - } - else { - Toast.makeText(this, "Camera capture failed!", Toast.LENGTH_SHORT).show(); - } - }); + RadioGroup rg1; + RadioButton rb_open, rb_closed; + EditText etDescription; + String obStatus = ""; + LoginViewModel loginViewModel; @Override protected void onCreate(Bundle savedInstanceState) { @@ -254,54 +117,12 @@ public class ObservationTwoActivity extends AppCompatActivity implements EasyPer @Override public void onClick(View v) { if (isValidate()) { - Intent intent = new Intent(ObservationTwoActivity.this, ObservationThreeActivity.class); - startActivity(intent); + alertReportSubmit(ObservationTwoActivity.this); } } }); - imgBefore.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - imgType = "before"; - alertForPictures(ObservationTwoActivity.this); - } - }); - - imgAfter.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - imgType = "after"; - alertForPictures(ObservationTwoActivity.this); - } - }); - - beforeCrossButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - imgBefore.setImageResource(R.drawable.icon_image); - StorageManager.getInstance().getObservationsModel().get(0).getBeforePictures().clear(); - } - }); - - afterCrossButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - imgAfter.setImageResource(R.drawable.icon_image); - StorageManager.getInstance().getObservationsModel().get(0).getAfterPictures().clear(); - } - }); - - departmentTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - departmentName = departmentArrayList.get(position).getTitle(); - StorageManager.getInstance().getObservationsModel().get(0).setDepartmentId(departmentArrayList.get(position).getId()); - - } - }); - riskLevelTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { @@ -311,77 +132,136 @@ public class ObservationTwoActivity extends AppCompatActivity implements EasyPer } }); + + etDescription.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + StorageManager.getInstance().getObservationsModel().get(0).setDescription(s.toString()); + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + rg1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() + { + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.rb_open) { + obStatus = "true"; + StorageManager.getInstance().getObservationsModel().get(0).setObservationStatus(true); + } else if (checkedId == R.id.rb_closed) { + obStatus = "false"; + StorageManager.getInstance().getObservationsModel().get(0).setObservationStatus(false); + } + } + }); } private void initializeLayout() { btnNext = findViewById(R.id.btn_next); imgBack = findViewById(R.id.img_back); + rg1 = findViewById(R.id.rg1); + etDescription = findViewById(R.id.et_description); + etDescription.setImeOptions(EditorInfo.IME_ACTION_DONE); + etDescription.setRawInputType(InputType.TYPE_CLASS_TEXT); - imgBefore = findViewById(R.id.img_before); - imgAfter = findViewById(R.id.img_after); + rb_open = findViewById(R.id.rb_open); + rb_closed = findViewById(R.id.rb_closed); - beforeCrossButton = findViewById(R.id.before_cross_button); - afterCrossButton = findViewById(R.id.after_cross_button); - - departmentTextview = findViewById(R.id.department_textview); riskLevelTextview = findViewById(R.id.risk_textview); - departmentArrayList_temp.addAll(Helper.getList(Helper.hseDepartment, this, HseDepartment.class)); - - if (!departmentArrayList_temp.isEmpty()) { - - List filteredUnitItems = departmentArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); - - departmentArrayList.clear(); - departmentArrayList.addAll(filteredUnitItems); - departmentAdapter = new DepartmentAdapter(this, departmentArrayList); - departmentTextview.setAdapter(departmentAdapter); - } - riskLevelArrayList.add("High"); riskLevelArrayList.add("Medium"); riskLevelArrayList.add("Low"); riskLevelAdapter = new RiskLevelAdapter(this, riskLevelArrayList); riskLevelTextview.setAdapter(riskLevelAdapter); + + loginViewModel = new ViewModelProvider(this).get(LoginViewModel.class); + + loginViewModel.getLoadingState().observe(this, isLoading -> { + + if (isLoading != null && isLoading) { + showProgressDialog(); + } else { + dismissProgressDialog(); + } + }); + + loginViewModel.getErrorMessage().observe(this, errorResponse -> { + Toast.makeText(this, errorResponse, Toast.LENGTH_SHORT).show(); + }); + + loginViewModel.getUserSaveLiveData().observe(this, hseSaveResponse -> { + if (hseSaveResponse != null && hseSaveResponse.getStatus().equals("success")) { + Toast.makeText(this, "Reported Submitted", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(ObservationTwoActivity.this, DashboardActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); + } + }); } - @SuppressLint("MissingInflatedId") - public void alertForPictures(Context con) { + public void alertReportSubmit(Context con) { ViewGroup viewGroup = findViewById(android.R.id.content); - TextView dialogCameraBtn, dialogGalleryBtn; + TextView dialogOkBtn, dialogCancelBtn; AlertDialog.Builder builder = new AlertDialog.Builder(con); - View view1 = LayoutInflater.from(con).inflate(R.layout.custom_layout_for_image, viewGroup, false); + View view1 = LayoutInflater.from(con).inflate(R.layout.custom_layout_for_report_submission, viewGroup, false); builder.setCancelable(false); builder.setView(view1); - dialogCameraBtn = view1.findViewById(R.id.dialog_camera_btn); - dialogGalleryBtn = view1.findViewById(R.id.dialog_gallery_btn); + dialogOkBtn = view1.findViewById(R.id.dialogOkBtn); + dialogCancelBtn = view1.findViewById(R.id.dialogCancelBtn); AlertDialog alertDialog = builder.create(); alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - dialogCameraBtn.setOnClickListener(new View.OnClickListener() { + dialogOkBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { alertDialog.dismiss(); - openCamera(); + List observationList = StorageManager.getInstance().getObservationsModel(); + HseReportRequest observationRequest = new HseReportRequest<>(); + observationRequest.setObservation_date(StorageManager.getInstance().getObservation_date()); + observationRequest.setUserId(StorageManager.getInstance().getUserId()); + observationRequest.setSite_id(StorageManager.getInstance().getSite_id()); + observationRequest.setSupervisorId(StorageManager.getInstance().getSupervisorId()); + observationRequest.setSupervisorName(StorageManager.getInstance().getSupervisorName()); + observationRequest.setShift(StorageManager.getInstance().getShift()); + observationRequest.setDepartmentId(StorageManager.getInstance().getDepartmentId()); + observationRequest.setBuildingId(StorageManager.getInstance().getBuildingId()); + observationRequest.setFloorId(StorageManager.getInstance().getFloorId()); + observationRequest.setRecordTypeId(StorageManager.getInstance().getRecordTypeId()); + observationRequest.setReportData(observationList); + + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + String jsonRequest = gson.toJson(observationRequest); + Log.e("RequestModel JSON", jsonRequest); + + loginViewModel.saveHSEData(observationRequest); } }); - dialogGalleryBtn.setOnClickListener(new View.OnClickListener() { + dialogCancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { alertDialog.dismiss(); - openGallery(); + //Toast.makeText(con, "Cancel", Toast.LENGTH_SHORT).show(); } }); @@ -389,201 +269,22 @@ public class ObservationTwoActivity extends AppCompatActivity implements EasyPer alertDialog.show(); } - @AfterPermissionGranted(CAMERA_REQUEST) - public void openCamera() { - if (hasCameraPermission()) { - try { - Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - File photoFile = null; - try { - photoFile = createImageFile(imgType); - } catch (IOException ex) { - // Error occurred while creating the File - } - - if (photoFile != null) { - Uri photoURI = FileProvider.getUriForFile(this, - "com.utopiaindustries.hseobservationsapp", - photoFile); - takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); - //startActivityForResult(takePictureIntent, CAMERA_REQUEST); - cameraLauncher.launch(takePictureIntent); - } - } catch (ActivityNotFoundException e) { - Toast.makeText(this, "Camera app not found", Toast.LENGTH_SHORT).show(); - } - } else { - // Ask for one permission - String[] perms = {}; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.CAMERA}; - } else { - perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; - } - - EasyPermissions.requestPermissions(this, getString(R.string.rationale_camera), CAMERA_REQUEST, perms); - } - } - - @AfterPermissionGranted(GALLERY_REQUEST) - public void openGallery() { - if (hasGalleryPermission()) { - // Have permission, do the thing! - Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); - // Start the Intent - //startActivityForResult(galleryIntent, GALLERY_REQUEST); - imagePickerLauncher.launch(galleryIntent); - } else { - // Ask for one permission - String[] perms = {}; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES}; - } else { - perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; - - } - EasyPermissions.requestPermissions(this, getString(R.string.rationale_gallery), GALLERY_REQUEST, perms); - } - } - - private boolean hasGalleryPermission() { - String[] perms = {}; - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES}; - } else { - perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; - } - - return EasyPermissions.hasPermissions(this, perms); - } - - private boolean hasCameraPermission() { - String[] perms = {}; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - //Log.e("TIRAMISU: ","***"); - perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.CAMERA}; - } else { - //Log.e("Not-TIRAMISU: ","***"); - perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; - - } - - //Log.e("perms: ",""+perms); - return EasyPermissions.hasPermissions(this, perms); - } - - private File createImageFile(String imgType) throws IOException { - // Create an image file name - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); - String imageFileName = "JPEG_" + timeStamp + "_"; - File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); - File image = File.createTempFile( - imageFileName, /* prefix */ - ".jpg", /* suffix */ - storageDir /* directory */ - ); - - if (imgType.equals("before")) { - filePathBefore = image.getAbsolutePath(); - } - else { - filePathAfter = image.getAbsolutePath(); - } - - return image; - } - - public void uriToByteArrayAsync( - Context context, - Uri uri, - int targetSizeInKB, - Consumer onSuccess, - Consumer onError - ) { - new Thread(() -> { - try { - int targetSizeInBytes = targetSizeInKB * 1024; - - // Load the image as a Bitmap without scaling - Bitmap bitmap; - try (InputStream inputStream = context.getContentResolver().openInputStream(uri)) { - bitmap = BitmapFactory.decodeStream(inputStream); - } - - if (bitmap == null) { - throw new IOException("Failed to decode image from URI."); - } - - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - int minQuality = 10; - int maxQuality = 100; - int quality = maxQuality; - - // Binary search for the best quality that meets the target size - while (minQuality <= maxQuality) { - byteArrayOutputStream.reset(); - bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteArrayOutputStream); - - int byteSize = byteArrayOutputStream.size(); - if (byteSize > targetSizeInBytes) { - maxQuality = quality - 1; - } else { - minQuality = quality + 1; - } - quality = (minQuality + maxQuality) / 2; - } - - onSuccess.accept(byteArrayOutputStream.toByteArray()); - } catch (IOException e) { - onError.accept(e); - } - }).start(); - } - - @Override - public void onPermissionsGranted(int requestCode, @NonNull List perms) { - - } - - @Override - public void onPermissionsDenied(int requestCode, @NonNull List perms) { - if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { - new AppSettingsDialog.Builder(this).build().show(); - } - } - - @Override - public void onRequestPermissionsResult(int requestCode, - @NonNull String[] permissions, - @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - - // EasyPermissions handles the request result. - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); - } - - @Override - public void onRationaleAccepted(int requestCode) { - - } - - @Override - public void onRationaleDenied(int requestCode) { - - } - public boolean isValidate() { boolean returnValue = true; String message = ""; - if (riskLevel.isEmpty()) { - message = "Please select Risk level description."; + if (etDescription.getText().toString().isEmpty()) { + message = "Please enter description."; returnValue = false; } - if (departmentName.isEmpty()) { - message = "Please select Department."; + if (obStatus.isEmpty()) { + message = "Please select Status."; + returnValue = false; + } + + if (riskLevel.isEmpty()) { + message = "Please select Risk level description."; returnValue = false; } @@ -593,4 +294,41 @@ public class ObservationTwoActivity extends AppCompatActivity implements EasyPer return returnValue; } + + public void showProgressDialog() { + ProgressDialogFragment progressDialog = new ProgressDialogFragment(); + progressDialog.setCancelable(false); + progressDialog.show(getSupportFragmentManager(), "progressDialog"); + } + + public void dismissProgressDialog() { + ProgressDialogFragment progressDialog = (ProgressDialogFragment) + getSupportFragmentManager().findFragmentByTag("progressDialog"); + if (progressDialog != null) { + progressDialog.dismiss(); + } + } + + @Override + protected void onResume() { + super.onResume(); + + if (!StorageManager.getInstance().getObservationsModel().isEmpty()) { + showPersistData(); + } + } + + private void showPersistData() { + riskLevelTextview.post(() -> riskLevelTextview.setText(StorageManager.getInstance().getObservationsModel().get(0).getRiskLevel(), false)); + + if(StorageManager.getInstance().getObservationsModel().get(0).isObservationStatus()) { + rb_open.setChecked(true); + } + else if (!StorageManager.getInstance().getObservationsModel().get(0).isObservationStatus()) { + rb_closed.setChecked(true); + } + + etDescription.setText(StorageManager.getInstance().getObservationsModel().get(0).getDescription()); + + } } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitOneActivity.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitOneActivity.java index 62cf111..5c4075d 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitOneActivity.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitOneActivity.java @@ -1,14 +1,20 @@ package com.utopiaindustries.hseobservationsapp.activities.PermitToWorkForms; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; 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.CheckBox; import android.widget.ImageView; +import android.widget.TextView; import android.widget.Toast; import androidx.activity.EdgeToEdge; @@ -22,6 +28,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.textfield.TextInputLayout; import com.utopiaindustries.hseobservationsapp.R; +import com.utopiaindustries.hseobservationsapp.activities.ObservationForms.ObservationOneActivity; import com.utopiaindustries.hseobservationsapp.activities.ObservationForms.ObservationThreeActivity; import com.utopiaindustries.hseobservationsapp.activities.ObservationForms.ObservationTwoActivity; import com.utopiaindustries.hseobservationsapp.adapters.BuildingsAdapter; @@ -49,32 +56,20 @@ public class PermitOneActivity extends AppCompatActivity { private Button btnNext; ImageView imgBack; - private AutoCompleteTextView locationTextview, subLocationTextView, ptwTypeTextView, - ptwSubTypeTextView, workingTeamTextView, departmentTextview; + private AutoCompleteTextView ptwTypeTextView, + ptwSubTypeTextView, workingTeamTextView; private TextInputLayout ptwTextInputLayout; - private DepartmentAdapter departmentAdapter; - private ArrayList departmentArrayList_temp = new ArrayList<>(); - private ArrayList departmentArrayList = new ArrayList<>(); - - private ArrayList locationArrayList_temp = new ArrayList<>(); - private ArrayList locationArrayList = new ArrayList<>(); - private BuildingsAdapter buildingAdapter; - - private ArrayList subLocationArrayList_temp = new ArrayList<>(); - private ArrayList subLocationArrayList = new ArrayList<>(); - private FloorsAdapter floorsAdapter; - private ArrayList ptwTypeArrayList = new ArrayList<>(); private HsePtwTypeAdapter ptwTypeAdapter; - private ArrayList workingTeamArrayList = new ArrayList<>(); private WorkingTeamAdapter workingTeamAdapter; - String location = "", subLocation = "", ptwType = "", workingTeam = ""; - String departmentName = ""; + String ptwType = "", workingTeam = ""; + private CheckBox checkboxCompany, checkboxContractor; + String workingParty = ""; @Override protected void onCreate(Bundle savedInstanceState) { @@ -92,7 +87,7 @@ public class PermitOneActivity extends AppCompatActivity { imgBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + alertExit(PermitOneActivity.this); } }); @@ -106,22 +101,6 @@ public class PermitOneActivity extends AppCompatActivity { } }); - locationTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - location = locationArrayList.get(position).getTitle(); - StorageManager.getInstance().getPermitToWorkModel().get(0).setLocationId(locationArrayList.get(position).getId()); - } - }); - - subLocationTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - subLocation = subLocationArrayList.get(position).getTitle(); - StorageManager.getInstance().getPermitToWorkModel().get(0).setSubLocationId(subLocationArrayList.get(position).getId()); - } - }); - ptwTypeTextView.setOnClickListener(v -> { showMultiSelectDialog(ptwTypeArrayList, ptwTypeTextView); }); @@ -138,18 +117,72 @@ public class PermitOneActivity extends AppCompatActivity { public void onItemClick(AdapterView parent, View view, int position, long id) { workingTeam = workingTeamArrayList.get(position).getTitle(); StorageManager.getInstance().getPermitToWorkModel().get(0).setWorkingTeamId(workingTeamArrayList.get(position).getId()); + StorageManager.getInstance().getPermitToWorkModel().get(0).setWorkingTeamName(workingTeamArrayList.get(position).getTitle()); } }); - departmentTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { + checkboxCompany.setOnClickListener(new View.OnClickListener() { @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - departmentName = departmentArrayList.get(position).getTitle(); - StorageManager.getInstance().getPermitToWorkModel().get(0).setDepartmentId(departmentArrayList.get(position).getId()); + public void onClick(View v) { + if (checkboxCompany.isChecked()) { + checkboxContractor.setChecked(false); + workingParty = "Company"; + StorageManager.getInstance().getPermitToWorkModel().get(0).setWorkingPartyType("Company"); + } + } + }); + + checkboxContractor.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (checkboxContractor.isChecked()) { + checkboxCompany.setChecked(false); + workingParty = "Contractor"; + StorageManager.getInstance().getPermitToWorkModel().get(0).setWorkingPartyType("Contractor"); + } + } + }); + + } + + public void alertExit(Context con) { + ViewGroup viewGroup = findViewById(android.R.id.content); + + TextView dialogOkBtn, dialogCancelBtn; + + AlertDialog.Builder builder = new AlertDialog.Builder(con); + View view1 = LayoutInflater.from(con).inflate(R.layout.custom_layout_for_exit, viewGroup, false); + builder.setCancelable(false); + builder.setView(view1); + + dialogOkBtn = view1.findViewById(R.id.dialogOkBtn); + dialogCancelBtn = view1.findViewById(R.id.dialogCancelBtn); + + AlertDialog alertDialog = builder.create(); + alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + dialogOkBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + alertDialog.dismiss(); + + StorageManager.getInstance().clearPermitToWorkModule(); + finish(); } }); + dialogCancelBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + alertDialog.dismiss(); + + } + }); + + alertDialog.show(); } private void initializeLayout() { @@ -157,11 +190,11 @@ public class PermitOneActivity extends AppCompatActivity { btnNext = findViewById(R.id.btn_next); imgBack = findViewById(R.id.img_back); - locationTextview = findViewById(R.id.location_textview); - subLocationTextView = findViewById(R.id.sub_location_textview); + checkboxCompany = findViewById(R.id.checkbox_company); + checkboxContractor = findViewById(R.id.checkbox_contractor); + ptwTypeTextView = findViewById(R.id.ptw_type_textview); ptwTextInputLayout = findViewById(R.id.ptw_type_input); - departmentTextview = findViewById(R.id.department_textview); ptwTypeTextView.setFocusable(false); ptwTypeTextView.setCursorVisible(false); @@ -170,51 +203,6 @@ public class PermitOneActivity extends AppCompatActivity { workingTeamTextView = findViewById(R.id.working_team_textview); - //department - departmentArrayList_temp.addAll(Helper.getList(Helper.hseDepartment, this, HseDepartment.class)); - - if (!departmentArrayList_temp.isEmpty()) { - - List filteredUnitItems = departmentArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); - - departmentArrayList.clear(); - departmentArrayList.addAll(filteredUnitItems); - departmentAdapter = new DepartmentAdapter(this, departmentArrayList); - departmentTextview.setAdapter(departmentAdapter); - } - - locationArrayList_temp.addAll(Helper.getList(Helper.hseBuildings, this, HseBuilding.class)); - - //Location -- Building - if (!locationArrayList_temp.isEmpty()) { - - List filteredUnitItems = locationArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); - - locationArrayList.clear(); - locationArrayList.addAll(filteredUnitItems); - buildingAdapter = new BuildingsAdapter(this, locationArrayList); - locationTextview.setAdapter(buildingAdapter); - } - - subLocationArrayList_temp.addAll(Helper.getList(Helper.hseFloors, this, HseFloor.class)); - - //Sub Location -- floor - if (!subLocationArrayList_temp.isEmpty()) { - - List filteredUnitItems = subLocationArrayList_temp.stream() - .filter(item -> Objects.equals(item.getSiteId(), StorageManager.getInstance().getSite_id())) - .collect(Collectors.toList()); - - subLocationArrayList.clear(); - subLocationArrayList.addAll(filteredUnitItems); - floorsAdapter = new FloorsAdapter(this, subLocationArrayList); - subLocationTextView.setAdapter(floorsAdapter); - } - ptwTypeArrayList.addAll(Helper.getList(Helper.hsePtwType, this, HsePtwType.class)); workingTeamArrayList.addAll(Helper.getList(Helper.hseWorkingTeams, this, HseWorkingTeam.class)); @@ -227,30 +215,16 @@ public class PermitOneActivity extends AppCompatActivity { boolean returnValue = true; String message = ""; - /*if (workingTeam.isEmpty()) { - message = "Please select working type."; + if (workingParty.isEmpty()) { + message = "Please select Working Party."; returnValue = false; - }*/ + } if (ptwType.isEmpty()) { message = "Please select ptw Type."; returnValue = false; } - if (subLocation.isEmpty()) { - message = "Please select sub location."; - returnValue = false; - } - - if (location.isEmpty()) { - message = "Please select location."; - returnValue = false; - } - if (departmentName.isEmpty()) { - message = "Please select Department."; - returnValue = false; - } - if (!returnValue) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } @@ -280,6 +254,7 @@ public class PermitOneActivity extends AppCompatActivity { textView.setText(selectedTitles); ptwType = selectedTitles; StorageManager.getInstance().getPermitToWorkModel().get(0).setTypeId(selectedTypeSubType); + StorageManager.getInstance().getPermitToWorkModel().get(0).setTypeName(selectedTitles); }); builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); @@ -288,4 +263,28 @@ public class PermitOneActivity extends AppCompatActivity { dialog.show(); } + @Override + protected void onResume() { + super.onResume(); + + if (StorageManager.getInstance().getPermitToWorkModel() != null && + !StorageManager.getInstance().getPermitToWorkModel().isEmpty()) { + showPersistData(); + } + } + + private void showPersistData() { + ptwTypeTextView.post(() -> ptwTypeTextView.setText(StorageManager.getInstance().getPermitToWorkModel().get(0).getTypeName(), false)); + workingTeamTextView.post(() -> workingTeamTextView.setText(StorageManager.getInstance().getPermitToWorkModel().get(0).getWorkingTeamName(), false)); + + if (StorageManager.getInstance().getPermitToWorkModel().get(0).getWorkingPartyType() != null + && StorageManager.getInstance().getPermitToWorkModel().get(0).getWorkingPartyType().equals("Company")) { + checkboxCompany.setChecked(true); + } else if (StorageManager.getInstance().getPermitToWorkModel().get(0).getWorkingPartyType() != null + && StorageManager.getInstance().getPermitToWorkModel().get(0).getWorkingPartyType().equals("Contractor")) { + checkboxContractor.setChecked(true); + } + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitTwoActivity.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitTwoActivity.java index f68bd0b..96788fe 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitTwoActivity.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitTwoActivity.java @@ -29,6 +29,7 @@ import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; +import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; @@ -80,7 +81,7 @@ import pub.devrel.easypermissions.EasyPermissions; public class PermitTwoActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks, EasyPermissions.RationaleCallbacks{ - private CheckBox checkboxCompany, checkboxContractor; + RecyclerView ptwRecyclerView; PTWImageAdapter imagePaperAdapter; String paperFilePath = "no_pic"; @@ -93,8 +94,8 @@ public class PermitTwoActivity extends AppCompatActivity implements EasyPermissi Button btnSubmit; EditText etDescription; LoginViewModel loginViewModel; - NestedScrollView scrollView; - String workingParty = ""; + ScrollView scrollView; + // Activity Result Launcher for Gallery private final ActivityResultLauncher imagePickerLauncher = @@ -201,27 +202,7 @@ public class PermitTwoActivity extends AppCompatActivity implements EasyPermissi initializeLayouts(); - checkboxCompany.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (checkboxCompany.isChecked()) { - checkboxContractor.setChecked(false); - workingParty = "Company"; - StorageManager.getInstance().getPermitToWorkModel().get(0).setWorkingPartyType("Company"); - } - } - }); - checkboxContractor.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (checkboxContractor.isChecked()) { - checkboxCompany.setChecked(false); - workingParty = "Contractor"; - StorageManager.getInstance().getPermitToWorkModel().get(0).setWorkingPartyType("Contractor"); - } - } - }); imgUpload.setOnClickListener(new View.OnClickListener() { @Override @@ -233,6 +214,8 @@ public class PermitTwoActivity extends AppCompatActivity implements EasyPermissi imgBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + StorageManager.getInstance().getPermitToWorkModel().get(0).setPictures(imageList); + finish(); } }); @@ -240,7 +223,8 @@ public class PermitTwoActivity extends AppCompatActivity implements EasyPermissi btnSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (!isValidate()) { + Log.e("btn-Submit: ","******"); + if (isValidate()) { StorageManager.getInstance().getPermitToWorkModel().get(0).setPictures(imageList); // Toast.makeText(PermitTwoActivity.this,"Reported Submitted",Toast.LENGTH_SHORT).show(); alertReportSubmit(PermitTwoActivity.this); @@ -266,13 +250,13 @@ public class PermitTwoActivity extends AppCompatActivity implements EasyPermissi } }); - etDescription.setOnFocusChangeListener((v, hasFocus) -> { + /*etDescription.setOnFocusChangeListener((v, hasFocus) -> { if (hasFocus) { new Handler().postDelayed(() -> { scrollView.smoothScrollTo(0, etDescription.getBottom()); }, 200); } - }); + });*/ } public void alertReportSubmit(Context con) { @@ -305,6 +289,9 @@ public class PermitTwoActivity extends AppCompatActivity implements EasyPermissi hseTrainingRequest.setSupervisorId(StorageManager.getInstance().getSupervisorId()); hseTrainingRequest.setSupervisorName(StorageManager.getInstance().getSupervisorName()); hseTrainingRequest.setShift(StorageManager.getInstance().getShift()); + hseTrainingRequest.setDepartmentId(StorageManager.getInstance().getDepartmentId()); + hseTrainingRequest.setBuildingId(StorageManager.getInstance().getBuildingId()); + hseTrainingRequest.setFloorId(StorageManager.getInstance().getFloorId()); hseTrainingRequest.setRecordTypeId(StorageManager.getInstance().getRecordTypeId()); hseTrainingRequest.setReportData(reportList); @@ -393,8 +380,7 @@ public class PermitTwoActivity extends AppCompatActivity implements EasyPermissi } private void initializeLayouts() { - checkboxCompany = findViewById(R.id.checkbox_company); - checkboxContractor = findViewById(R.id.checkbox_contractor); + imgUpload = findViewById(R.id.img_upload); imgBack = findViewById(R.id.img_back); btnSubmit = findViewById(R.id.btn_submit); @@ -722,15 +708,34 @@ public class PermitTwoActivity extends AppCompatActivity implements EasyPermissi returnValue = false; } - if (workingParty.isEmpty()) { - message = "Please select Working Party."; - returnValue = false; - } - if (!returnValue) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } return returnValue; } + + @Override + protected void onResume() { + super.onResume(); + + if (StorageManager.getInstance().getPermitToWorkModel() != null && + !StorageManager.getInstance().getPermitToWorkModel().isEmpty()) { + showPersistData(); + } + } + + private void showPersistData() { + etDescription.setText(StorageManager.getInstance().getPermitToWorkModel().get(0).getDescription()); + + if (StorageManager.getInstance().getPermitToWorkModel().get(0).getPictures() != null + && !StorageManager.getInstance().getPermitToWorkModel().get(0).getPictures().isEmpty()) { + imageList.clear(); + imageList.addAll(StorageManager.getInstance().getPermitToWorkModel().get(0).getPictures()); + imagePaperAdapter = new PTWImageAdapter(imageList, this, ""); + ptwRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); + ptwRecyclerView.setAdapter(imagePaperAdapter); + + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/HomeFragment.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/HomeFragment.java index 918c946..0006520 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/HomeFragment.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/HomeFragment.java @@ -28,12 +28,18 @@ import com.utopiaindustries.hseobservationsapp.activities.OtherHSEActivityForms. 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; @@ -57,7 +63,8 @@ public class HomeFragment extends Fragment { private TextView txtUserName, txtDate; private ImageView imgCalendar; private Button btnNext; - private AutoCompleteTextView siteTextView, supervisorTextView, shiftTextview, formTextview; + private AutoCompleteTextView siteTextView, supervisorTextView, shiftTextview, formTextview, + departmentTextview, buildingTextview, floorTextview; private SiteAdapter siteAdapter; private ArrayList siteArrayList = new ArrayList<>(); @@ -72,11 +79,24 @@ public class HomeFragment extends Fragment { 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; @@ -92,7 +112,7 @@ public class HomeFragment extends Fragment { initializeLayout(view); - txtUserName.setText(String.format("Supervisor Name: %s", userName)); + txtUserName.setText(String.format("User: %s", userName)); imgCalendar.setOnClickListener(new View.OnClickListener() { @Override @@ -122,6 +142,46 @@ public class HomeFragment extends Fragment { 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); + } + } }); @@ -157,6 +217,36 @@ public class HomeFragment extends Fragment { } }); + 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) { @@ -211,6 +301,10 @@ public class HomeFragment extends Fragment { 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); @@ -266,6 +360,7 @@ public class HomeFragment extends Fragment { if (!qcResponse.getHseFloors().isEmpty()) { Helper.saveList(qcResponse.getHseFloors(), Helper.hseFloors, getActivity()); + floorArrayList_temp.addAll(qcResponse.getHseFloors()); } if (!qcResponse.getHseActivities().isEmpty()) { @@ -276,6 +371,8 @@ public class HomeFragment extends Fragment { if (!qcResponse.getHseDepartment().isEmpty()) { Helper.saveList(qcResponse.getHseDepartment(), Helper.hseDepartment, getActivity()); + //department + departmentArrayList_temp.addAll(qcResponse.getHseDepartment()); } if (!qcResponse.getHseIncidentTypes().isEmpty()) { @@ -301,6 +398,7 @@ public class HomeFragment extends Fragment { if (!qcResponse.getHseBuildings().isEmpty()) { Helper.saveList(qcResponse.getHseBuildings(), Helper.hseBuildings, getActivity()); + buildingArrayList_temp.addAll(qcResponse.getHseBuildings()); } if (!qcResponse.getHseWorkingTeam().isEmpty()) { @@ -331,6 +429,12 @@ public class HomeFragment extends Fragment { 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); @@ -341,6 +445,15 @@ public class HomeFragment extends Fragment { 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)")); @@ -375,6 +488,21 @@ public class HomeFragment extends Fragment { 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; diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/HseReportRequest.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/HseReportRequest.java index 07bd727..285bed7 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/HseReportRequest.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/HseReportRequest.java @@ -12,6 +12,9 @@ public class HseReportRequest { private String supervisorName; private String shift; private int recordTypeId; + private int departmentId; + private int buildingId; + private int floorId; private List reportData; @@ -83,7 +86,31 @@ public class HseReportRequest { this.reportData = new ArrayList<>(); } - public HseReportRequest(String observation_date, int userId, int site_id, int supervisorId, String supervisorName, String shift, int recordTypeId, List reportData) { + public int getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(int departmentId) { + this.departmentId = departmentId; + } + + public int getBuildingId() { + return buildingId; + } + + public void setBuildingId(int buildingId) { + this.buildingId = buildingId; + } + + public int getFloorId() { + return floorId; + } + + public void setFloorId(int floorId) { + this.floorId = floorId; + } + + public HseReportRequest(String observation_date, int userId, int site_id, int supervisorId, String supervisorName, String shift, int recordTypeId, int departmentId, int buildingId, int floorId, List reportData) { this.observation_date = observation_date; this.userId = userId; this.site_id = site_id; @@ -91,7 +118,9 @@ public class HseReportRequest { this.supervisorName = supervisorName; this.shift = shift; this.recordTypeId = recordTypeId; + this.departmentId = departmentId; + this.buildingId = buildingId; + this.floorId = floorId; this.reportData = reportData; } - } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/HseTrainingModel.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/HseTrainingModel.java index df22da7..8a4d80b 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/HseTrainingModel.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/HseTrainingModel.java @@ -7,12 +7,6 @@ public class HseTrainingModel { private int safetyTopicId; private String safetyTopicName; private int employeeAttendance; - private int targetAudienceId; - private String targetAudienceName; - private int locationId; - private String locationName; - private int subLocationId; - private String subLocationName; private double trainingMinutes; private String description; private List pictures; @@ -33,14 +27,6 @@ public class HseTrainingModel { this.employeeAttendance = employeeAttendance; } - public int getTargetAudienceId() { - return targetAudienceId; - } - - public void setTargetAudienceId(int targetAudienceId) { - this.targetAudienceId = targetAudienceId; - } - public double getTrainingMinutes() { return trainingMinutes; } @@ -72,44 +58,4 @@ public class HseTrainingModel { public void setSafetyTopicName(String safetyTopicName) { this.safetyTopicName = safetyTopicName; } - - public String getTargetAudienceName() { - return targetAudienceName; - } - - public void setTargetAudienceName(String targetAudienceName) { - this.targetAudienceName = targetAudienceName; - } - - public int getLocationId() { - return locationId; - } - - public void setLocationId(int locationId) { - this.locationId = locationId; - } - - public String getLocationName() { - return locationName; - } - - public void setLocationName(String locationName) { - this.locationName = locationName; - } - - public int getSubLocationId() { - return subLocationId; - } - - public void setSubLocationId(int subLocationId) { - this.subLocationId = subLocationId; - } - - public String getSubLocationName() { - return subLocationName; - } - - public void setSubLocationName(String subLocationName) { - this.subLocationName = subLocationName; - } } diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/ObservationModel.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/ObservationModel.java index e2a7d78..206380b 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/ObservationModel.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/ObservationModel.java @@ -10,15 +10,6 @@ public class ObservationModel { private int observationSubClassId; private String hseObservationSubClassName; - private int buildingId; - private String buildingName; - - private int floorId; - private String floorName; - - private int departmentId; - private String departmentName; - private List beforePictures; private List afterPictures; @@ -58,54 +49,6 @@ public class ObservationModel { this.hseObservationSubClassName = hseObservationSubClassName; } - public int getBuildingId() { - return buildingId; - } - - public void setBuildingId(int buildingId) { - this.buildingId = buildingId; - } - - public String getBuildingName() { - return buildingName; - } - - public void setBuildingName(String buildingName) { - this.buildingName = buildingName; - } - - public int getFloorId() { - return floorId; - } - - public void setFloorId(int floorId) { - this.floorId = floorId; - } - - public String getFloorName() { - return floorName; - } - - public void setFloorName(String floorName) { - this.floorName = floorName; - } - - public int getDepartmentId() { - return departmentId; - } - - public void setDepartmentId(int departmentId) { - this.departmentId = departmentId; - } - - public String getDepartmentName() { - return departmentName; - } - - public void setDepartmentName(String departmentName) { - this.departmentName = departmentName; - } - public List getBeforePictures() { return beforePictures; } @@ -153,8 +96,6 @@ public class ObservationModel { ", hseObservationName='" + hseObservationName + '\'' + ", observationSubClassId=" + observationSubClassId + ", hseObservationSubClassName='" + hseObservationSubClassName + '\'' + - ", departmentId=" + departmentId + - ", departmentName='" + departmentName + '\'' + ", beforePictures=" + beforePictures.size() + ", afterPictures=" + afterPictures.size() + ", riskLevel='" + riskLevel + '\'' + diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/PermitToWorkModel.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/PermitToWorkModel.java index 17f4526..fa9983b 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/PermitToWorkModel.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/PermitToWorkModel.java @@ -4,12 +4,6 @@ import java.util.List; public class PermitToWorkModel { - private int departmentId; - private String departmentName; - private int locationId; - private String locationName; - private int subLocationId; - private String subLocationName; private String typeId; private String typeName; private int workingTeamId; @@ -20,22 +14,6 @@ public class PermitToWorkModel { private List pictures; - public int getLocationId() { - return locationId; - } - - public void setLocationId(int locationId) { - this.locationId = locationId; - } - - public int getSubLocationId() { - return subLocationId; - } - - public void setSubLocationId(int subLocationId) { - this.subLocationId = subLocationId; - } - public String getTypeId() { return typeId; } @@ -76,38 +54,6 @@ public class PermitToWorkModel { this.pictures = pictures; } - public int getDepartmentId() { - return departmentId; - } - - public void setDepartmentId(int departmentId) { - this.departmentId = departmentId; - } - - public String getDepartmentName() { - return departmentName; - } - - public void setDepartmentName(String departmentName) { - this.departmentName = departmentName; - } - - public String getLocationName() { - return locationName; - } - - public void setLocationName(String locationName) { - this.locationName = locationName; - } - - public String getSubLocationName() { - return subLocationName; - } - - public void setSubLocationName(String subLocationName) { - this.subLocationName = subLocationName; - } - public String getTypeName() { return typeName; } diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/StorageManager.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/StorageManager.java index d2a83cc..0fdab03 100644 --- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/StorageManager.java +++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/utils/StorageManager/StorageManager.java @@ -7,7 +7,6 @@ import java.util.List; public class StorageManager { private static StorageManager instance; - // private ArrayList imageListPaper; private String observation_date; private int userId; @@ -17,6 +16,12 @@ public class StorageManager { private String shift; private int recordTypeId; private String recordTypeName; + private int departmentId; + private String departmentName; + private int buildingId; + private String buildingName; + private int floorId; + private String floorName; private List observationsModel; private List reportActivityModel; @@ -118,6 +123,46 @@ public class StorageManager { this.recordTypeName = recordTypeName; } + public int getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(int departmentId) { + this.departmentId = departmentId; + } + + public String getDepartmentName() { + return departmentName; + } + + public void setDepartmentName(String departmentName) { + this.departmentName = departmentName; + } + + public int getBuildingId() { + return buildingId; + } + + public void setBuildingId(int buildingId) { + this.buildingId = buildingId; + } + + public String getBuildingName() { + return buildingName; + } + + public void setBuildingName(String buildingName) { + this.buildingName = buildingName; + } + + public int getFloorId() { + return floorId; + } + + public void setFloorId(int floorId) { + this.floorId = floorId; + } + public List getObservationsModel() { return observationsModel; } @@ -158,21 +203,45 @@ public class StorageManager { this.hseTrainingModel = hseTrainingModel; } - public void clearAllData() { - observation_date = null; - userId = 0; - site_id = 0; - supervisorId = 0; - supervisorName = null; - shift = null; - recordTypeId = 0; - recordTypeName = null; - observationsModel.clear(); - reportActivityModel.clear(); - progressiveActivityModel.clear(); - permitToWorkModel.clear(); - hseTrainingModel.clear(); + public void clearObservationModule() { + if (observationsModel != null) { + observationsModel.clear(); + } + observationsModel.add(new ObservationModel()); } + + public void clearProgressiveActivityModule() { + if (progressiveActivityModel != null) { + progressiveActivityModel.clear(); + } + + progressiveActivityModel.add(new ReportActivityModel()); + } + + public void clearPermitToWorkModule() { + if (permitToWorkModel != null) { + permitToWorkModel.clear(); + } + + permitToWorkModel.add(new PermitToWorkModel()); + } + + public void clearHseTrainingModule() { + if (hseTrainingModel != null) { + hseTrainingModel.clear(); + } + + hseTrainingModel.add(new HseTrainingModel()); + } + + public void clearReportActivityModule() { + if (reportActivityModel != null) { + reportActivityModel.clear(); + } + + reportActivityModel.add(new ReportActivityModel()); + } + } diff --git a/app/src/main/res/layout/activity_hse_one.xml b/app/src/main/res/layout/activity_hse_one.xml index 5bad708..7e964c3 100644 --- a/app/src/main/res/layout/activity_hse_one.xml +++ b/app/src/main/res/layout/activity_hse_one.xml @@ -59,7 +59,7 @@ - - - - + android:layout_marginEnd="10dp" + android:layout_marginStart="10dp" + android:layout_marginTop="5dp" + android:background="@drawable/et_border" + android:hint="Training Session" + android:imeOptions="actionDone" + android:inputType="numberDecimal" + android:padding="13dp" + android:textSize="15sp" /> + android:textStyle="bold" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/rg1" /> - - - - - - - - - - - + android:layout_marginStart="10dp" + android:layout_marginTop="5dp" + android:layout_marginEnd="10dp" + android:layout_marginBottom="10dp" + android:background="@drawable/et_border" + android:gravity="top|start" + android:hint="Write Description Here" + android:imeOptions="actionDone" + android:inputType="textMultiLine" + android:lines="5" + android:maxLines="5" + android:minLines="5" + android:padding="10dp" + android:textSize="@dimen/_12sdp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/heading_description"/> diff --git a/app/src/main/res/layout/activity_hse_two.xml b/app/src/main/res/layout/activity_hse_two.xml index bf91e87..6c74522 100644 --- a/app/src/main/res/layout/activity_hse_two.xml +++ b/app/src/main/res/layout/activity_hse_two.xml @@ -45,7 +45,6 @@ android:id="@+id/scrollView2" android:layout_width="match_parent" android:layout_height="0dp" - app:layout_constraintBottom_toTopOf="@+id/btn_next" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/toolbar"> @@ -56,65 +55,7 @@ android:padding="5dp" android:orientation="vertical"> - - - - - - - + - + + - + android:layout_gravity="top|end" + android:background="@drawable/circle_background" + android:padding="8dp" + android:src="@drawable/ic_close" /> + + - + - + + - + android:layout_gravity="top|end" + android:background="@drawable/circle_background" + android:padding="8dp" + android:src="@drawable/ic_close" /> + + diff --git a/app/src/main/res/layout/activity_observation_three.xml b/app/src/main/res/layout/activity_observation_three.xml index 3b78567..fbf741e 100644 --- a/app/src/main/res/layout/activity_observation_three.xml +++ b/app/src/main/res/layout/activity_observation_three.xml @@ -41,87 +41,7 @@ app:layout_constraintTop_toTopOf="@+id/toolbar" app:srcCompat="@drawable/arrow_back" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -199,6 +88,84 @@ android:textSize="16sp" /> + + + + + + + + + + + + + + + + @@ -209,7 +176,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@drawable/rounded_btn_login" - android:text="Next" + android:text="Submit" android:textColor="@color/white" app:layout_constraintBottom_toBottomOf="parent" tools:layout_editor_absoluteX="5dp" /> diff --git a/app/src/main/res/layout/activity_permit_one.xml b/app/src/main/res/layout/activity_permit_one.xml index a01027e..5732e84 100644 --- a/app/src/main/res/layout/activity_permit_one.xml +++ b/app/src/main/res/layout/activity_permit_one.xml @@ -56,99 +56,6 @@ android:padding="5dp" android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/app/src/main/res/layout/activity_permit_two.xml b/app/src/main/res/layout/activity_permit_two.xml index 5a050fc..d52226b 100644 --- a/app/src/main/res/layout/activity_permit_two.xml +++ b/app/src/main/res/layout/activity_permit_two.xml @@ -41,7 +41,7 @@ app:layout_constraintStart_toStartOf="parent" app:srcCompat="@drawable/arrow_back" /> - - - - - - - - - - @@ -162,7 +131,7 @@ android:padding="10dp" android:textSize="@dimen/_12sdp" /> - +