From 262e578ed85f528e3b1b148b0c33f84275362df6 Mon Sep 17 00:00:00 2001 From: "saad.siddiq" Date: Fri, 14 Mar 2025 15:22:06 +0500 Subject: [PATCH] Finalize AQL implementation Add Image enlarge feature --- app/build.gradle | 1 + .../apiservice/RetrofitClient.java | 4 +- .../service/NetworkService.java | 2 + .../ui/adapter/ImageAdapter.java | 12 ++ .../ui/fragments/FirstStepFragment.java | 121 ++++++++++++------ .../utils/FullScreenImageDialog.java | 47 +++++++ .../main/res/drawable/circle_background.xml | 5 + .../res/layout/dialog_fullscreen_image.xml | 31 +++++ .../main/res/layout/fragment_first_step.xml | 2 +- .../main/res/layout/fragment_third_step.xml | 23 ++-- 10 files changed, 193 insertions(+), 55 deletions(-) create mode 100644 app/src/main/java/com/utopiaindustries/qualitychecker/utils/FullScreenImageDialog.java create mode 100644 app/src/main/res/drawable/circle_background.xml create mode 100644 app/src/main/res/layout/dialog_fullscreen_image.xml diff --git a/app/build.gradle b/app/build.gradle index bc4c771..264ce83 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -48,5 +48,6 @@ dependencies { annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' implementation 'com.journeyapps:zxing-android-embedded:4.1.0' implementation 'com.squareup.okhttp3:okhttp:4.9.3' + implementation 'com.github.MikeOrtiz:TouchImageView:3.6' } } \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitychecker/apiservice/RetrofitClient.java b/app/src/main/java/com/utopiaindustries/qualitychecker/apiservice/RetrofitClient.java index 86c5693..8a6928f 100644 --- a/app/src/main/java/com/utopiaindustries/qualitychecker/apiservice/RetrofitClient.java +++ b/app/src/main/java/com/utopiaindustries/qualitychecker/apiservice/RetrofitClient.java @@ -19,8 +19,8 @@ import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { - //private final static String BASE_URL = "https://portal.utopiaindustries.pk/uind/"; - private final static String BASE_URL = "http://192.168.91.44:8081/uind/";//"http://192.168.91.44:8081/uind/";//"http://192.168.90.27:8080/uind/";//"http://192.168.91.16:8080/uind/"; + private final static String BASE_URL = "https://portal.utopiaindustries.pk/uind/"; + //private final static String BASE_URL = "http://192.168.91.44:8081/uind/";//"http://192.168.91.44:8081/uind/";//"http://192.168.90.27:8080/uind/";//"http://192.168.91.16:8080/uind/"; private static Retrofit retrofit; diff --git a/app/src/main/java/com/utopiaindustries/qualitychecker/service/NetworkService.java b/app/src/main/java/com/utopiaindustries/qualitychecker/service/NetworkService.java index 5a1f7a6..aef50b4 100644 --- a/app/src/main/java/com/utopiaindustries/qualitychecker/service/NetworkService.java +++ b/app/src/main/java/com/utopiaindustries/qualitychecker/service/NetworkService.java @@ -75,9 +75,11 @@ public class NetworkService extends Service { private void pushDataToInternet() { ReportRepository repository = new ReportRepository( this ); List reportWrappers = repository.findAllUnsynced(); + Log.e("ReportWrappers-Size: ",""+reportWrappers.size()); InspectionReportService service = InspectionReportService.getInstance(); try { List reports = getReports( reportWrappers ); + Log.e("Reports.size(): ",""+reports.size()); int size = reports.size(); if( size > 0 ){ NotificationHelper.showNotification( diff --git a/app/src/main/java/com/utopiaindustries/qualitychecker/ui/adapter/ImageAdapter.java b/app/src/main/java/com/utopiaindustries/qualitychecker/ui/adapter/ImageAdapter.java index 32f2164..35c3fc9 100644 --- a/app/src/main/java/com/utopiaindustries/qualitychecker/ui/adapter/ImageAdapter.java +++ b/app/src/main/java/com/utopiaindustries/qualitychecker/ui/adapter/ImageAdapter.java @@ -9,11 +9,13 @@ import android.view.ViewGroup; import android.widget.ImageView; import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.utopiaindustries.qualitychecker.R; +import com.utopiaindustries.qualitychecker.utils.FullScreenImageDialog; import java.util.List; @@ -54,6 +56,16 @@ public class ImageAdapter extends RecyclerView.Adapter marketplaces = Collections.singletonList("[ Marketplace ]"); String inspectionLevel, qualityLevelMajor, qualityLevelMinor; - List inspectionLabelList = new ArrayList<>(); - List qualityLabelList = new ArrayList<>(); + + String[] inspectionLevelArray = {"1", "2", "3"}; + String[] inspectionLevelQuality = {"1.0", "1.5", "2.5", "4.0"}; + + boolean userSpInspection = false; + boolean userSpMajor = false; + boolean userSpMinor = false; @Nullable @Override @@ -144,6 +149,8 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener populateSkuCheckpointsParams(store.getReport().getItems().get(0).getSku(), store.getReport().getItems().get(0).getMarketplace()); } + + populateInspectionSpinners(); } fri.setOnCheckedChangeListener((buttonView, isChecked) -> { @@ -202,10 +209,13 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener store.getReport().getItems().get(0).setInspectionLevel((long) Double.parseDouble(inspectionLevel)); - checkedBoxCartonSelected.setText(""); - checkedItemPerBoxSelected.setText(""); - checkedPiecesSelected.setText(""); - aqlSampleSize.setText(""); + if (userSpInspection) { + checkedBoxCartonSelected.setText(""); + checkedItemPerBoxSelected.setText(""); + checkedPiecesSelected.setText(""); + aqlSampleSize.setText(""); + } + userSpInspection = true; } } @@ -221,16 +231,16 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener public void onItemSelected(AdapterView parent, View view, int position, long id) { if (parent.getItemAtPosition(position) != null) { qualityLevelMajor = parent.getItemAtPosition(position).toString(); - Log.e("Quality-Major: ",""+qualityLevelMajor); + store.getReport().getItems().get(0).setMajorQualityLevel(Double.parseDouble(qualityLevelMajor)); - Log.e("Quality-Majorr: ",""+store.getReport().getItems().get(0).getMajorQualityLevel()); - - checkedBoxCartonSelected.setText(""); - checkedItemPerBoxSelected.setText(""); - checkedPiecesSelected.setText(""); - aqlSampleSize.setText(""); - + if (userSpMajor) { + checkedBoxCartonSelected.setText(""); + checkedItemPerBoxSelected.setText(""); + checkedPiecesSelected.setText(""); + aqlSampleSize.setText(""); + } + userSpMajor = true; } } @@ -246,16 +256,16 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener public void onItemSelected(AdapterView parent, View view, int position, long id) { if (parent.getItemAtPosition(position) != null) { qualityLevelMinor = parent.getItemAtPosition(position).toString(); - Log.e("Quality-Minor: ",""+qualityLevelMinor); store.getReport().getItems().get(0).setMinorQualityLevel(Double.parseDouble(qualityLevelMinor)); - Log.e("Quality-Minorr: ",""+store.getReport().getItems().get(0).getMinorQualityLevel()); - - checkedBoxCartonSelected.setText(""); - checkedItemPerBoxSelected.setText(""); - checkedPiecesSelected.setText(""); - aqlSampleSize.setText(""); + if (userSpMinor) { + checkedBoxCartonSelected.setText(""); + checkedItemPerBoxSelected.setText(""); + checkedPiecesSelected.setText(""); + aqlSampleSize.setText(""); + } + userSpMinor = true; } } @@ -345,14 +355,18 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener if (itemPerBox.getText().toString().isEmpty() || pieces.getText().toString().isEmpty()) { Toast.makeText(getContext(), "Enter Item/Pieces Per box", Toast.LENGTH_SHORT).show(); } else { - packsCount = (int) store.getProducts().get(0).getItemPerPack(); - piecesCount = (int) store.getProducts().get(0).getItemPerBox(); + packsCount = (int) store.getProducts().get(0).getItemPerBox(); + piecesCount = (int) store.getProducts().get(0).getItemPerPack(); int totalPacks = boxCount * packsCount; int totalPieces = totalPacks * piecesCount; + Log.e("totalPacks: ",""+totalPacks); + Log.e("totalPieces: ",""+totalPieces); itemPerBoxSelected.setText(String.valueOf(totalPacks)); + store.getReport().getItems().get(0).setPacksSelected(Long.parseLong(String.valueOf(totalPacks))); piecesSelected.setText(String.valueOf(totalPieces)); + store.getReport().getItems().get(0).setPiecesSelected(Long.parseLong(String.valueOf(totalPieces))); } store.getReport().getItems().get(0).setCartonsSelected(Long.parseLong(s.toString())); @@ -382,8 +396,8 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener if (itemPerBox.getText().toString().isEmpty() || pieces.getText().toString().isEmpty()) { Toast.makeText(getContext(), "Enter Item/Pieces Per box", Toast.LENGTH_SHORT).show(); } else { - packsCount = (int) store.getProducts().get(0).getItemPerPack(); - piecesCount = (int) store.getProducts().get(0).getItemPerBox(); + packsCount = (int) store.getProducts().get(0).getItemPerBox(); + piecesCount = (int) store.getProducts().get(0).getItemPerPack(); int totalPacks = boxCount * packsCount; int totalPieces = totalPacks * piecesCount; @@ -850,7 +864,7 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener } private void prePopulateData(List products) { - System.out.println("prePopulateData: " + store.getReport().getItems().get(0).getFnsku()); + //System.out.println("prePopulateData: " + store.getReport().getItems().get(0).getFnsku()); fri.setChecked(store.getReport().getFri()); refri.setChecked(!store.getReport().getFri()); // sku @@ -873,6 +887,22 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener title.setSelection(defaultTitleSelectionIndex); } + populateInspectionSpinners(); + + } + + private void populateInspectionSpinners() { + String defaultInspectionSelection = String.valueOf(store.getReport().getItems().get(0).getInspectionLevel()); + int defaultInspectionSelectionIndex = java.util.Arrays.asList(inspectionLevelArray).indexOf(defaultInspectionSelection); + sp_inspectionLevel.setSelection(defaultInspectionSelectionIndex); + + String defaultLevelMajorSelection = String.valueOf(store.getReport().getItems().get(0).getMajorQualityLevel()); + int defaultLevelMajorSelectionIndex = java.util.Arrays.asList(inspectionLevelQuality).indexOf(defaultLevelMajorSelection); + sp_qLevelMajor.setSelection(defaultLevelMajorSelectionIndex); + + String defaultLevelMinorSelection = String.valueOf(store.getReport().getItems().get(0).getMinorQualityLevel()); + int defaultLevelMinorSelectionIndex = java.util.Arrays.asList(inspectionLevelQuality).indexOf(defaultLevelMinorSelection); + sp_qLevelMinor.setSelection(defaultLevelMinorSelectionIndex); } private void populateItem(List products, boolean populateMarketplace) { @@ -901,17 +931,13 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener boxCarton.setText(boxCartonText); packagingDetails.setText(packagingDetailsText); - Log.e("Exception-BOX","***"+store.getReport().getItems().get(0).getCartonsSelected()); - Log.e("Exception**ITEM","***"+store.getReport().getItems().get(0).getPacksSelected()); - Log.e("Exception**PIECE","**"+store.getReport().getItems().get(0).getPiecesSelected()); - boxCartonSelected.setText(String.valueOf(store.getReport().getItems().get(0).getCartonsSelected())); itemPerBoxSelected.setText(String.valueOf(store.getReport().getItems().get(0).getPacksSelected())); piecesSelected.setText(String.valueOf(store.getReport().getItems().get(0).getPiecesSelected())); checkedBoxCartonSelected.setText(String.valueOf(store.getReport().getItems().get(0).getCheckedCartonsSelected())); - checkedItemPerBoxSelected.setText(String.valueOf(store.getReport().getItems().get(0).getCheckedPacksSelected())); - checkedPiecesSelected.setText(String.valueOf(store.getReport().getItems().get(0).getCheckedPiecesSelected())); + //checkedItemPerBoxSelected.setText(String.valueOf(store.getReport().getItems().get(0).getCheckedPacksSelected())); + //checkedPiecesSelected.setText(String.valueOf(store.getReport().getItems().get(0).getCheckedPiecesSelected())); cartonWeight.setText(String.valueOf(store.getReport().getItems().get(0).getCartonWeight())); cartonLength.setText(String.valueOf(store.getReport().getItems().get(0).getCartonLength())); @@ -934,7 +960,6 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener } } catch (Exception e) { - Log.e("Exception************","**********"); itemPerBox.setText("0"); pieces.setText("0"); boxCarton.setText("0"); @@ -1014,16 +1039,21 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener store.getReport().getItems().get(0).setMarketplace(marketplaceOption); } - String[] inspectionLevelArray = {"1", "2", "3"}; - String[] inspectionLevelQuality = {"1.0", "1.5", "2.5", "4.0"}; - ArrayAdapter adapterInspectionLevel = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, inspectionLevelArray); - sp_inspectionLevel.setAdapter(adapterInspectionLevel); +//if (store.getReport().getItems().get(0).getInspectionLevel() == 0) { + ArrayAdapter adapterInspectionLevel = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, inspectionLevelArray); + sp_inspectionLevel.setAdapter(adapterInspectionLevel); + // } - ArrayAdapter adapterLevelMajor = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, inspectionLevelQuality); - sp_qLevelMajor.setAdapter(adapterLevelMajor); + // if (store.getReport().getItems().get(0).getMajorQualityLevel() == 0) { + ArrayAdapter adapterLevelMajor = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, inspectionLevelQuality); + sp_qLevelMajor.setAdapter(adapterLevelMajor); + // } + + // if (store.getReport().getItems().get(0).getMinorQualityLevel() == 0) { + ArrayAdapter adapterLevelMinor = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, inspectionLevelQuality); + sp_qLevelMinor.setAdapter(adapterLevelMinor); + // } - ArrayAdapter adapterLevelMinor = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, inspectionLevelQuality); - sp_qLevelMinor.setAdapter(adapterLevelMinor); } @@ -1233,4 +1263,13 @@ public class FirstStepFragment extends Fragment implements View.OnClickListener }*/ } + + /*@Override + public void onResume() { + super.onResume(); + + userSpInspection = true; + userSpMajor = true; + userSpMinor = true; + }*/ } diff --git a/app/src/main/java/com/utopiaindustries/qualitychecker/utils/FullScreenImageDialog.java b/app/src/main/java/com/utopiaindustries/qualitychecker/utils/FullScreenImageDialog.java new file mode 100644 index 0000000..5d483fc --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitychecker/utils/FullScreenImageDialog.java @@ -0,0 +1,47 @@ +package com.utopiaindustries.qualitychecker.utils; + +import android.app.Dialog; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; + +import com.utopiaindustries.qualitychecker.R; + + +public class FullScreenImageDialog extends DialogFragment { + private Bitmap imageBitmap; + + public FullScreenImageDialog(Bitmap imageBitmap) { + this.imageBitmap = imageBitmap; + } + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + Dialog dialog = new Dialog(requireContext()); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(R.layout.dialog_fullscreen_image); + + /*ImageView imageView = dialog.findViewById(R.id.fullscreenImageView); + imageView.setImageBitmap(imageBitmap);*/ + + //imageView.setOnClickListener(v -> dismiss()); // Close on image click + ImageView imageView = dialog.findViewById(R.id.img_view); + imageView.setImageBitmap(imageBitmap); + + ImageView btnClose = dialog.findViewById(R.id.btn_close); + btnClose.setOnClickListener(v -> dismiss()); + + dialog.getWindow().setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.MATCH_PARENT + ); + return dialog; + } +} 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/layout/dialog_fullscreen_image.xml b/app/src/main/res/layout/dialog_fullscreen_image.xml new file mode 100644 index 0000000..3d958e7 --- /dev/null +++ b/app/src/main/res/layout/dialog_fullscreen_image.xml @@ -0,0 +1,31 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_first_step.xml b/app/src/main/res/layout/fragment_first_step.xml index 2b5e976..d2f35af 100644 --- a/app/src/main/res/layout/fragment_first_step.xml +++ b/app/src/main/res/layout/fragment_first_step.xml @@ -511,7 +511,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" - android:visibility="visible" + android:visibility="gone" android:layout_margin="5dp"/> @@ -349,14 +349,6 @@ android:layout_height="wrap_content" android:layout_weight="1" android:prompt="@string/spinner_title" />--> - + + @@ -417,7 +418,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" - android:text="Major" + android:text="Minor" android:textSize="16sp" android:textStyle="bold" />