diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..b589d56
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
new file mode 100644
index 0000000..b268ef3
--- /dev/null
+++ b/.idea/deploymentTargetSelector.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..0897082
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/migrations.xml b/.idea/migrations.xml
new file mode 100644
index 0000000..f8051a6
--- /dev/null
+++ b/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..0ad17cb
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 87704c6..6021179 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:ignore="DiscouragedApi">
+
+
+
+
+
+ android:exported="true"
+ android:screenOrientation="portrait">
@@ -41,10 +57,18 @@
+ android:exported="true"
+ android:screenOrientation="portrait" />
-
+
+
+
\ 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
new file mode 100644
index 0000000..cc5d7e7
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationOneActivity.java
@@ -0,0 +1,106 @@
+package com.utopiaindustries.hseobservationsapp.activities.ObservationForms;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AutoCompleteTextView;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.adapters.ObservationClassAdapter;
+import com.utopiaindustries.hseobservationsapp.adapters.ObservationSubClassAdapter;
+import com.utopiaindustries.hseobservationsapp.adapters.ShiftAdapter;
+import com.utopiaindustries.hseobservationsapp.models.Shift;
+
+import java.util.ArrayList;
+
+public class ObservationOneActivity extends AppCompatActivity {
+
+ private AutoCompleteTextView observationTextview, observationSubTextview;
+
+ private ObservationClassAdapter observationClassAdapter;
+ private ObservationSubClassAdapter observationSubClassAdapter;
+ private ArrayList obClassArrayList = new ArrayList<>();
+
+ private ArrayList obSubClassArrayList = new ArrayList<>();
+
+ private Button btnNext;
+ ImageView imgBack;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_observation_one);
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+
+ initializeLayout();
+
+ imgBack.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ btnNext.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(ObservationOneActivity.this, ObservationTwoActivity.class);
+ startActivity(intent);
+ }
+ });
+
+ observationTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ // Perform action when shiftTextview item is clicked
+ Toast.makeText(ObservationOneActivity.this, "Item clicked: " + obClassArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
+
+ }
+ });
+
+ observationSubTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ // Perform action when shiftTextview item is clicked
+ Toast.makeText(ObservationOneActivity.this, "Item clicked: " + obSubClassArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
+
+ }
+ });
+ }
+
+ public void initializeLayout() {
+ observationTextview = findViewById(R.id.observation_textview);
+ observationSubTextview = findViewById(R.id.observation_sub_textview);
+ btnNext = findViewById(R.id.btn_next);
+ imgBack = findViewById(R.id.img_back);
+
+ obClassArrayList.add(new Shift(1, "Unsafe Act"));
+ obClassArrayList.add(new Shift(2, "Unsafe Condition"));
+ obClassArrayList.add(new Shift(3, "Near Miss"));
+
+ observationClassAdapter = new ObservationClassAdapter(this, obClassArrayList);
+ observationTextview.setAdapter(observationClassAdapter);
+
+ //observation sub class items
+ //for Unsafe
+ //for condition
+ //never miss
+ observationSubClassAdapter = new ObservationSubClassAdapter(this, obSubClassArrayList);
+ observationSubTextview.setAdapter(observationSubClassAdapter);
+ }
+}
\ 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
new file mode 100644
index 0000000..5200d77
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationThreeActivity.java
@@ -0,0 +1,63 @@
+package com.utopiaindustries.hseobservationsapp.activities.ObservationForms;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.RadioGroup;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+import com.utopiaindustries.hseobservationsapp.R;
+
+
+public class ObservationThreeActivity extends AppCompatActivity {
+
+ RadioGroup rg1;
+ ImageView imgBack;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_observation_three);
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+
+ initializeLayouts();
+
+ imgBack.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ rg1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
+ {
+ public void onCheckedChanged(RadioGroup group, int checkedId) {
+ if (checkedId == R.id.rb_open) {
+ // do operations specific to this selection
+ // Toast.makeText(GeneralDetailActivity.this,"GPS Yes",Toast.LENGTH_SHORT).show();
+ //bool_gps = true;
+ } else if (checkedId == R.id.rb_closed) {
+ // do operations specific to this selection
+ // Toast.makeText(GeneralDetailActivity.this,"GPS No",Toast.LENGTH_SHORT).show();
+ //bool_gps = false;
+ }
+ }
+ });
+ }
+
+ private void initializeLayouts() {
+
+ rg1 = findViewById(R.id.rg1);
+ imgBack = findViewById(R.id.img_back);
+ }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..65787ba
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/ObservationForms/ObservationTwoActivity.java
@@ -0,0 +1,469 @@
+package com.utopiaindustries.hseobservationsapp.activities.ObservationForms;
+
+import android.Manifest;
+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.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.DepartmentAdapter;
+import com.utopiaindustries.hseobservationsapp.adapters.ObservationClassAdapter;
+import com.utopiaindustries.hseobservationsapp.adapters.ObservationSubClassAdapter;
+import com.utopiaindustries.hseobservationsapp.adapters.RiskLevelAdapter;
+import com.utopiaindustries.hseobservationsapp.models.Department;
+import com.utopiaindustries.hseobservationsapp.models.Shift;
+
+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.function.Consumer;
+
+import pub.devrel.easypermissions.AfterPermissionGranted;
+import pub.devrel.easypermissions.AppSettingsDialog;
+import pub.devrel.easypermissions.EasyPermissions;
+
+public class ObservationTwoActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{
+
+ private Button btnNext;
+ ImageView imgBack;
+ ImageView imgBefore, beforeCrossButton, imgAfter, afterCrossButton;
+ private AutoCompleteTextView departmentTextview, riskLevelTextview;
+
+ private DepartmentAdapter departmentAdapter;
+ private RiskLevelAdapter riskLevelAdapter;
+
+ private ArrayList departmentArrayList = 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";
+
+ // 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();
+
+ Glide.with(this)
+ .load(selectedImage) // Glide will handle the decoding and placeholder
+ .placeholder(R.drawable.img_load)
+ .apply(new RequestOptions().centerCrop())
+ .into(imgBefore);
+
+ uriToByteArrayAsync(
+ this,
+ selectedImage,
+ 200, // Target size in KB
+ compressedImage -> {
+ // Handle the compressed image here, e.g., display it
+ /*runOnUiThread(() -> {
+ itemModelList.get(selectedPosition).setImageUri(compressedImage);
+ List tempList = new ArrayList<>();
+ tempList.add(compressedImage);
+ itemModelList.get(selectedPosition).setImageArrayList(tempList);
+ adapter.notifyItemChanged(selectedPosition);
+ });*/
+ },
+ 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) {
+ Uri contentUri = Uri.fromFile(new File((filePathBefore)));
+
+ Glide.with(this)
+ .load(contentUri) // Glide will handle the decoding and placeholder
+ .placeholder(R.drawable.img_load)
+ .apply(new RequestOptions().centerCrop())
+ .into(imgAfter);
+
+ uriToByteArrayAsync(
+ this,
+ contentUri,
+ 200, // Target size in KB
+ compressedImage -> {
+ // Handle the compressed image here, e.g., display it
+ /*runOnUiThread(() -> {
+ itemModelList.get(selectedPosition).setImageUri(compressedImage);
+ List tempList = new ArrayList<>();
+ tempList.add(compressedImage);
+ itemModelList.get(selectedPosition).setImageArrayList(tempList);
+ adapter.notifyItemChanged(selectedPosition);
+ });*/
+ },
+ 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) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_observation_two);
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+
+ initializeLayout();
+
+ imgBack.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ btnNext.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(ObservationTwoActivity.this, ObservationThreeActivity.class);
+ startActivity(intent);
+ }
+ });
+
+ imgBefore.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ alertForPictures(ObservationTwoActivity.this, "before");
+ }
+ });
+
+ imgAfter.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ alertForPictures(ObservationTwoActivity.this, "after");
+ }
+ });
+
+ beforeCrossButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ }
+ });
+
+ afterCrossButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ }
+ });
+
+ departmentTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+
+ }
+ });
+
+ riskLevelTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+
+ }
+ });
+ }
+
+ private void initializeLayout() {
+
+ 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);
+
+ departmentTextview = findViewById(R.id.department_textview);
+ riskLevelTextview = findViewById(R.id.risk_textview);
+
+ departmentAdapter = new DepartmentAdapter(this, departmentArrayList);
+ departmentTextview.setAdapter(departmentAdapter);
+
+ riskLevelAdapter = new RiskLevelAdapter(this, riskLevelArrayList);
+ riskLevelTextview.setAdapter(riskLevelAdapter);
+ }
+
+ public void alertForPictures(Context con, String imageType) {
+ 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(imageType);
+
+ }
+ });
+
+ dialogGalleryBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ alertDialog.dismiss();
+ openGallery(imageType);
+
+ }
+ });
+
+ alertDialog.show();
+ }
+
+ @AfterPermissionGranted(CAMERA_REQUEST)
+ public void openCamera(String imgType) {
+ 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(String imgType) {
+ 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);
+ }
+}
\ 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
new file mode 100644
index 0000000..4de81b2
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitOneActivity.java
@@ -0,0 +1,60 @@
+package com.utopiaindustries.hseobservationsapp.activities.PermitToWorkForms;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.activities.ObservationForms.ObservationThreeActivity;
+import com.utopiaindustries.hseobservationsapp.activities.ObservationForms.ObservationTwoActivity;
+
+public class PermitOneActivity extends AppCompatActivity {
+
+ private Button btnNext;
+ ImageView imgBack;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_permit_one);
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+
+ initializeLayout();
+
+ imgBack.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ btnNext.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ /*Intent intent = new Intent(PermitOneActivity.this, ObservationThreeActivity.class);
+ startActivity(intent);*/
+ }
+ });
+
+ }
+
+ private void initializeLayout() {
+
+ btnNext = findViewById(R.id.btn_next);
+ imgBack = findViewById(R.id.img_back);
+
+ }
+}
\ 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
new file mode 100644
index 0000000..5deabf7
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/activities/PermitToWorkForms/PermitTwoActivity.java
@@ -0,0 +1,26 @@
+package com.utopiaindustries.hseobservationsapp.activities.PermitToWorkForms;
+
+import android.os.Bundle;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+import com.utopiaindustries.hseobservationsapp.R;
+
+public class PermitTwoActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_permit_two);
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/DepartmentAdapter.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/DepartmentAdapter.java
new file mode 100644
index 0000000..e2043aa
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/DepartmentAdapter.java
@@ -0,0 +1,40 @@
+package com.utopiaindustries.hseobservationsapp.adapters;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.models.Shift;
+
+import java.util.List;
+
+public class DepartmentAdapter extends ArrayAdapter {
+
+ private final Context context;
+ private final List items;
+
+ public DepartmentAdapter(Context context, List items) {
+ super(context, 0, items);
+ this.context = context;
+ this.items = items;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(context).inflate(R.layout.list_items, parent, false);
+ }
+
+ Shift item = items.get(position);
+
+ TextView titleTextView = convertView.findViewById(R.id.item_text);
+
+ titleTextView.setText(item.getTitle());
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/FormTypeAdapter.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/FormTypeAdapter.java
new file mode 100644
index 0000000..f060771
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/FormTypeAdapter.java
@@ -0,0 +1,41 @@
+package com.utopiaindustries.hseobservationsapp.adapters;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.models.FormType;
+import com.utopiaindustries.hseobservationsapp.models.LocationSite;
+
+import java.util.List;
+
+public class FormTypeAdapter extends ArrayAdapter {
+
+ private final Context context;
+ private final List items;
+
+ public FormTypeAdapter(Context context, List items) {
+ super(context, 0, items);
+ this.context = context;
+ this.items = items;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(context).inflate(R.layout.list_items, parent, false);
+ }
+
+ FormType item = items.get(position);
+
+ TextView titleTextView = convertView.findViewById(R.id.item_text);
+
+ titleTextView.setText(item.getTitle());
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ObservationClassAdapter.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ObservationClassAdapter.java
new file mode 100644
index 0000000..9209b03
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ObservationClassAdapter.java
@@ -0,0 +1,40 @@
+package com.utopiaindustries.hseobservationsapp.adapters;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.models.Shift;
+
+import java.util.List;
+
+public class ObservationClassAdapter extends ArrayAdapter {
+
+ private final Context context;
+ private final List items;
+
+ public ObservationClassAdapter(Context context, List items) {
+ super(context, 0, items);
+ this.context = context;
+ this.items = items;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(context).inflate(R.layout.list_items, parent, false);
+ }
+
+ Shift item = items.get(position);
+
+ TextView titleTextView = convertView.findViewById(R.id.item_text);
+
+ titleTextView.setText(item.getTitle());
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ObservationSubClassAdapter.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ObservationSubClassAdapter.java
new file mode 100644
index 0000000..284b923
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ObservationSubClassAdapter.java
@@ -0,0 +1,40 @@
+package com.utopiaindustries.hseobservationsapp.adapters;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.models.Shift;
+
+import java.util.List;
+
+public class ObservationSubClassAdapter extends ArrayAdapter {
+
+ private final Context context;
+ private final List items;
+
+ public ObservationSubClassAdapter(Context context, List items) {
+ super(context, 0, items);
+ this.context = context;
+ this.items = items;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(context).inflate(R.layout.list_items, parent, false);
+ }
+
+ Shift item = items.get(position);
+
+ TextView titleTextView = convertView.findViewById(R.id.item_text);
+
+ titleTextView.setText(item.getTitle());
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/RiskLevelAdapter.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/RiskLevelAdapter.java
new file mode 100644
index 0000000..233f76b
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/RiskLevelAdapter.java
@@ -0,0 +1,40 @@
+package com.utopiaindustries.hseobservationsapp.adapters;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.models.Shift;
+
+import java.util.List;
+
+public class RiskLevelAdapter extends ArrayAdapter {
+
+ private final Context context;
+ private final List items;
+
+ public RiskLevelAdapter(Context context, List items) {
+ super(context, 0, items);
+ this.context = context;
+ this.items = items;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(context).inflate(R.layout.list_items, parent, false);
+ }
+
+ Shift item = items.get(position);
+
+ TextView titleTextView = convertView.findViewById(R.id.item_text);
+
+ titleTextView.setText(item.getTitle());
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ShiftAdapter.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ShiftAdapter.java
new file mode 100644
index 0000000..5c8444d
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/adapters/ShiftAdapter.java
@@ -0,0 +1,41 @@
+package com.utopiaindustries.hseobservationsapp.adapters;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.models.LocationSite;
+import com.utopiaindustries.hseobservationsapp.models.Shift;
+
+import java.util.List;
+
+public class ShiftAdapter extends ArrayAdapter {
+
+ private final Context context;
+ private final List items;
+
+ public ShiftAdapter(Context context, List items) {
+ super(context, 0, items);
+ this.context = context;
+ this.items = items;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(context).inflate(R.layout.list_items, parent, false);
+ }
+
+ Shift item = items.get(position);
+
+ TextView titleTextView = convertView.findViewById(R.id.item_text);
+
+ titleTextView.setText(item.getTitle());
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/DraftFragment.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/DraftFragment.java
index f886a5d..1b166b5 100644
--- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/DraftFragment.java
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/DraftFragment.java
@@ -19,9 +19,16 @@ public class DraftFragment extends Fragment {
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_draft, container, false);
+
+ View view = inflater.inflate(R.layout.fragment_draft , container, false );
+
+ initializeLayout(view);
+ return view;
+ }
+
+ public void initializeLayout(View view) {
+
}
}
\ 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 84dc442..7285539 100644
--- a/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/HomeFragment.java
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/HomeFragment.java
@@ -1,5 +1,8 @@
package com.utopiaindustries.hseobservationsapp.fragments;
+import android.app.DatePickerDialog;
+import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
@@ -8,20 +11,140 @@ import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AutoCompleteTextView;
+import android.widget.Button;
+import android.widget.DatePicker;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
import com.utopiaindustries.hseobservationsapp.R;
+import com.utopiaindustries.hseobservationsapp.activities.ObservationForms.ObservationOneActivity;
+import com.utopiaindustries.hseobservationsapp.adapters.FormTypeAdapter;
+import com.utopiaindustries.hseobservationsapp.adapters.ShiftAdapter;
+import com.utopiaindustries.hseobservationsapp.models.FormType;
+import com.utopiaindustries.hseobservationsapp.models.Shift;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Locale;
public class HomeFragment extends Fragment {
+ private int year, month, day;
+ private Calendar calendar;
+ private TextView txtUserName, txtDate;
+ private ImageView imgCalendar;
+ private Button btnNext;
+ private AutoCompleteTextView shiftTextview, formTextview;
+
+ private ShiftAdapter shiftAdapter;
+ private ArrayList shiftArrayList = new ArrayList<>();
+
+ private FormTypeAdapter formTypeAdapter;
+ private ArrayList formArrayList = new ArrayList<>();
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_home, container, false);
+ View view = inflater.inflate(R.layout.fragment_home , container, false );
+
+ initializeLayout(view);
+
+ txtUserName.setText("Supervisor Name");
+
+ imgCalendar.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showDatePickerDialog(getActivity());
+ }
+ });
+
+ shiftTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ // Perform action when shiftTextview item is clicked
+ Toast.makeText(getActivity(), "Item clicked: " + shiftArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
+
+ }
+ });
+
+ formTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ // Perform action when formTextview item is clicked
+ Toast.makeText(getActivity(), "Item clicked: " + formArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
+
+ }
+ });
+
+ btnNext.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getActivity(), ObservationOneActivity.class);
+ startActivity(intent);
+ }
+ });
+
+
+ return view;
+ }
+
+ public void initializeLayout(View view) {
+ calendar = Calendar.getInstance();
+ year = calendar.get(Calendar.YEAR);
+ month = calendar.get(Calendar.MONTH);
+ day = calendar.get(Calendar.DAY_OF_MONTH);
+ txtUserName = view.findViewById(R.id.txt_user_name);
+ txtDate = view.findViewById(R.id.txt_date);
+ imgCalendar = view.findViewById(R.id.img_calendar);
+ btnNext = view.findViewById(R.id.btn_next);
+
+ shiftTextview = view.findViewById(R.id.shift_textview);
+ formTextview = view.findViewById(R.id.form_textview);
+
+ shiftArrayList.add(new Shift(1, "General Shift(08:00AM - 05:00PM)"));
+ shiftArrayList.add(new Shift(2, "Evening Shift(12:00PM - 09:00PM)"));
+ shiftArrayList.add(new Shift(3, "Night Shift(09:00PM - 06:00AM)"));
+
+ shiftAdapter = new ShiftAdapter(getActivity(), shiftArrayList);
+ shiftTextview.setAdapter(shiftAdapter);
+
+ formArrayList.add(new FormType(1, "Observation Form"));
+ formArrayList.add(new FormType(2, "Permit To Work Form"));
+ formArrayList.add(new FormType(3, "HSE Training Form"));
+ formArrayList.add(new FormType(4, "Injury Record Form"));
+ formArrayList.add(new FormType(5, "Weekly Activities Form"));
+ formArrayList.add(new FormType(6, "Progressive Activities Form"));
+ formArrayList.add(new FormType(7, "Other HSE Form"));
+
+ formTypeAdapter = new FormTypeAdapter(getActivity(), formArrayList);
+ formTextview.setAdapter(formTypeAdapter);
+ }
+
+ private void showDatePickerDialog(Context context) {
+ DatePickerDialog datePickerDialog = new DatePickerDialog(
+ context,
+ new DatePickerDialog.OnDateSetListener() {
+ @Override
+ public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
+ // Month is 0-indexed, so we add 1
+ Calendar selectedCalendar = Calendar.getInstance();
+ selectedCalendar.set(year, monthOfYear, dayOfMonth);
+ SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy", Locale.getDefault());
+ String selectedDate = dateFormat.format(selectedCalendar.getTime());
+ txtDate.setText(selectedDate);
+ }
+ },
+ year, month, day
+ );
+ datePickerDialog.show();
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/models/FormType.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/models/FormType.java
new file mode 100644
index 0000000..57717d9
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/models/FormType.java
@@ -0,0 +1,41 @@
+
+package com.utopiaindustries.hseobservationsapp.models;
+
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+public class FormType {
+
+ @SerializedName("id")
+ @Expose
+ private Integer id;
+ @SerializedName("title")
+ @Expose
+ private String title;
+
+ public FormType(Integer id, String title) {
+ this.id = id;
+ this.title = title;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return title;
+ }
+}
diff --git a/app/src/main/java/com/utopiaindustries/hseobservationsapp/models/Shift.java b/app/src/main/java/com/utopiaindustries/hseobservationsapp/models/Shift.java
new file mode 100644
index 0000000..df3d5d7
--- /dev/null
+++ b/app/src/main/java/com/utopiaindustries/hseobservationsapp/models/Shift.java
@@ -0,0 +1,41 @@
+
+package com.utopiaindustries.hseobservationsapp.models;
+
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+public class Shift {
+
+ @SerializedName("id")
+ @Expose
+ private Integer id;
+ @SerializedName("title")
+ @Expose
+ private String title;
+
+ public Shift(Integer id, String title) {
+ this.id = id;
+ this.title = title;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return title;
+ }
+}
diff --git a/app/src/main/res/drawable/circle_background.xml b/app/src/main/res/drawable/circle_background.xml
new file mode 100644
index 0000000..274e668
--- /dev/null
+++ b/app/src/main/res/drawable/circle_background.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml
new file mode 100644
index 0000000..bcc56a1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_upload.xml b/app/src/main/res/drawable/ic_upload.xml
new file mode 100644
index 0000000..7f56d73
--- /dev/null
+++ b/app/src/main/res/drawable/ic_upload.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/icon_calendar.xml b/app/src/main/res/drawable/icon_calendar.xml
new file mode 100644
index 0000000..0f090ec
--- /dev/null
+++ b/app/src/main/res/drawable/icon_calendar.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/icon_image.xml b/app/src/main/res/drawable/icon_image.xml
new file mode 100644
index 0000000..0d99105
--- /dev/null
+++ b/app/src/main/res/drawable/icon_image.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_dashboard.xml b/app/src/main/res/layout/activity_dashboard.xml
index d1ec7fd..832e86d 100644
--- a/app/src/main/res/layout/activity_dashboard.xml
+++ b/app/src/main/res/layout/activity_dashboard.xml
@@ -52,12 +52,8 @@
app:srcCompat="@drawable/ic_logout" />
+ app:tabMaxWidth="0dp"
+ app:tabMode="fixed" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_observation_three.xml b/app/src/main/res/layout/activity_observation_three.xml
new file mode 100644
index 0000000..c69f9da
--- /dev/null
+++ b/app/src/main/res/layout/activity_observation_three.xml
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_observation_two.xml b/app/src/main/res/layout/activity_observation_two.xml
new file mode 100644
index 0000000..8c4deeb
--- /dev/null
+++ b/app/src/main/res/layout/activity_observation_two.xml
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_permit_one.xml b/app/src/main/res/layout/activity_permit_one.xml
new file mode 100644
index 0000000..051d840
--- /dev/null
+++ b/app/src/main/res/layout/activity_permit_one.xml
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_permit_two.xml b/app/src/main/res/layout/activity_permit_two.xml
new file mode 100644
index 0000000..011975a
--- /dev/null
+++ b/app/src/main/res/layout/activity_permit_two.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/custom_layout_for_image.xml b/app/src/main/res/layout/custom_layout_for_image.xml
new file mode 100644
index 0000000..194b537
--- /dev/null
+++ b/app/src/main/res/layout/custom_layout_for_image.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index c74768b..1c43865 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -1,5 +1,6 @@
+ android:layout_height="wrap_content"
+ android:padding="5dp">
+ android:textSize="@dimen/_13sdp"
+ android:textStyle="bold" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_items.xml b/app/src/main/res/layout/list_items.xml
new file mode 100644
index 0000000..b102d79
--- /dev/null
+++ b/app/src/main/res/layout/list_items.xml
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7263adc..c630bdc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2,4 +2,22 @@
HSE App
Hello blank fragment
+
+ Select Shift
+ Select Form
+
+ Select Observation Class
+ Select Observation Sub Class
+
+ Select Department
+
+ Select Risk Level
+ Select Location
+ Select Sub Location
+ Select PTW Type
+ Select PTW Sub Type
+ Select Working Team
+
+ This app require permission for camera.
+ This app require permission for accessing gallery.
\ No newline at end of file