From 3becd62c1203b36a61a3534f36f09d6ab611a7c3 Mon Sep 17 00:00:00 2001 From: "saad.siddiq" Date: Fri, 6 Dec 2024 18:03:30 +0500 Subject: [PATCH] Feedback implemented --- .../activities/HomeActivity.java | 14 ---- .../adapters/ItemStepsAdapter.java | 1 + .../fragments/CheckingFragment.java | 4 +- .../fragments/CuttingFragment.java | 4 +- .../fragments/HomeFragment.java | 77 +++++++++++++++---- .../fragments/PackingFragment.java | 4 +- .../fragments/StitchingFragment.java | 4 +- .../fragments/SubStoreFragment.java | 21 ++--- .../viewmodels/HomeViewModel.java | 39 +++++++++- .../main/res/layout/item_recycler_view.xml | 1 + 10 files changed, 123 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/HomeActivity.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/HomeActivity.java index e4d85e7..272333c 100644 --- a/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/HomeActivity.java +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/HomeActivity.java @@ -86,20 +86,6 @@ public class HomeActivity extends AppCompatActivity { } }); - //btnNext = findViewById(R.id.btn_next); - - // Initialize fragments - /*fragmentList.add(new HomeFragment()); - fragmentList.add(new CuttingFragment()); - fragmentList.add(new StitchingFragment()); - fragmentList.add(new CheckingFragment()); - fragmentList.add(new PackingFragment()); - fragmentList.add(new SubStoreFragment());*/ - - // Load the first fragment - //loadFragment(fragmentList.get(currentFragmentIndex)); - - /*btnNext.setOnClickListener(v -> navigateNext());*/ // Load the first fragment only if there's no saved instance if (savedInstanceState == null) { diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ItemStepsAdapter.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ItemStepsAdapter.java index df4d3d0..1b78481 100644 --- a/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ItemStepsAdapter.java +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ItemStepsAdapter.java @@ -54,6 +54,7 @@ public class ItemStepsAdapter extends RecyclerView.Adapter { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { @@ -120,7 +120,7 @@ public class CheckingFragment extends Fragment implements EasyPermissions.Permis uriToByteArrayAsync( getContext(), contentUri, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CuttingFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CuttingFragment.java index c361111..2e00bfe 100644 --- a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CuttingFragment.java +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CuttingFragment.java @@ -92,7 +92,7 @@ public class CuttingFragment extends Fragment implements EasyPermissions.Permiss uriToByteArrayAsync( getContext(), selectedImage, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { @@ -122,7 +122,7 @@ public class CuttingFragment extends Fragment implements EasyPermissions.Permiss uriToByteArrayAsync( getContext(), contentUri, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/HomeFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/HomeFragment.java index 4c2b03f..aedfbb0 100644 --- a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/HomeFragment.java +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/HomeFragment.java @@ -86,7 +86,7 @@ public class HomeFragment extends Fragment implements DepartmentItemAdapter.OnIt locationSiteTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int position, long l) { - Log.e("onItemClick: ","--Site"); + //Log.e("onItemClick: ","--Site"); LocationSite clickedItem = locationSiteList.get(position); unitTextview.setText(null); floorTextview.setText(null); @@ -112,7 +112,7 @@ public class HomeFragment extends Fragment implements DepartmentItemAdapter.OnIt unitTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - Log.e("onItemClick: ","--Unit"); + //Log.e("onItemClick: ","--Unit"); LocationUnit clickedItem = locationUnitListFiltered.get(position); floorTextview.setText(null); //viewModel.setUnit(String.valueOf(clickedItem.getId())); @@ -140,7 +140,7 @@ public class HomeFragment extends Fragment implements DepartmentItemAdapter.OnIt floorTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int position, long l) { - Log.e("onItemClick: ","--Floor"); + //Log.e("onItemClick: ","--Floor"); LocationFloor clickedItem = locationFloorListFiltered.get(position); //viewModel.setFloor(String.valueOf(clickedItem.getId())); Preference.setMyStringPref(Helper.project_file, Helper.floorId, getActivity(), String.valueOf(clickedItem.getId())); @@ -287,18 +287,21 @@ public class HomeFragment extends Fragment implements DepartmentItemAdapter.OnIt if (Preference.getMyStringPref(Helper.project_file, Helper.firstTimeApiCall, getActivity()).equalsIgnoreCase("false") || Preference.getMyStringPref(Helper.project_file, Helper.firstTimeApiCall, getActivity()).equalsIgnoreCase("default")) { - Log.e("From-Service: ","****"); + Log.e("From-Service: ", "****"); loginViewModel.getQualityControlData(); } else { - Log.e("From-Preference: ","****"); + Log.e("From-Preference: ", "****"); + isFromPrevious = true; if (!Preference.getMyStringPref(Helper.project_file, Helper.departmentName, getActivity()).equalsIgnoreCase("default")) { - Log.e("setText: ","*********"); - - isFromPrevious = true; - locationSiteTextview.post(() -> locationSiteTextview.setText(Preference.getMyStringPref(Helper.project_file, Helper.locationSiteName, getActivity()), false)); + } + + if (!Preference.getMyStringPref(Helper.project_file, Helper.unitName, getActivity()).equalsIgnoreCase("default")) { unitTextview.post(() -> unitTextview.setText(Preference.getMyStringPref(Helper.project_file, Helper.unitName, getActivity()), false)); + } + + if (!Preference.getMyStringPref(Helper.project_file, Helper.floorName, getActivity()).equalsIgnoreCase("default")) { floorTextview.post(() -> floorTextview.setText(Preference.getMyStringPref(Helper.project_file, Helper.floorName, getActivity()), false)); } @@ -310,7 +313,7 @@ public class HomeFragment extends Fragment implements DepartmentItemAdapter.OnIt //department list //departmentList.addAll(viewModel.getDepartmentList()); departmentList.addAll(Helper.getList(Helper.homeDepartment, getActivity(), Department.class)); - Log.e("departmentList-size: ", "" + departmentList.size()); + //Log.e("departmentList-size: ", "" + departmentList.size()); filteredList = new ArrayList<>(departmentList); // Set up filtered RecyclerView departmentItemAdapter = new DepartmentItemAdapter(filteredList, this, searchEditText, recyclerView); @@ -320,7 +323,7 @@ public class HomeFragment extends Fragment implements DepartmentItemAdapter.OnIt //location list //locationSiteList.addAll(viewModel.getLocationSiteList()); locationSiteList.addAll(Helper.getList(Helper.homeSite, getActivity(), LocationSite.class)); - Log.e("locationSiteList-size: ", "" + locationSiteList.size()); + //Log.e("locationSiteList-size: ", "" + locationSiteList.size()); locationSitesAdapter = new LocationSitesAdapter(getActivity(), locationSiteList); locationSiteTextview.setAdapter(locationSitesAdapter); @@ -328,12 +331,14 @@ public class HomeFragment extends Fragment implements DepartmentItemAdapter.OnIt //unit list //locationUnitList.addAll(viewModel.getUnitList()); locationUnitList.addAll(Helper.getList(Helper.homeUnit, getActivity(), LocationUnit.class)); - Log.e("locationUnitList-size: ", "" + locationUnitList.size()); + //Log.e("locationUnitList-size: ", "" + locationUnitList.size()); //floor list //locationFloorList.addAll(viewModel.getFloorList()); locationFloorList.addAll(Helper.getList(Helper.homeFloor, getActivity(), LocationFloor.class)); - Log.e("locationFloorList-size: ", "" + locationFloorList.size()); + //Log.e("locationFloorList-size: ", "" + locationFloorList.size()); + + loadDropdownsOnBack(); recyclerView.setVisibility(View.GONE); @@ -435,4 +440,50 @@ public class HomeFragment extends Fragment implements DepartmentItemAdapter.OnIt return returnValue; } + + public void loadDropdownsOnBack() { + + int locationSiteId; + int unitId; + + //load unit dropdown + if (!Preference.getMyStringPref(Helper.project_file, Helper.locationSiteId, getActivity()).equalsIgnoreCase("default")) { + locationSiteId = Integer.parseInt(Preference.getMyStringPref(Helper.project_file, Helper.locationSiteId, getActivity())); + + if (!locationUnitList.isEmpty()) { + List filteredUnitItems = locationUnitList.stream() + .filter(item -> Objects.equals(item.getSiteId(), locationSiteId)) + .collect(Collectors.toList()); + + locationUnitListFiltered.clear(); + locationUnitListFiltered.addAll(filteredUnitItems); + unitAdapter = new UnitAdapter(getActivity(), filteredUnitItems); + unitTextview.setAdapter(unitAdapter); + + } + } else { + locationSiteId = 0; + } + + + //load floor dropdown + if (!Preference.getMyStringPref(Helper.project_file, Helper.unitId, getActivity()).equalsIgnoreCase("default")) { + unitId = Integer.parseInt(Preference.getMyStringPref(Helper.project_file, Helper.unitId, getActivity())); + + if (!locationFloorList.isEmpty()) { + List filteredFloorsList = locationFloorList.stream() + .filter(floor -> floor.getSiteId() == locationSiteId && Objects.equals(floor.getUnitId(), unitId)) + .collect(Collectors.toList()); + + locationFloorListFiltered.clear(); + locationFloorListFiltered.addAll(filteredFloorsList); + floorAdapter = new FloorAdapter(getActivity(), filteredFloorsList); + floorTextview.setAdapter(floorAdapter); + } + } else { + unitId = 0; + } + + + } } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/PackingFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/PackingFragment.java index 02814f8..cdf0b3e 100644 --- a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/PackingFragment.java +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/PackingFragment.java @@ -91,7 +91,7 @@ public class PackingFragment extends Fragment implements EasyPermissions.Permiss uriToByteArrayAsync( getContext(), selectedImage, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { @@ -121,7 +121,7 @@ public class PackingFragment extends Fragment implements EasyPermissions.Permiss uriToByteArrayAsync( getContext(), contentUri, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/StitchingFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/StitchingFragment.java index b2d9bd1..22fb7f8 100644 --- a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/StitchingFragment.java +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/StitchingFragment.java @@ -93,7 +93,7 @@ public class StitchingFragment extends Fragment implements EasyPermissions.Permi uriToByteArrayAsync( getContext(), selectedImage, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { @@ -123,7 +123,7 @@ public class StitchingFragment extends Fragment implements EasyPermissions.Permi uriToByteArrayAsync( getContext(), contentUri, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/SubStoreFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/SubStoreFragment.java index 6c7bec8..dc18a80 100644 --- a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/SubStoreFragment.java +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/SubStoreFragment.java @@ -95,7 +95,7 @@ public class SubStoreFragment extends Fragment implements EasyPermissions.Permis uriToByteArrayAsync( getContext(), selectedImage, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { @@ -125,7 +125,7 @@ public class SubStoreFragment extends Fragment implements EasyPermissions.Permis uriToByteArrayAsync( getContext(), contentUri, - 100, // Target size in KB + 60, // Target size in KB compressedImage -> { // Handle the compressed image here, e.g., display it requireActivity().runOnUiThread(() -> { @@ -149,7 +149,7 @@ public class SubStoreFragment extends Fragment implements EasyPermissions.Permis Uri selectedImage = result.getData().getData(); if (selectedImage != null) { //imageView.setImageURI(selectedImage); - // Log.e("Selected-Image: ", "" + selectedImage); + // Log.e("Selected-Image: ", "" + selectedImage); } } }); @@ -270,14 +270,14 @@ public class SubStoreFragment extends Fragment implements EasyPermissions.Permis tempList.addAll(Helper.getArrayList(Helper.listChecking, getActivity())); tempList.addAll(Helper.getArrayList(Helper.listPacking, getActivity())); tempList.addAll(Helper.getArrayList(Helper.listSubStore, getActivity())); - String generatedBy = Preference.getMyStringPref(Helper.project_file,Helper.logInUser,getActivity()); + String generatedBy = Preference.getMyStringPref(Helper.project_file, Helper.logInUser, getActivity()); /*Log.e("AdapterData-1", "siteID: " + siteID + ", unitId: " + unitId + ", departId: " + departId + ", floorId: " + floorId);*/ - QualityControl qualityControl = new QualityControl(generatedBy,siteID,unitId,departId,floorId,tempList); + QualityControl qualityControl = new QualityControl(generatedBy, siteID, unitId, departId, floorId, tempList); /*Log.e("---------------","-----------------"); @@ -288,6 +288,7 @@ public class SubStoreFragment extends Fragment implements EasyPermissions.Permis ", floorId: " + qualityControl.getFloorId());*/ homeViewModel.saveQualityControlData(qualityControl); + } else { dialog.dismiss(); } @@ -353,11 +354,11 @@ public class SubStoreFragment extends Fragment implements EasyPermissions.Permis Preference.remove(Helper.project_file, Helper.floorId, getActivity()); Preference.remove(Helper.project_file, Helper.floorName, getActivity()); - Helper.RemoveArrayList(Helper.listCutting,getActivity()); - Helper.RemoveArrayList(Helper.listStitching,getActivity()); - Helper.RemoveArrayList(Helper.listChecking,getActivity()); - Helper.RemoveArrayList(Helper.listPacking,getActivity()); - Helper.RemoveArrayList(Helper.listSubStore,getActivity()); + Helper.RemoveArrayList(Helper.listCutting, getActivity()); + Helper.RemoveArrayList(Helper.listStitching, getActivity()); + Helper.RemoveArrayList(Helper.listChecking, getActivity()); + Helper.RemoveArrayList(Helper.listPacking, getActivity()); + Helper.RemoveArrayList(Helper.listSubStore, getActivity()); //Preference.setMyStringPref(Helper.project_file, Helper.InProcess, getActivity(), "false"); diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/viewmodels/HomeViewModel.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/viewmodels/HomeViewModel.java index 30d5745..d257071 100644 --- a/app/src/main/java/com/utopiaindustries/qualitycontrol/viewmodels/HomeViewModel.java +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/viewmodels/HomeViewModel.java @@ -11,6 +11,9 @@ import com.utopiaindustries.qualitycontrol.apiservice.ApiServiceFactory; import com.utopiaindustries.qualitycontrol.models.QualityControlResponse; import com.utopiaindustries.qualitycontrol.models.QualitySaveResponse; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -21,12 +24,14 @@ public class HomeViewModel extends ViewModel { private MutableLiveData errorLiveData; private MutableLiveData isLoading; private ApiService apiService; + private final ExecutorService executorService; public HomeViewModel() { apiService = ApiServiceFactory.getApiService(); userLiveData = new MutableLiveData<>(); errorLiveData = new MutableLiveData<>(); isLoading = new MutableLiveData<>(); + this.executorService = Executors.newFixedThreadPool(4); } public LiveData getUserLiveData() { @@ -42,7 +47,7 @@ public class HomeViewModel extends ViewModel { return errorLiveData; } - public void saveQualityControlData(QualityControl qualityControl) { + /*public void saveQualityControlData(QualityControl qualityControl) { isLoading.setValue(true); apiService.saveQualityControlReport(qualityControl).enqueue(new Callback() { @Override @@ -64,6 +69,31 @@ public class HomeViewModel extends ViewModel { errorLiveData.setValue(t.getMessage()); } }); + }*/ + + public void saveQualityControlData(QualityControl qualityControl) { + isLoading.setValue(true); // Notify UI that the task is starting + + // Execute the task in the background + executorService.execute(() -> { + try { + // Synchronous network call + Response response = apiService.saveQualityControlReport(qualityControl).execute(); + + // Switch to the main thread to update LiveData + if (response.isSuccessful() && response.body() != null) { + userLiveData.postValue(response.body()); + } else { + errorLiveData.postValue(response.message()); + } + } catch (Exception e) { + // Handle errors + errorLiveData.postValue(e.getMessage()); + } finally { + // Hide the loading spinner + isLoading.postValue(false); + } + }); } public LiveData getUser() { @@ -73,4 +103,11 @@ public class HomeViewModel extends ViewModel { public LiveData getError() { return errorLiveData; } + + @Override + protected void onCleared() { + super.onCleared(); + // Shut down the executor service to prevent memory leaks + executorService.shutdown(); + } } diff --git a/app/src/main/res/layout/item_recycler_view.xml b/app/src/main/res/layout/item_recycler_view.xml index 0f45d2d..37ee555 100644 --- a/app/src/main/res/layout/item_recycler_view.xml +++ b/app/src/main/res/layout/item_recycler_view.xml @@ -77,6 +77,7 @@ android:layout_centerInParent="true" android:layout_marginEnd="10dp" android:maxLines="1" + android:singleLine="true" android:hint="Remarks" android:imeOptions="actionDone" android:layout_toEndOf="@+id/tv_percentage"