diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/fragment/OverviewStartFragment.java b/app/src/main/java/xyz/zedler/patrick/grocy/fragment/OverviewStartFragment.java index 85c738bb8..58fc010ba 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/fragment/OverviewStartFragment.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/fragment/OverviewStartFragment.java @@ -21,6 +21,7 @@ package xyz.zedler.patrick.grocy.fragment; import android.animation.LayoutTransition; +import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -46,13 +47,14 @@ import xyz.zedler.patrick.grocy.model.Event; import xyz.zedler.patrick.grocy.model.SnackbarMessage; import xyz.zedler.patrick.grocy.util.ClickUtil; +import xyz.zedler.patrick.grocy.util.HoneywellScannerUtil; import xyz.zedler.patrick.grocy.util.ResUtil; import xyz.zedler.patrick.grocy.util.UiUtil; import xyz.zedler.patrick.grocy.util.ViewUtil; import xyz.zedler.patrick.grocy.view.FormattedTextView; import xyz.zedler.patrick.grocy.viewmodel.OverviewStartViewModel; -public class OverviewStartFragment extends BaseFragment { +public class OverviewStartFragment extends BaseFragment implements HoneywellScannerUtil.BarcodeListener { private final static String TAG = OverviewStartFragment.class.getSimpleName(); @@ -63,6 +65,7 @@ public class OverviewStartFragment extends BaseFragment { private OverviewStartViewModel viewModel; private ClickUtil clickUtil; private AlertDialog dialogFabInfo; + private HoneywellScannerUtil honeywellScannerUtil; @Override public View onCreateView( @@ -85,6 +88,7 @@ public void onDestroyView() { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { activity = (MainActivity) requireActivity(); + honeywellScannerUtil = new HoneywellScannerUtil(activity, this); viewModel = new ViewModelProvider(this).get(OverviewStartViewModel.class); binding.setViewModel(viewModel); binding.setFragment(this); @@ -295,9 +299,60 @@ public void updateConnectivity(boolean online) { viewModel.downloadData(false); } + @Override + public void onResume() { + super.onResume(); + honeywellScannerUtil.activate(); + } + @Override + public void onPause() { + super.onPause(); + honeywellScannerUtil.deactivate(); + } + @NonNull @Override public String toString() { return TAG; } + + @Override + public void onBarcodeRecognized(String barcode, byte[] barcodeBytes) { + AlertDialog actionChooseDialog = new MaterialAlertDialogBuilder(activity, R.style.ThemeOverlay_Grocy_AlertDialog) + .setItems( + new CharSequence[]{ + getString(R.string.title_consume), + getString(R.string.title_purchase), + getString(R.string.title_transfer), + getString(R.string.title_inventory) + }, (dialog, which) -> { + switch (which) { + case 0: + activity.navUtil.navigate( + R.id.consumeFragment, + new ConsumeFragmentArgs.Builder().setScannedBarcode(barcode).build().toBundle() + ); + break; + case 1: + activity.navUtil.navigate( + R.id.purchaseFragment, + new PurchaseFragmentArgs.Builder().setScannedBarcode(barcode).build().toBundle() + ); + break; + case 2: + activity.navUtil.navigate( + R.id.transferFragment, + new TransferFragmentArgs.Builder().setScannedBarcode(barcode).build().toBundle() + ); + break; + case 3: + activity.navUtil.navigate( + R.id.inventoryFragment, + new InventoryFragmentArgs.Builder().setScannedBarcode(barcode).build().toBundle() + ); + break; + } + }).create(); + actionChooseDialog.show(); + } } diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/util/HoneywellScannerUtil.java b/app/src/main/java/xyz/zedler/patrick/grocy/util/HoneywellScannerUtil.java index 614b37ab7..d591dc987 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/util/HoneywellScannerUtil.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/util/HoneywellScannerUtil.java @@ -17,159 +17,159 @@ import xyz.zedler.patrick.grocy.Constants; public class HoneywellScannerUtil { - private static final String TAG = HoneywellScannerUtil.class.getSimpleName(); - - private static final String ACTION_BARCODE_DATA = "xyz.zedler.patrick.grocy.BARCODE_DATA"; - - private static final String ACTION_CLAIM_SCANNER = "com.honeywell.aidc.action.ACTION_CLAIM_SCANNER"; - private static final String ACTION_RELEASE_SCANNER = "com.honeywell.aidc.action.ACTION_RELEASE_SCANNER"; - - private static final String EXTRA_PROFILE = "com.honeywell.aidc.extra.EXTRA_PROFILE"; - private static final String EXTRA_PROFILE_VARIANT_DEFAULT = "DEFAULT"; - - private static final String EXTRA_PROPERTIES = "com.honeywell.aidc.extra.EXTRA_PROPERTIES"; - - private static final String EXTRA_SCANNER = "com.honeywell.aidc.extra.EXTRA_SCANNER"; - private static final String EXTRA_SCANNER_VARIANT_INTERNAL = "dcs.scanner.imager"; - private static final String EXTRA_SCANNER_VARIANT_EXTERNAL = "dcs.scanner.ring"; - - private static final String PROPERTY_DATA_PROCESSOR_INTENT = "DPR_DATA_INTENT"; - private static final String PROPERTY_DATA_PROCESSOR_INTENT_ACTION = "DPR_DATA_INTENT_ACTION"; - private static final String PROPERTY_CODE_128_ENABLED = "DEC_CODE128_ENABLED"; - private static final String PROPERTY_CODE_39_ENABLED = "DEC_CODE39_ENABLED"; - private static final String PROPERTY_CODE_39_CHECK_DIGIT_MODE = "DEC_CODE39_CHECK_DIGIT_MODE"; - private static final String PROPERTY_CODE_39_CHECK_DIGIT_MODE_VARIANT_CHECK = "check"; - private static final String PROPERTY_CODE_39_CHECK_DIGIT_MODE_VARIANT_CHECK_AND_STRIP = "checkAndStrip"; - private static final String PROPERTY_CODE_39_CHECK_DIGIT_MODE_VARIANT_NO_CHECK = "noCheck"; - private static final String PROPERTY_CODE_93_ENABLED = "DEC_CODE93_ENABLED"; - private static final String PROPERTY_CODABAR_ENABLED = "DEC_CODABAR_ENABLED"; - private static final String PROPERTY_CODABAR_CHECK_DIGIT_MODE = "DEC_CODABAR_CHECK_DIGIT_MODE"; - private static final String PROPERTY_CODABAR_CHECK_DIGIT_MODE_VARIANT_CHECK = "check"; - private static final String PROPERTY_CODABAR_CHECK_DIGIT_MODE_VARIANT_CHECK_AND_STRIP = "checkAndStrip"; - private static final String PROPERTY_CODABAR_CHECK_DIGIT_MODE_VARIANT_NO_CHECK = "noCheck"; - private static final String PROPERTY_EAN_13_ENABLED = "DEC_EAN13_ENABLED"; - private static final String PROPERTY_EAN_13_CHECK_DIGIT_TRANSMIT_ENABLED = "DEC_EAN13_CHECK_DIGIT_TRANSMIT"; - private static final String PROPERTY_EAN_8_ENABLED = "DEC_EAN8_ENABLED"; - private static final String PROPERTY_EAN_8_CHECK_DIGIT_TRANSMIT_ENABLED = "DEC_EAN8_CHECK_DIGIT_TRANSMIT"; - private static final String PROPERTY_UPC_A_ENABLED = "DEC_UPCA_ENABLE"; // note: missing 'd' is according to reference impl! - private static final String PROPERTY_UPC_A_CHECK_DIGIT_TRANSMIT_ENABLED = "DEC_UPCA_CHECK_DIGIT_TRANSMIT"; - private static final String PROPERTY_UPC_E_ENABLED = "DEC_UPCE0_ENABLED"; // note: there is also UPCE1/UPCE_E1 - private static final String PROPERTY_UPC_E_CHECK_DIGIT_TRANSMIT_ENABLED = "DEC_UPCE_CHECK_DIGIT_TRANSMIT"; - private static final String PROPERTY_QR_ENABLED = "DEC_QR_ENABLED"; - private static final String PROPERTY_PDF_417_ENABLED = "DEC_PDF417_ENABLED"; - private static final String PROPERTY_AZTEC_ENABLED = "DEC_AZTEC_ENABLED"; - private static final String PROPERTY_DATAMATRIX_ENABLED = "DEC_DATAMATRIX_ENABLED"; - private static final String PROPERTY_RSS_ENABLED = "DEC_RSS_14_ENABLED"; - private static final String PROPERTY_RSS_EXPANDED_ENABLED = "DEC_RSS_EXPANDED_ENABLED"; - - - private final Activity activity; - private final SharedPreferences sharedPreferences; - private final BarcodeListener barcodeListener; - - private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String barcode = intent.getStringExtra("data"); - byte[] barcodeBytes = intent.getByteArrayExtra("dataBytes"); - Log.i(TAG, "Received barcode: " + barcode); - HoneywellScannerUtil.this.barcodeListener.onBarcodeRecognized(barcode, barcodeBytes); - } - }; - - public HoneywellScannerUtil(Activity activity, BarcodeListener barcodeListener) { - this.activity = activity; - this.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity.getBaseContext()); - this.barcodeListener = barcodeListener; + private static final String TAG = HoneywellScannerUtil.class.getSimpleName(); + + private static final String ACTION_BARCODE_DATA = "xyz.zedler.patrick.grocy.BARCODE_DATA"; + + private static final String ACTION_CLAIM_SCANNER = "com.honeywell.aidc.action.ACTION_CLAIM_SCANNER"; + private static final String ACTION_RELEASE_SCANNER = "com.honeywell.aidc.action.ACTION_RELEASE_SCANNER"; + + private static final String EXTRA_PROFILE = "com.honeywell.aidc.extra.EXTRA_PROFILE"; + private static final String EXTRA_PROFILE_VARIANT_DEFAULT = "DEFAULT"; + + private static final String EXTRA_PROPERTIES = "com.honeywell.aidc.extra.EXTRA_PROPERTIES"; + + private static final String EXTRA_SCANNER = "com.honeywell.aidc.extra.EXTRA_SCANNER"; + private static final String EXTRA_SCANNER_VARIANT_INTERNAL = "dcs.scanner.imager"; + private static final String EXTRA_SCANNER_VARIANT_EXTERNAL = "dcs.scanner.ring"; + + private static final String PROPERTY_DATA_PROCESSOR_INTENT = "DPR_DATA_INTENT"; + private static final String PROPERTY_DATA_PROCESSOR_INTENT_ACTION = "DPR_DATA_INTENT_ACTION"; + private static final String PROPERTY_CODE_128_ENABLED = "DEC_CODE128_ENABLED"; + private static final String PROPERTY_CODE_39_ENABLED = "DEC_CODE39_ENABLED"; + private static final String PROPERTY_CODE_39_CHECK_DIGIT_MODE = "DEC_CODE39_CHECK_DIGIT_MODE"; + private static final String PROPERTY_CODE_39_CHECK_DIGIT_MODE_VARIANT_CHECK = "check"; + private static final String PROPERTY_CODE_39_CHECK_DIGIT_MODE_VARIANT_CHECK_AND_STRIP = "checkAndStrip"; + private static final String PROPERTY_CODE_39_CHECK_DIGIT_MODE_VARIANT_NO_CHECK = "noCheck"; + private static final String PROPERTY_CODE_93_ENABLED = "DEC_CODE93_ENABLED"; + private static final String PROPERTY_CODABAR_ENABLED = "DEC_CODABAR_ENABLED"; + private static final String PROPERTY_CODABAR_CHECK_DIGIT_MODE = "DEC_CODABAR_CHECK_DIGIT_MODE"; + private static final String PROPERTY_CODABAR_CHECK_DIGIT_MODE_VARIANT_CHECK = "check"; + private static final String PROPERTY_CODABAR_CHECK_DIGIT_MODE_VARIANT_CHECK_AND_STRIP = "checkAndStrip"; + private static final String PROPERTY_CODABAR_CHECK_DIGIT_MODE_VARIANT_NO_CHECK = "noCheck"; + private static final String PROPERTY_EAN_13_ENABLED = "DEC_EAN13_ENABLED"; + private static final String PROPERTY_EAN_13_CHECK_DIGIT_TRANSMIT_ENABLED = "DEC_EAN13_CHECK_DIGIT_TRANSMIT"; + private static final String PROPERTY_EAN_8_ENABLED = "DEC_EAN8_ENABLED"; + private static final String PROPERTY_EAN_8_CHECK_DIGIT_TRANSMIT_ENABLED = "DEC_EAN8_CHECK_DIGIT_TRANSMIT"; + private static final String PROPERTY_UPC_A_ENABLED = "DEC_UPCA_ENABLE"; // note: missing 'd' is according to reference impl! + private static final String PROPERTY_UPC_A_CHECK_DIGIT_TRANSMIT_ENABLED = "DEC_UPCA_CHECK_DIGIT_TRANSMIT"; + private static final String PROPERTY_UPC_E_ENABLED = "DEC_UPCE0_ENABLED"; // note: there is also UPCE1/UPCE_E1 + private static final String PROPERTY_UPC_E_CHECK_DIGIT_TRANSMIT_ENABLED = "DEC_UPCE_CHECK_DIGIT_TRANSMIT"; + private static final String PROPERTY_QR_ENABLED = "DEC_QR_ENABLED"; + private static final String PROPERTY_PDF_417_ENABLED = "DEC_PDF417_ENABLED"; + private static final String PROPERTY_AZTEC_ENABLED = "DEC_AZTEC_ENABLED"; + private static final String PROPERTY_DATAMATRIX_ENABLED = "DEC_DATAMATRIX_ENABLED"; + private static final String PROPERTY_RSS_ENABLED = "DEC_RSS_14_ENABLED"; + private static final String PROPERTY_RSS_EXPANDED_ENABLED = "DEC_RSS_EXPANDED_ENABLED"; + + + private final Activity activity; + private final SharedPreferences sharedPreferences; + private final BarcodeListener barcodeListener; + + private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String barcode = intent.getStringExtra("data"); + byte[] barcodeBytes = intent.getByteArrayExtra("dataBytes"); + Log.i(TAG, "Received barcode: " + barcode); + HoneywellScannerUtil.this.barcodeListener.onBarcodeRecognized(barcode, barcodeBytes); } - - public void activate() { - ContextCompat.registerReceiver(this.activity, broadcastReceiver, new IntentFilter(ACTION_BARCODE_DATA), ContextCompat.RECEIVER_EXPORTED); - claimScanner(); - } - - public void deactivate() { - this.activity.unregisterReceiver(broadcastReceiver); - releaseScanner(); - } - - private void claimScanner() { - this.activity.sendBroadcast( - new Intent(ACTION_CLAIM_SCANNER) - .putExtra(EXTRA_PROPERTIES, buildClaimProperties()) - .putExtra(EXTRA_SCANNER, EXTRA_SCANNER_VARIANT_INTERNAL) - .putExtra(EXTRA_PROFILE, EXTRA_PROFILE_VARIANT_DEFAULT) - ); + }; + + public HoneywellScannerUtil(Activity activity, BarcodeListener barcodeListener) { + this.activity = activity; + this.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity.getBaseContext()); + this.barcodeListener = barcodeListener; + } + + public void activate() { + ContextCompat.registerReceiver(this.activity, broadcastReceiver, new IntentFilter(ACTION_BARCODE_DATA), ContextCompat.RECEIVER_EXPORTED); + claimScanner(); + } + + public void deactivate() { + this.activity.unregisterReceiver(broadcastReceiver); + releaseScanner(); + } + + private void claimScanner() { + this.activity.sendBroadcast( + new Intent(ACTION_CLAIM_SCANNER) + .putExtra(EXTRA_PROPERTIES, buildClaimProperties()) + .putExtra(EXTRA_SCANNER, EXTRA_SCANNER_VARIANT_INTERNAL) + .putExtra(EXTRA_PROFILE, EXTRA_PROFILE_VARIANT_DEFAULT) + ); + } + + private Bundle buildClaimProperties() { + Bundle properties = new Bundle(); + + properties.putBoolean(PROPERTY_DATA_PROCESSOR_INTENT, true); + properties.putString(PROPERTY_DATA_PROCESSOR_INTENT_ACTION, ACTION_BARCODE_DATA); + + Set enabledBarcodeFormatsSet = this.sharedPreferences.getStringSet( + Constants.SETTINGS.SCANNER.BARCODE_FORMATS, + Constants.SETTINGS_DEFAULT.SCANNER.BARCODE_FORMATS + ); + + for (String barcodeFormat : enabledBarcodeFormatsSet) { + switch (barcodeFormat) { + case Constants.BarcodeFormats.BARCODE_FORMAT_CODE128: + properties.putBoolean(PROPERTY_CODE_128_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_CODE39: + properties.putBoolean(PROPERTY_CODE_39_ENABLED, true); + properties.putString(PROPERTY_CODE_39_CHECK_DIGIT_MODE, PROPERTY_CODE_39_CHECK_DIGIT_MODE_VARIANT_CHECK); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_CODE93: + properties.putBoolean(PROPERTY_CODE_93_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_EAN13: + properties.putBoolean(PROPERTY_EAN_13_ENABLED, true); + properties.putBoolean(PROPERTY_EAN_13_CHECK_DIGIT_TRANSMIT_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_EAN8: + properties.putBoolean(PROPERTY_EAN_8_ENABLED, true); + properties.putBoolean(PROPERTY_EAN_8_CHECK_DIGIT_TRANSMIT_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_ITF: + // not supported + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_UPCA: + properties.putBoolean(PROPERTY_UPC_A_ENABLED, true); + properties.putBoolean(PROPERTY_UPC_A_CHECK_DIGIT_TRANSMIT_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_UPCE: + properties.putBoolean(PROPERTY_UPC_E_ENABLED, true); + properties.putBoolean(PROPERTY_UPC_E_CHECK_DIGIT_TRANSMIT_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_QR: + properties.putBoolean(PROPERTY_QR_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_PDF417: + properties.putBoolean(PROPERTY_PDF_417_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_MATRIX: + properties.putBoolean(PROPERTY_DATAMATRIX_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_RSS14: + properties.putBoolean(PROPERTY_RSS_ENABLED, true); + break; + case Constants.BarcodeFormats.BARCODE_FORMAT_RSSE: + properties.putBoolean(PROPERTY_RSS_EXPANDED_ENABLED, true); + break; + } } - private Bundle buildClaimProperties() { - Bundle properties = new Bundle(); - - properties.putBoolean(PROPERTY_DATA_PROCESSOR_INTENT, true); - properties.putString(PROPERTY_DATA_PROCESSOR_INTENT_ACTION, ACTION_BARCODE_DATA); - - Set enabledBarcodeFormatsSet = this.sharedPreferences.getStringSet( - Constants.SETTINGS.SCANNER.BARCODE_FORMATS, - Constants.SETTINGS_DEFAULT.SCANNER.BARCODE_FORMATS - ); - - for (String barcodeFormat : enabledBarcodeFormatsSet) { - switch (barcodeFormat) { - case Constants.BarcodeFormats.BARCODE_FORMAT_CODE128: - properties.putBoolean(PROPERTY_CODE_128_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_CODE39: - properties.putBoolean(PROPERTY_CODE_39_ENABLED, true); - properties.putString(PROPERTY_CODE_39_CHECK_DIGIT_MODE, PROPERTY_CODE_39_CHECK_DIGIT_MODE_VARIANT_CHECK); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_CODE93: - properties.putBoolean(PROPERTY_CODE_93_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_EAN13: - properties.putBoolean(PROPERTY_EAN_13_ENABLED, true); - properties.putBoolean(PROPERTY_EAN_13_CHECK_DIGIT_TRANSMIT_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_EAN8: - properties.putBoolean(PROPERTY_EAN_8_ENABLED, true); - properties.putBoolean(PROPERTY_EAN_8_CHECK_DIGIT_TRANSMIT_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_ITF: - // not supported - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_UPCA: - properties.putBoolean(PROPERTY_UPC_A_ENABLED, true); - properties.putBoolean(PROPERTY_UPC_A_CHECK_DIGIT_TRANSMIT_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_UPCE: - properties.putBoolean(PROPERTY_UPC_E_ENABLED, true); - properties.putBoolean(PROPERTY_UPC_E_CHECK_DIGIT_TRANSMIT_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_QR: - properties.putBoolean(PROPERTY_QR_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_PDF417: - properties.putBoolean(PROPERTY_PDF_417_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_MATRIX: - properties.putBoolean(PROPERTY_DATAMATRIX_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_RSS14: - properties.putBoolean(PROPERTY_RSS_ENABLED, true); - break; - case Constants.BarcodeFormats.BARCODE_FORMAT_RSSE: - properties.putBoolean(PROPERTY_RSS_EXPANDED_ENABLED, true); - break; - } - } - - return properties; - } + return properties; + } - private void releaseScanner() { - this.activity.sendBroadcast(new Intent(ACTION_RELEASE_SCANNER)); - } + private void releaseScanner() { + this.activity.sendBroadcast(new Intent(ACTION_RELEASE_SCANNER)); + } - public interface BarcodeListener { - void onBarcodeRecognized(String barcode, byte[] barcodeBytes); - } + public interface BarcodeListener { + void onBarcodeRecognized(String barcode, byte[] barcodeBytes); + } } diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/ConsumeViewModel.java b/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/ConsumeViewModel.java index 0025052a7..1759ed5c8 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/ConsumeViewModel.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/ConsumeViewModel.java @@ -87,6 +87,7 @@ public class ConsumeViewModel extends BaseViewModel { private List unitConversions; private List barcodes; private HashMap quantityUnitHashMap; + private String scannedBarcode; private final MutableLiveData isLoadingLive; private final MutableLiveData infoFullscreenLive; @@ -127,6 +128,11 @@ public ConsumeViewModel(@NonNull Application application, ConsumeFragmentArgs ar quickModeEnabled = new MutableLiveData<>(quickModeStart); barcodes = new ArrayList<>(); + + scannedBarcode = args.getScannedBarcode(); + if (args.getScannedBarcode() != null) { + loadFromDatabase(false); + } } public FormDataConsume getFormData() { @@ -144,9 +150,15 @@ public void loadFromDatabase(boolean downloadAfterLoading) { ); if (downloadAfterLoading) { downloadData(false); - } else if (queueEmptyAction != null) { - queueEmptyAction.run(); - queueEmptyAction = null; + } else { + if (queueEmptyAction != null) { + queueEmptyAction.run(); + queueEmptyAction = null; + } + if (scannedBarcode != null) { + onBarcodeRecognized(scannedBarcode); + scannedBarcode = null; + } } }, error -> onError(error, TAG)); } diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/InventoryViewModel.java b/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/InventoryViewModel.java index a8acf0972..365809399 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/InventoryViewModel.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/InventoryViewModel.java @@ -98,6 +98,7 @@ public class InventoryViewModel extends BaseViewModel { private boolean productWillBeFilled; private final int maxDecimalPlacesAmount; private final int decimalPlacesPriceInput; + private String scannedBarcode; public InventoryViewModel(@NonNull Application application, InventoryFragmentArgs args) { super(application); @@ -132,6 +133,11 @@ public InventoryViewModel(@NonNull Application application, InventoryFragmentArg quickModeEnabled = new MutableLiveData<>(quickModeStart); barcodes = new ArrayList<>(); + + scannedBarcode = args.getScannedBarcode(); + if (scannedBarcode != null) { + loadFromDatabase(false); + } } public FormDataInventory getFormData() { @@ -154,6 +160,10 @@ public void loadFromDatabase(boolean downloadAfterLoading) { queueEmptyAction.run(); queueEmptyAction = null; } + if (scannedBarcode != null) { + onBarcodeRecognized(scannedBarcode); + scannedBarcode = null; + } } }, error -> onError(error, TAG)); } diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/PurchaseViewModel.java b/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/PurchaseViewModel.java index 7bef76de9..2fcc16fe0 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/PurchaseViewModel.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/PurchaseViewModel.java @@ -107,6 +107,7 @@ public class PurchaseViewModel extends BaseViewModel { private List shoppingListItems; private HashMap shoppingListItemHashMap; private ArrayList batchShoppingListItemIds; + private String scannedBarcode; private final MutableLiveData isLoadingLive; private final MutableLiveData infoFullscreenLive; @@ -169,6 +170,11 @@ public PurchaseViewModel(@NonNull Application application, PurchaseFragmentArgs if (hasStoredPurchase()) { setQueueEmptyAction(() -> setStoredPurchase(storedPurchase)); } + + scannedBarcode = args.getScannedBarcode(); + if (args.getScannedBarcode() != null) { + loadFromDatabase(false); + } } public FormDataPurchase getFormData() { @@ -206,6 +212,10 @@ public void loadFromDatabase(boolean downloadAfterLoading) { if (batchShoppingListItemIds != null) { fillWithShoppingListItem(); } + if (scannedBarcode != null) { + onBarcodeRecognized(scannedBarcode); + scannedBarcode = null; + } } }, error -> onError(error, TAG)); } diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/TransferViewModel.java b/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/TransferViewModel.java index 0f88b7466..f20415f8d 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/TransferViewModel.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/viewmodel/TransferViewModel.java @@ -95,6 +95,7 @@ public class TransferViewModel extends BaseViewModel { private Runnable queueEmptyAction; private boolean productWillBeFilled; private final int maxDecimalPlacesAmount; + private String scannedBarcode; public TransferViewModel(@NonNull Application application, TransferFragmentArgs args) { super(application); @@ -125,6 +126,11 @@ public TransferViewModel(@NonNull Application application, TransferFragmentArgs quickModeEnabled = new MutableLiveData<>(quickModeStart); barcodes = new ArrayList<>(); + + scannedBarcode = args.getScannedBarcode(); + if (args.getScannedBarcode() != null) { + loadFromDatabase(false); + } } public FormDataTransfer getFormData() { @@ -141,9 +147,15 @@ public void loadFromDatabase(boolean downloadAfterLoading) { formData.getProductsLive().setValue(Product.getActiveAndStockEnabledProductsOnly(products)); if (downloadAfterLoading) { downloadData(false); - } else if (queueEmptyAction != null) { - queueEmptyAction.run(); - queueEmptyAction = null; + } else { + if (queueEmptyAction != null) { + queueEmptyAction.run(); + queueEmptyAction = null; + } + if (scannedBarcode != null) { + onBarcodeRecognized(scannedBarcode); + scannedBarcode = null; + } } }, error -> onError(error, TAG)); } diff --git a/app/src/main/res/navigation/navigation_main.xml b/app/src/main/res/navigation/navigation_main.xml index 5ce425f21..6659a4cc2 100644 --- a/app/src/main/res/navigation/navigation_main.xml +++ b/app/src/main/res/navigation/navigation_main.xml @@ -71,6 +71,11 @@ app:argType="string" app:nullable="true" android:defaultValue="@null" /> + + + +