diff --git a/android/RapidInventorySystem/app/src/main/java/lc/ris/android/BarcodeBroker.java b/android/RapidInventorySystem/app/src/main/java/lc/ris/android/BarcodeBroker.java index 9a20f4d4a2fa9ddf4d917be6d70cfc2c21d0e3f2..67409ae20f09a5f6007cec0827cb08dc57cb998f 100644 --- a/android/RapidInventorySystem/app/src/main/java/lc/ris/android/BarcodeBroker.java +++ b/android/RapidInventorySystem/app/src/main/java/lc/ris/android/BarcodeBroker.java @@ -16,6 +16,9 @@ import java.util.WeakHashMap; * getter on the activity, where they can register & unregister listeners as their lifecycle progresses. To * protect against memory leaks, this implementation only holds weak references to receivers. * + * Note that this class just transports the scanned transport; it is up to other code within RIS to make sense + * of the barcode and to decode the contents and associate it with an entityId. + * * @author Alex Leigh * @since mk1 */ @@ -30,10 +33,10 @@ public class BarcodeBroker { weakHashSet.remove(listener); } - public void publish(final String barcode) { - Log.i("RIS", "Publishing barcode scan: " + barcode); + public void publish(final String scannedCode) { + Log.i("RIS", "Publishing barcode scan: " + scannedCode); for (BarcodeListener listener : weakHashSet) { - listener.receiveBarcode(barcode); + listener.receiveBarcode(scannedCode); } } } diff --git a/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ScanBroadcastReceiver.java b/android/RapidInventorySystem/app/src/main/java/lc/ris/android/DataWedgeReceiver.java similarity index 70% rename from android/RapidInventorySystem/app/src/main/java/lc/ris/android/ScanBroadcastReceiver.java rename to android/RapidInventorySystem/app/src/main/java/lc/ris/android/DataWedgeReceiver.java index fdb3ed5fc13901943a2ee932ea26bd9305ce20b4..2db69f3273f27b3407d89c56ba70371a1efe8a62 100644 --- a/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ScanBroadcastReceiver.java +++ b/android/RapidInventorySystem/app/src/main/java/lc/ris/android/DataWedgeReceiver.java @@ -5,10 +5,17 @@ import android.content.Context; import android.content.Intent; import android.util.Log; -public class ScanBroadcastReceiver extends BroadcastReceiver { +/** + * This class receives intent messages from the Zebra DataWedge application and uses that to process + * barcodes in the RIS application. + * + * @author Alex Leigh + * @since mk1 + */ +public class DataWedgeReceiver extends BroadcastReceiver { private final ScanFragment scanFragment; - public ScanBroadcastReceiver(ScanFragment scanFragment) { + public DataWedgeReceiver(ScanFragment scanFragment) { this.scanFragment = scanFragment; } @@ -17,7 +24,7 @@ public class ScanBroadcastReceiver extends BroadcastReceiver { String action = intent.getAction(); if (action.equals(scanFragment.getResources().getString(R.string.activity_intent_filter_action))) { try { - displayScanResult(intent, "via Broadcast"); + displayScanResult(intent); } catch (Exception e) { // Do nothing } @@ -28,10 +35,11 @@ public class ScanBroadcastReceiver extends BroadcastReceiver { * This method is called when we receive a barcode scan from the Zebra DataWedge, which arrives * via an Android intent. */ - private void displayScanResult(Intent initiatingIntent, String howDataReceived) { + private void displayScanResult(Intent initiatingIntent) { // Every time we get a hardware scan, we clear the contents of the text box. String decodedSource = initiatingIntent.getStringExtra(scanFragment.getResources().getString(R.string.datawedge_intent_key_source)); - String decodedData = initiatingIntent.getStringExtra(scanFragment.getResources().getString(R.string.datawedge_intent_key_data)); + String decodedData = initiatingIntent.getStringExtra( + scanFragment.getResources().getString(R.string.datawedge_intent_key_data)); String decodedLabelType = initiatingIntent.getStringExtra(scanFragment.getResources().getString(R.string.datawedge_intent_key_label_type)); Log.i("RIS", "Received hardware scan: " + decodedData); diff --git a/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ItemFragment.java b/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ItemFragment.java index 3ab1819fd5c3c2d55a516387a05782e170c922b9..5cac8d6a9fa877e6e31dd3352ef5b7a8b2c2566c 100644 --- a/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ItemFragment.java +++ b/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ItemFragment.java @@ -47,8 +47,7 @@ public class ItemFragment extends Fragment implements BarcodeListener { @Override public void receiveBarcode(String barcode) { RapidInventoryClient client = ((MainActivity) getActivity()).getRisClient(); - Entity entity = client.getEntity(barcode); - + Entity entity = client.getInventoryStore().getEntity(barcode); final EditText et = getView().findViewById(R.id.formEntityNameInput); et.setText(entity.getEntityName()); } diff --git a/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ScanFragment.java b/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ScanFragment.java index 344f3278ce41cf8d9ebf18f126a6a43b375525c9..455c4244f70ab5c0484601b2b5a670eb11848bc7 100644 --- a/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ScanFragment.java +++ b/android/RapidInventorySystem/app/src/main/java/lc/ris/android/ScanFragment.java @@ -22,7 +22,7 @@ import androidx.fragment.app.Fragment; * @since mk1 */ public class ScanFragment extends Fragment { - private ScanBroadcastReceiver myBroadcastReceiver; + private DataWedgeReceiver myBroadcastReceiver; public ScanFragment() { // Required empty public constructor @@ -33,7 +33,7 @@ public class ScanFragment extends Fragment { IntentFilter filter = new IntentFilter(); filter.addCategory(Intent.CATEGORY_DEFAULT); filter.addAction(getResources().getString(R.string.activity_intent_filter_action)); - myBroadcastReceiver = new ScanBroadcastReceiver(this); + myBroadcastReceiver = new DataWedgeReceiver(this); getActivity().registerReceiver(myBroadcastReceiver, filter); } diff --git a/android/RapidInventorySystem/app/src/main/java/lc/ris/client/InventoryStore.java b/android/RapidInventorySystem/app/src/main/java/lc/ris/client/InventoryStore.java new file mode 100644 index 0000000000000000000000000000000000000000..1b1f2f1ae7076631576ecdae47faddbab7940202 --- /dev/null +++ b/android/RapidInventorySystem/app/src/main/java/lc/ris/client/InventoryStore.java @@ -0,0 +1,18 @@ +package lc.ris.client; + +/** + * Classes implementing this interface provide access to a store of inventory information within the + * Rapid Inventory System. + * + * @author Alex Leigh + * @since mk1 + */ +public interface InventoryStore { + Entity getEntity(final String entityId); + + /** + * Attempt to locate an {@link Entity} based on a barcode scan. Where required this will attempt to decode the + * contents of the barcode. + */ + Entity getEntityFromBarcode(final String scan); +} diff --git a/android/RapidInventorySystem/app/src/main/java/lc/ris/client/RAMInventoryStore.java b/android/RapidInventorySystem/app/src/main/java/lc/ris/client/RAMInventoryStore.java new file mode 100644 index 0000000000000000000000000000000000000000..206d5988e59105117658d07a8f709889841e7f23 --- /dev/null +++ b/android/RapidInventorySystem/app/src/main/java/lc/ris/client/RAMInventoryStore.java @@ -0,0 +1,20 @@ +package lc.ris.client; + +/** + * This implementation of {@link InventoryStore} holds all of its information in RAM, and it most useful for + * debugging & test scenarios. + * + * @author Alex Leigh + * @since mk1 + */ +public class RAMInventoryStore implements InventoryStore { + @Override + public Entity getEntity(String entityId) { + return new Entity(entityId, "Entity - " + entityId); + } + + @Override + public Entity getEntityFromBarcode(String scan) { + return getEntity(scan); + } +} diff --git a/android/RapidInventorySystem/app/src/main/java/lc/ris/client/RapidInventoryClient.java b/android/RapidInventorySystem/app/src/main/java/lc/ris/client/RapidInventoryClient.java index 09224dcfdcb82e7c075c858b540f99c803cdad1d..84177c16ad21a8960040d8597f06233fdfa2b2e5 100644 --- a/android/RapidInventorySystem/app/src/main/java/lc/ris/client/RapidInventoryClient.java +++ b/android/RapidInventorySystem/app/src/main/java/lc/ris/client/RapidInventoryClient.java @@ -13,9 +13,11 @@ import java.util.Objects; */ public class RapidInventoryClient { private final String universe; + private final InventoryStore inventoryStore; public RapidInventoryClient(String universe) { this.universe = universe; + this.inventoryStore = new RAMInventoryStore(); } @Override @@ -38,7 +40,7 @@ public class RapidInventoryClient { return Objects.hash(universe); } - public Entity getEntity(final String entityId) { - return new Entity(entityId, "Test Object"); + public InventoryStore getInventoryStore() { + return inventoryStore; } } diff --git a/android/RapidInventorySystem/app/src/main/res/layout/fragment_item.xml b/android/RapidInventorySystem/app/src/main/res/layout/fragment_item.xml index a78a6a13bb002e833b1c94e7b3824210f41ef1b7..338b97633c27e80924a4f4d9091bfaca4f2015cf 100644 --- a/android/RapidInventorySystem/app/src/main/res/layout/fragment_item.xml +++ b/android/RapidInventorySystem/app/src/main/res/layout/fragment_item.xml @@ -20,7 +20,7 @@ android:ems="10" android:id="@+id/entityName" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/scanFragmentView" + app:layout_constraintTop_toBottomOf="@id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Name" app:layout_constraintEnd_toEndOf="parent"> @@ -28,9 +28,35 @@ + + + + + +