diff --git a/android/FakeDependency.jar b/android/FakeDependency.jar new file mode 100644 index 0000000..15cb0ec Binary files /dev/null and b/android/FakeDependency.jar differ diff --git a/app/build.gradle b/app/build.gradle index 233a4aa..fa2e0b7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,19 +6,21 @@ android { buildConfig true } - compileSdk 34 + compileSdk 35 defaultConfig { applicationId "com.csl.cs108ademoapp" - minSdk 21 - targetSdk 34 - versionCode 41 - versionName "2.14.0" + minSdk 23 + targetSdk 35 + versionCode 42 + versionName "2.14.31" } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.google.android.material:material:1.11.0' - implementation project(':cs108library4a') + implementation 'com.google.android.material:material:1.12.0' + implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'com.github.hannesa2:paho.mqtt.android:4.3.beta2' implementation project(':cslibrary4a') -} +} \ No newline at end of file diff --git a/app/release/cs108ademo-20240416-v2.14.0-app-release.zip b/app/release/cs108ademo-20240416-v2.14.0-app-release.zip deleted file mode 100644 index 0da2510..0000000 Binary files a/app/release/cs108ademo-20240416-v2.14.0-app-release.zip and /dev/null differ diff --git a/app/release/cs108ademo-20241202-v2.14.31-36-app-release.zip b/app/release/cs108ademo-20241202-v2.14.31-36-app-release.zip new file mode 100644 index 0000000..d758cdc Binary files /dev/null and b/app/release/cs108ademo-20241202-v2.14.31-36-app-release.zip differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7b55caf..4d213c0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,26 +1,52 @@ - + - - + + + + + + + + + + + + + + + + + + + + + @@ -31,16 +57,17 @@ android:name="MainActivity" android:exported="true" android:screenOrientation="portrait"> - - - - + + + + + \ No newline at end of file diff --git a/cslibrary4a/src/main/java/com/csl/cslibrary4a/CustomAlertDialog.java b/app/src/main/java/com/csl/cs108ademoapp/CustomAlertDialog.java similarity index 93% rename from cslibrary4a/src/main/java/com/csl/cslibrary4a/CustomAlertDialog.java rename to app/src/main/java/com/csl/cs108ademoapp/CustomAlertDialog.java index 1ff08d4..cadef7e 100644 --- a/cslibrary4a/src/main/java/com/csl/cslibrary4a/CustomAlertDialog.java +++ b/app/src/main/java/com/csl/cs108ademoapp/CustomAlertDialog.java @@ -1,4 +1,4 @@ -package com.csl.cslibrary4a; +package com.csl.cs108ademoapp; import android.app.Activity; import android.app.AlertDialog; @@ -28,7 +28,7 @@ public void onClick(DialogInterface dialog, int buttonId) { ans_false.run(); } }); - dialog.setIcon(android.R.drawable.ic_dialog_alert); + dialog.setIcon(R.drawable.alert); dialog.show(); return true; } diff --git a/app/src/main/java/com/csl/cs108ademoapp/CustomIME.java b/app/src/main/java/com/csl/cs108ademoapp/CustomIME.java index bbef1de..38fd482 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/CustomIME.java +++ b/app/src/main/java/com/csl/cs108ademoapp/CustomIME.java @@ -12,16 +12,40 @@ import com.csl.cslibrary4a.RfidReaderChipData; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; import java.util.ArrayList; import static android.content.ContentValues.TAG; public class CustomIME extends InputMethodService { //implements KeyboardView.OnKeyboardActionListener { Handler mHandler = new Handler(); + InputConnection ic; + DatagramSocket datagramSocket; + InetAddress hostAddress = null; @Override public void onCreate() { super.onCreate(); + try { + hostAddress = hostAddress = InetAddress.getByName("127.0.0.1"); + Log.i("Hello", "udpSocket hostAddress is valid"); + datagramSocket = new DatagramSocket(9394, hostAddress); + if (datagramSocket == null) Log.i("Hello", "udpSocket is null"); + else Log.i("Hello", "udpSocket is valid"); + //byte[] buffer = new byte[16]; + //DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("localhost"), 14552); + //udpsocket.send(packet); + } catch (SocketException e) { + Log.e("UDP: ", "udpSocket Socket Error: ", e); + } catch (IOException e) { + Log.e("UDP Send: ", "udpSocket IO Error", e); + } catch (Exception ex) { + Log.i("Hello", "udpSocket Exception Error: " + ex.getMessage()); + } appendToLog("CustomIME.onCreate()"); } @Override @@ -35,17 +59,50 @@ public View onCreateInputView() { keyboardView.setKeyboard(keyboard); //keyboardView.setOnKeyboardActionListener(this); } + ic = getCurrentInputConnection(); + Log.i("Hello", "udpSocket inputConnection is " + (ic == null ? "null" : "valid")); return keyboardView; } @Override public void onDestroy() { appendToLog("CustomIME.onDestroy()"); mHandler.removeCallbacks(serviceRunnable); + datagramSocket.close(); super.onDestroy(); } + Runnable yourRunnable = new Runnable() { + @Override + public void run() { + byte[] buffer = new byte[250]; + Log.i("Hello", "udpSocket yourRunnable starts"); + DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length); + ic = getCurrentInputConnection(); + try { + Log.i("Hello", "udpSocket try starts"); +// String outString = "Client say: bye bye"; +// buffer = outString.getBytes(); +// DatagramPacket outDatagramPackat = new DatagramPacket(buffer, buffer.length, hostAddress, 9394); +// datagramSocket.send(outDatagramPackat); +// Log.i("Hello", "udpSocket sent data"); + + String strDataReceived; + do { + strDataReceived = null; + datagramSocket.receive(datagramPacket); + strDataReceived = new String(datagramPacket.getData(), 0, datagramPacket.getLength()); + Log.i("Hello", "udpSocket received data: " + strDataReceived); + ic.commitText(strDataReceived, 1); + } while (strDataReceived != null && strDataReceived.length() != 0); + } catch (IOException ex) { + Log.i("Hello", "udpSocket receive IOException Error: " + ex.toString()); + } + } + }; + ArrayList epcArrayList = new ArrayList(); InventoryRfidTask inventoryRfidTask; + InventoryBarcodeTask inventoryBarcodeTask; boolean inventoring = false; private Runnable serviceRunnable = new Runnable() { @Override @@ -53,63 +110,88 @@ public void run() { String strCurrentIME = Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); String strCompare = getPackageName(); appendToLog("CustomIME Debug 0 with strCurrentIME = " + strCurrentIME + ", strCompare = " + strCompare); - if (strCurrentIME.contains(strCompare) == false) return; - - mHandler.postDelayed(serviceRunnable, 1000); - if (MainActivity.sharedObjects == null) return; - if (MainActivity.csLibrary4A == null) return; - - if (inventoring == false) { MainActivity.sharedObjects.serviceArrayList.clear(); epcArrayList.clear(); } - if (MainActivity.mContext == null) return; - appendToLog("CustomIME Debug 1 with activityActive = " + MainActivity.activityActive + ", wedged = " + MainActivity.wedged + ", isBleConnected = " + MainActivity.csLibrary4A.isBleConnected()); - if (MainActivity.activityActive == false /*&& MainActivity.wedged*/ && MainActivity.csLibrary4A.isBleConnected()) { - if (MainActivity.csLibrary4A.getTriggerButtonStatus() == false) { - appendToLog("CustomIME Debug 2"); - startStopHandler(); - inventoring = false; - } else if (inventoring == false) { - appendToLog("CustomIME Debug 3"); - if (MainActivity.sharedObjects.runningInventoryRfidTask == false && MainActivity.sharedObjects.runningInventoryBarcodeTask == false && MainActivity.csLibrary4A.mrfidToWriteSize() == 0) { + if (strCurrentIME.contains(strCompare) == false) { } + else if (MainActivity.sharedObjects == null || MainActivity.csLibrary4A == null) { + if (false) { new Thread(yourRunnable).start(); } + } + else if (MainActivity.mContext == null) return; + else { + if (inventoring == false) { + MainActivity.sharedObjects.serviceArrayList.clear(); + epcArrayList.clear(); + } + appendToLog("CustomIME Debug 1 with activityActive = " + MainActivity.activityActive + ", wedged = " + MainActivity.wedged + ", isBleConnected = " + MainActivity.csLibrary4A.isBleConnected()); + if (MainActivity.activityActive == false /*&& MainActivity.wedged*/ && MainActivity.csLibrary4A.isBleConnected()) { + if (MainActivity.csLibrary4A.getTriggerButtonStatus() == false) { + appendToLog("CustomIME Debug 2 with runningInventoryRfidTask = " + MainActivity.sharedObjects.runningInventoryRfidTask); + appendToLog("CustomIME Debug 2 with runningInventoryBarcodeTask = " + MainActivity.sharedObjects.runningInventoryBarcodeTask); startStopHandler(); - inventoring = true; - } - } else { - appendToLog("CustomIME Debug 4"); - while (MainActivity.sharedObjects.serviceArrayList.size() != 0) { - String strEpc = MainActivity.sharedObjects.serviceArrayList.get(0); MainActivity.sharedObjects.serviceArrayList.remove(0); - boolean matched = false; - for (int i = 0; i < epcArrayList.size(); i++) { - if (epcArrayList.get(i).matches(strEpc)) { - matched = true; - break; - } + inventoring = false; + } else if (inventoring == false) { + appendToLog("CustomIME Debug 3 with runningInventoryRfidTask = " + MainActivity.sharedObjects.runningInventoryRfidTask + ", and mrfidToWriteSize = " + MainActivity.csLibrary4A.mrfidToWriteSize()); + appendToLog("CustomIME Debug 3 with runningInventoryBarcodeTask = " + MainActivity.sharedObjects.runningInventoryBarcodeTask); + if (MainActivity.sharedObjects.runningInventoryRfidTask == false && MainActivity.sharedObjects.runningInventoryBarcodeTask == false && MainActivity.csLibrary4A.mrfidToWriteSize() == 0) { + startStopHandler(); + inventoring = true; } - if (matched == false && strEpc != null) { - epcArrayList.add(strEpc); - InputConnection ic = getCurrentInputConnection(); - if (MainActivity.wedgePrefix != null) strEpc = MainActivity.wedgePrefix + strEpc; - if (MainActivity.wedgeSuffix != null) strEpc += MainActivity.wedgeSuffix; - switch (MainActivity.wedgeDelimiter) { - default: - strEpc += "\n"; - break; - case 0x09: - strEpc += "\t"; - break; - case 0x2C: - strEpc += ","; - break; - case 0x20: - strEpc += " "; - break; - case -1: - break; + } else { + appendToLog("CustomIME Debug 4"); + while (MainActivity.sharedObjects.serviceArrayList.size() != 0) { + String strEpc = MainActivity.sharedObjects.serviceArrayList.get(0); + MainActivity.sharedObjects.serviceArrayList.remove(0); + appendToLog("CustomIME Debug 4A with strEpc = " + strEpc); + String strSgtin = null; + if (MainActivity.csLibrary4A.getWedgeOutput() == 1) { + strSgtin = MainActivity.csLibrary4A.getUpcSerial(strEpc); + MainActivity.csLibrary4A.appendToLog("strSgtin = " + (strSgtin == null ? "null" : strSgtin)); + if (strSgtin == null) strEpc = null; + } + boolean matched = false; + if (epcArrayList != null && strEpc != null) { + for (int i = 0; i < epcArrayList.size(); i++) { + if (epcArrayList.get(i).matches(strEpc)) { + matched = true; + break; + } + } + } + if (matched == false && strEpc != null) { + epcArrayList.add(strEpc); + InputConnection ic = getCurrentInputConnection(); + String strValue = strEpc; + if (strSgtin != null) strValue = strSgtin; + if (MainActivity.csLibrary4A.getWedgePrefix() != null) + strValue = MainActivity.csLibrary4A.getWedgePrefix() + strValue; + if (MainActivity.csLibrary4A.getWedgeSuffix() != null) + strValue += MainActivity.csLibrary4A.getWedgeSuffix(); + MainActivity.csLibrary4A.appendToLog("CustomIME, serviceRunnable: wedgeDelimiter = " + MainActivity.csLibrary4A.getWedgeDelimiter()); + switch (MainActivity.csLibrary4A.getWedgeDelimiter()) { + default: + strValue += "\n"; + break; + case 0x09: + strValue += "\t"; + break; + case 0x2C: + strValue += ","; + break; + case 0x20: + strValue += " "; + break; + case -1: + break; + } + MainActivity.csLibrary4A.appendToLog("CustomIME BtData to Keyboard: " + strValue); + ic.commitText(strValue, 1); } - ic.commitText(strEpc, 1); } } } } + int iDelayms = 500; + if (inventoring) iDelayms = 100; + MainActivity.csLibrary4A.appendToLog("CustomIME BtData set next time as " + iDelayms); + mHandler.postDelayed(serviceRunnable, iDelayms); } }; @@ -121,17 +203,26 @@ void startStopHandler() { if (inventoryRfidTask != null) { if (inventoryRfidTask.getStatus() == AsyncTask.Status.RUNNING) started = true; } + if (inventoryBarcodeTask != null) { + if (inventoryBarcodeTask.getStatus() == AsyncTask.Status.RUNNING) started = true; + } appendToLog("CustomIME Debug 10"); if ((started && MainActivity.csLibrary4A.getTriggerButtonStatus()) || (started == false && MainActivity.csLibrary4A.getTriggerButtonStatus() == false)) return; if (started == false) { + appendToLog("CustomIME Debug 11 with BtData wedgeOutput = " + MainActivity.csLibrary4A.getWedgeOutput()); + if (MainActivity.csLibrary4A.getWedgeOutput() == 2) { + inventoryBarcodeTask = new InventoryBarcodeTask(); + inventoryBarcodeTask.execute(); + } else { + MainActivity.csLibrary4A.setPowerLevel(MainActivity.csLibrary4A.getWedgePower()); + MainActivity.csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY_COMPACT); + inventoryRfidTask = new InventoryRfidTask(); + inventoryRfidTask.execute(); + } + } else { appendToLog("CustomIME Debug 11"); - MainActivity.csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY); - inventoryRfidTask = new InventoryRfidTask(); - inventoryRfidTask.execute(); - } - else { - appendToLog("CustomIME Debug 11"); - inventoryRfidTask.taskCancelReason = InventoryRfidTask.TaskCancelRReason.BUTTON_RELEASE; + if (inventoryRfidTask != null) inventoryRfidTask.taskCancelReason = InventoryRfidTask.TaskCancelRReason.BUTTON_RELEASE; + if (inventoryBarcodeTask != null) inventoryBarcodeTask.taskCancelReason = InventoryBarcodeTask.TaskCancelRReason.BUTTON_RELEASE; } } } \ No newline at end of file diff --git a/app/src/main/java/com/csl/cs108ademoapp/DrawerListContent.java b/app/src/main/java/com/csl/cs108ademoapp/DrawerListContent.java index 8dbc07f..4ed9640 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/DrawerListContent.java +++ b/app/src/main/java/com/csl/cs108ademoapp/DrawerListContent.java @@ -55,18 +55,18 @@ public static DrawerPositions toDrawerPosition(int x) { case 14: return BAPCARD; case 15: return COLDCHAIN; case 16: return AURASENSE; - //case 17: return KILOWAY; - case 17: return LONGJING; - case 18: return AXZON; + case 17: return KILOWAY; + case 18: return LONGJING; + case 19: return AXZON; //case 18: return RFMICRON; - case 19: return FDMICRO; - case 20: return CTESIUS; - case 21: return ASYGNTAG; - - case 22: return REGISTER; - case 23: return READWRITEUSER; - case 24: return WEDGE; - case 25: return DIRECTWEDGE; + case 20: return FDMICRO; + case 21: return CTESIUS; + case 22: return ASYGNTAG; + + case 23: return REGISTER; + case 24: return READWRITEUSER; + case 25: return WEDGE; + case 26: return DIRECTWEDGE; } return null; } @@ -92,17 +92,17 @@ public static DrawerPositions toDrawerPosition(int x) { addItem(new DrawerItem("14", "uEm CS9010 BAP ID Card", R.drawable.dl_loc)); addItem(new DrawerItem("15", "uEm Cold Chain CS8300", R.drawable.dl_loc)); addItem(new DrawerItem("16", "uEm Aura-sense", R.drawable.dl_loc)); - //addItem(new DrawerItem("17", "Kiloway KX2005X-BL", R.drawable.dl_rr)); - addItem(new DrawerItem("17", "EL-N2ESL CS6861", R.drawable.dl_rr)); - addItem(new DrawerItem("18", "Axzon", R.drawable.dl_loc)); - addItem(new DrawerItem("19", "FM13DT160", R.drawable.dl_loc)); - addItem(new DrawerItem("20", "Landa CTESIUS", R.drawable.dl_loc)); - addItem(new DrawerItem("21", "Asygn AS321x", R.drawable.dl_loc)); - - addItem(new DrawerItem("22", "Register Tag", R.drawable.dl_rr)); - addItem(new DrawerItem("23", "Large sized memory read/write", R.drawable.dl_rr)); - addItem(new DrawerItem("24", "Wedge", R.drawable.dl_rr)); - addItem(new DrawerItem("25", "Direct Wedge", R.drawable.dl_rr)); + addItem(new DrawerItem("17", "Kiloway KX2005X-BL", R.drawable.dl_rr)); + addItem(new DrawerItem("18", "EL-N2ESL CS6861", R.drawable.dl_rr)); + addItem(new DrawerItem("19", "Axzon", R.drawable.dl_loc)); + addItem(new DrawerItem("20", "FM13DT160", R.drawable.dl_loc)); + addItem(new DrawerItem("21", "Landa CTESIUS", R.drawable.dl_loc)); + addItem(new DrawerItem("22", "Asygn AS321x", R.drawable.dl_loc)); + + addItem(new DrawerItem("23", "Register Tag", R.drawable.dl_rr)); + addItem(new DrawerItem("24", "Large sized memory read/write", R.drawable.dl_rr)); + addItem(new DrawerItem("25", "Wedge", R.drawable.dl_rr)); + addItem(new DrawerItem("26", "Direct Wedge", R.drawable.dl_rr)); } private static void addItem(DrawerItem item) { diff --git a/app/src/main/java/com/csl/cs108ademoapp/InventoryBarcodeTask.java b/app/src/main/java/com/csl/cs108ademoapp/InventoryBarcodeTask.java index a5efc1e..5a3e703 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/InventoryBarcodeTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/InventoryBarcodeTask.java @@ -13,7 +13,7 @@ import java.util.ArrayList; public class InventoryBarcodeTask extends AsyncTask { - final boolean DEBUG = false; + final boolean DEBUG = false, ALLOW_WEDGE = true; public enum TaskCancelRReason { NULL, INVALD_REQUEST, DESTORY, STOP, BUTTON_RELEASE, TIMEOUT } @@ -33,7 +33,7 @@ public enum TaskCancelRReason { protected void onPreExecute() { MainActivity.sharedObjects.runningInventoryBarcodeTask = true; - button.setText("Stop"); if (button1 != null) button1.setText("Stop"); + if (button != null) button.setText("Stop"); if (button1 != null) button1.setText("Stop"); total = 0; allTotal = 0; yield = 0; if (tagsList != null) { yield = tagsList.size(); @@ -49,6 +49,7 @@ protected void onPreExecute() { MainActivity.csLibrary4A.barcodeInventory(true); if (DEBUG) MainActivity.csLibrary4A.appendToLog("InventoryBarcodeFragment.InventoryRfidTask.onPreExecute()"); + MainActivity.csLibrary4A.appendToLog("setVibrateOn A 3 with getInventoryVibrate as " + MainActivity.csLibrary4A.getInventoryVibrate() + ", bUseVibrateMode0 as " + bUseVibrateMode0); if (MainActivity.csLibrary4A.getInventoryVibrate() && bUseVibrateMode0 == false) MainActivity.csLibrary4A.setVibrateOn(3); } @@ -131,6 +132,9 @@ protected void onProgressUpdate(String... output) { } } if (match == false) { + if (ALLOW_WEDGE) MainActivity.sharedObjects.serviceArrayList.add(output[1]); + MainActivity.csLibrary4A.appendToLog(output[1] + " is added to MainActivity.shareObjects.serviceArrayList with size = " + MainActivity.sharedObjects.serviceArrayList.size()); + ReaderDevice readerDevice = new ReaderDevice("", output[1], false, "", 1, 0); if (tagsList != null) { if (bAdd2End) tagsList.add(readerDevice); @@ -165,6 +169,7 @@ protected void onProgressUpdate(String... output) { } } if (validVibrate) { + MainActivity.csLibrary4A.appendToLog("setVibrateOn b 1"); MainActivity.csLibrary4A.setVibrateOn(1); bStartVibrateWaiting = true; handler.postDelayed(runnableStartVibrate, MainActivity.csLibrary4A.getVibrateTime()); @@ -233,6 +238,7 @@ protected void onPostExecute(String result) { private TextView barcodeRateView; private boolean noToast; CustomMediaPlayer playerO, playerN; + public InventoryBarcodeTask() { } public InventoryBarcodeTask(ArrayList tagsList, ReaderListAdapter readerListAdapter, EditText registerBarValue, TextView barcodeRunTime, TextView barcodeVoltageLevel, TextView barcodeYieldView, Button button, Button button1, TextView barcodeRateView, boolean noToast) { @@ -254,7 +260,7 @@ public InventoryBarcodeTask(ArrayList tagsList, ReaderListAdapter void DeviceConnectTask4InventoryEnding(TaskCancelRReason taskCancelRReason) { if (readerListAdapter != null) readerListAdapter.notifyDataSetChanged(); MainActivity.csLibrary4A.barcodeInventory(false); - if (DEBUG) MainActivity.csLibrary4A.appendToLog("DeviceConnectTask4InventoryEnding(): sent setBarcodeOn(false)"); + if (true) MainActivity.csLibrary4A.appendToLog("DeviceConnectTask4InventoryEnding(): sent setBarcodeOn(false)"); if (taskCancelReason == null) { new Handler().postDelayed(new Runnable() { @Override @@ -277,10 +283,11 @@ public void run() { break; } } - button.setText(textButton); + if (button != null) button.setText(textButton); if (button1 != null) button1.setText(btextButton1); } MainActivity.sharedObjects.runningInventoryBarcodeTask = false; + MainActivity.csLibrary4A.appendToLog("setVibrateOn C 0"); MainActivity.csLibrary4A.setVibrateOn(0); } } \ No newline at end of file diff --git a/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java b/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java index 62e446b..fa59af1 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java @@ -93,11 +93,10 @@ void inventoryHandler_setup() { MainActivity.mSensorConnector.mSensorDevice.turnOn(true); if (ALLOW_RTSAVE) { saveExternalTask = new SaveList2ExternalTask(false); - try { - saveExternalTask.openServer(false); + if (saveExternalTask.openServer(false)) { serverConnectValid = true; MainActivity.csLibrary4A.appendToLog("openServer is done"); - } catch (Exception ex) { + } else { MainActivity.csLibrary4A.appendToLog("openServer has Exception"); } } @@ -109,13 +108,13 @@ void inventoryHandler_setup() { + ", getVibrateModeSetting = " + MainActivity.csLibrary4A.getVibrateModeSetting() ); if (MainActivity.csLibrary4A.getInventoryVibrate() && bUseVibrateMode0 == false && MainActivity.csLibrary4A.getVibrateModeSetting() == 1) bValidVibrateNewAll = true; - MainActivity.csLibrary4A.appendToLog("bValidVibrateNewAll = " + bValidVibrateNewAll + ". If true, setVibrate_2"); + MainActivity.csLibrary4A.appendToLog("setVibrateOn d 2 with bValidVibrateNewAll = " + bValidVibrateNewAll); if (bValidVibrateNewAll) MainActivity.csLibrary4A.setVibrateOn(2); } @Override protected void onPreExecute() { - inventoryHandler_setup(); + //inventoryHandler_setup(); } byte[] notificationData; @@ -449,11 +448,12 @@ void tagHandler() { else strTidCompared = "E28011"; } MainActivity.csLibrary4A.appendToLog("strTidCompared = " + strTidCompared); - if (strTidCompared.matches("E282402")) { } + if (strTidCompared.matches("E28011")) { } + else if (strTidCompared.matches("E2806894") && MainActivity.mDid.matches("E2806894C")) { } + else if (strTidCompared.matches("E281D")) { } + else if (strTidCompared.matches("E282402")) { } else if (strTidCompared.matches("E282403")) { } else if (strTidCompared.matches("E282405")) { } - else if (strTidCompared.matches("E2806894") && MainActivity.mDid.matches("E2806894C")) { } - else if (strTidCompared.matches("E28011")) { } else { //if (strMdid.matches("E280B0")) boolean bMatched = false; if (strExtra1 != null && strExtra1.indexOf(strTidCompared) == 0) { @@ -584,12 +584,14 @@ else if (match == false) { if (bAdd2End) tagsList.add(readerDevice); else tagsList.add(0, readerDevice); SharedObjects.TagsIndex tagsIndex = new SharedObjects.TagsIndex(strAddresss, tagsList.size() - 1); MainActivity.sharedObjects.tagsIndexList.add(tagsIndex); Collections.sort(MainActivity.sharedObjects.tagsIndexList); + MainActivity.csLibrary4A.appendToLog("openServer: serverConnectValid is " + serverConnectValid); if (serverConnectValid && ALLOW_RTSAVE && true) { try { // saveExternalTask = new SaveList2ExternalTask(); // saveExternalTask.openServer(); String msgOutput = saveExternalTask.createJSON(null, readerDevice).toString(); MainActivity.csLibrary4A.appendToLog("Json = " + msgOutput); saveExternalTask.write2Server(msgOutput); + MainActivity.csLibrary4A.appendToLog("openServer: write2Server data = " + msgOutput); // saveExternalTask.closeServer(); MainActivity.csLibrary4A.appendToLog("write2Server is done"); @@ -687,6 +689,7 @@ else if (match == false) { } if (validVibrate) { + MainActivity.csLibrary4A.appendToLog("setVibrateOn E with bUseVibrateMode0 as " + bUseVibrateMode0); if (bUseVibrateMode0) MainActivity.csLibrary4A.setVibrateOn(1); else MainActivity.csLibrary4A.setVibrateOn(2); bStartVibrateWaiting = true; int timeout = MainActivity.csLibrary4A.getVibrateWindow() * 1000; @@ -728,6 +731,7 @@ public void run() { @Override public void run() { bStartVibrateWaiting = false; + MainActivity.csLibrary4A.appendToLog("setVibrateOn F1 with bUseVibrateMode0 as " + bUseVibrateMode0); if (bUseVibrateMode0 == false) MainActivity.csLibrary4A.setVibrateOn(0); } }; @@ -747,7 +751,9 @@ protected void onPostExecute(String result) { DeviceConnectTask4InventoryEnding(taskCancelReason); } - public InventoryRfidTask() { } + public InventoryRfidTask() { + inventoryHandler_setup(); + } public InventoryRfidTask(Context context, int extra1Bank, int extra2Bank, int data1_count, int data2_count, int data1_offset, int data2_offset, boolean invalidRequest, boolean beepEnable, ArrayList tagsList, ReaderListAdapter readerListAdapter, TextView geigerTagRssiView, @@ -784,6 +790,7 @@ public InventoryRfidTask(Context context, int extra1Bank, int extra2Bank, int da playerN = MainActivity.sharedObjects.playerN; MainActivity.csLibrary4A.appendToLogView("playerO and playerN is created"); } + inventoryHandler_setup(); } boolean popRequest = false; Toast mytoast; @@ -792,12 +799,8 @@ void DeviceConnectTask4InventoryEnding(TaskCancelRReason taskCancelReason) { MainActivity.csLibrary4A.abortOperation(); //added in case previous command end is received with inventory stopped MainActivity.csLibrary4A.appendToLog("serverConnectValid = " + serverConnectValid); if (serverConnectValid && ALLOW_RTSAVE) { - try { - saveExternalTask.closeServer(); - MainActivity.csLibrary4A.appendToLog("closeServer is done"); - } catch (Exception ex) { - MainActivity.csLibrary4A.appendToLog("closeServer has Exception"); - } + if (saveExternalTask.closeServer()) MainActivity.csLibrary4A.appendToLog("closeServer is done"); + else MainActivity.csLibrary4A.appendToLog("closeServer has Exception"); } MainActivity.csLibrary4A.appendToLog("INVENDING: Ending with endingRequest = " + endingRequest); if (MainActivity.mContext == null) return; @@ -837,6 +840,7 @@ void DeviceConnectTask4InventoryEnding(TaskCancelRReason taskCancelReason) { } MainActivity.mSensorConnector.mLocationDevice.turnOn(false); MainActivity.mSensorConnector.mSensorDevice.turnOn(false); + MainActivity.csLibrary4A.appendToLog("setVibrateOn F 0"); MainActivity.csLibrary4A.setVibrateOn(0); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java b/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java index de7d2eb..fddae73 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java +++ b/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java @@ -1,17 +1,10 @@ package com.csl.cs108ademoapp; -import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.net.Uri; -import android.os.Handler; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.drawerlayout.widget.DrawerLayout; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; +import android.os.Handler; import android.util.Log; import android.view.Gravity; import android.view.View; @@ -20,18 +13,42 @@ import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import androidx.drawerlayout.widget.DrawerLayout; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; + import com.csl.cs108ademoapp.DrawerListContent.DrawerPositions; import com.csl.cs108ademoapp.adapters.DrawerListAdapter; -import com.csl.cs108ademoapp.fragments.*; -import com.csl.cs108library4a.Cs108Library4A; +import com.csl.cs108ademoapp.fragments.AboutFragment; +import com.csl.cs108ademoapp.fragments.AccessReadWriteFragment; +import com.csl.cs108ademoapp.fragments.AccessReadWriteUserFragment; +import com.csl.cs108ademoapp.fragments.AccessRegisterFragment; +import com.csl.cs108ademoapp.fragments.AccessSecurityFragment; +import com.csl.cs108ademoapp.fragments.AuraSenseFragment; +import com.csl.cs108ademoapp.fragments.AxzonSelectorFragment; +import com.csl.cs108ademoapp.fragments.ColdChainFragment; +import com.csl.cs108ademoapp.fragments.ConnectionFragment; +import com.csl.cs108ademoapp.fragments.DirectWedgeFragment; +import com.csl.cs108ademoapp.fragments.FdmicroFragment; +import com.csl.cs108ademoapp.fragments.HomeFragment; +import com.csl.cs108ademoapp.fragments.HomeSpecialFragment; +import com.csl.cs108ademoapp.fragments.ImpinjFragment; +import com.csl.cs108ademoapp.fragments.ImpinjM775Fragment; +import com.csl.cs108ademoapp.fragments.InventoryFragment; +import com.csl.cs108ademoapp.fragments.InventoryRfidSearchFragment; +import com.csl.cs108ademoapp.fragments.InventoryRfidSimpleFragment; +import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; +import com.csl.cs108ademoapp.fragments.KilowayFragment; +import com.csl.cs108ademoapp.fragments.LongjingFragment; +import com.csl.cs108ademoapp.fragments.SettingFilterFragment; +import com.csl.cs108ademoapp.fragments.SettingFragment; +import com.csl.cs108ademoapp.fragments.TestFragment; +import com.csl.cs108ademoapp.fragments.Ucode8Fragment; +import com.csl.cs108ademoapp.fragments.UcodeFragment; +import com.csl.cslibrary4a.Cs108Library4A; import com.csl.cslibrary4a.ReaderDevice; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.InputStreamReader; - public class MainActivity extends AppCompatActivity { final boolean DEBUG = false; final String TAG = "Hello"; public static boolean activityActive = false; @@ -40,6 +57,7 @@ public class MainActivity extends AppCompatActivity { //Tag to identify the currently displayed fragment Fragment fragment = null; protected static final String TAG_CONTENT_FRAGMENT = "ContentFragment"; + public static boolean isHomeFragment = false; public static TextView mLogView; private DrawerLayout mDrawerLayout; @@ -51,11 +69,8 @@ public class MainActivity extends AppCompatActivity { public static SharedObjects sharedObjects; public static SensorConnector mSensorConnector; public static ReaderDevice tagSelected; - Handler mHandler = new Handler(); - PendingIntent mPendingIntent; - IntentFilter writeTagFilters[]; - String[][] techList; + Handler mHandler = new Handler(); public static String mDid; public static int selectHold; public static int selectFor; public static class Config { @@ -69,8 +84,9 @@ protected void onCreate(Bundle savedInstanceState) { if (savedInstanceState == null) Log.i(TAG, "MainActivity.onCreate: NULL savedInstanceState"); else Log.i(TAG, "MainActivity.onCreate: VALID savedInstanceState"); } - - setContentView(R.layout.activity_main); + Log.i("Hello", "PackageName is " + getPackageName()); + if (getPackageName().matches("com.csl.updwedgeservice")) setContentView(R.layout.activity_main1); + else setContentView(R.layout.activity_main); mTitle = getTitle(); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); @@ -89,8 +105,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) selectItem(drawerPositionsDefault); - if (DEBUG) Log.i(TAG, "MainActivity.onCreate.onCreate: END"); - loadWedgeSettingFile(); + if (true) Log.i(TAG, "MainActivity.onCreate.onCreate: END"); } @Override @@ -130,6 +145,7 @@ protected void onStop() { protected void onDestroy() { if (DEBUG) csLibrary4A.appendToLog("MainActivity.onDestroy()"); if (true) { csLibrary4A.disconnect(true); } + csLibrary4A = null; super.onDestroy(); } @@ -315,7 +331,6 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in permissionRequesting = false; } - public void sfnClicked(View view) { selectItem(DrawerPositions.SPECIAL); } @@ -389,7 +404,7 @@ private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { if (DEBUG) Log.i(TAG, "MainActivity.onItemClick: position = " + position + ", id = " + id); - selectItem(DrawerListContent.DrawerPositions.toDrawerPosition(position)); + selectItem(DrawerPositions.toDrawerPosition(position)); } } @@ -403,43 +418,4 @@ private void readFromIntent(Intent intent) { if (DEBUG) csLibrary4A.appendToLog("onNewIntent !!! readFromIntent entry"); String action = intent.getAction(); } - - public static String fileName = "SimpleWedgeSettings"; - public static String wedgePrefix = null, wedgeSuffix = null; - public static int wedgeDelimiter = 0x0a, wedgePower = 300; - void loadWedgeSettingFile() { - File path = this.getFilesDir(); - File file = new File(path, fileName); - boolean bNeedDefault = true, DEBUG = false; - if (file.exists()) { - int length = (int) file.length(); - byte[] bytes = new byte[length]; - try { - InputStream instream = new FileInputStream(file); - if (instream != null) { - InputStreamReader inputStreamReader = new InputStreamReader(instream); - BufferedReader bufferedReader = new BufferedReader(inputStreamReader); - String line; - while ((line = bufferedReader.readLine()) != null) { - if (true) csLibrary4A.appendToLog("Data read = " + line); - String[] dataArray = line.split(","); - if (dataArray.length == 2) { - if (dataArray[0].matches("wedgePower")) { - wedgePower = Integer.valueOf(dataArray[1]); - } else if (dataArray[0].matches("wedgePrefix")) { - wedgePrefix = dataArray[1]; - } else if (dataArray[0].matches("wedgeSuffix")) { - wedgeSuffix = dataArray[1]; - } else if (dataArray[0].matches("wedgeDelimiter")) { - wedgeDelimiter = Integer.valueOf(dataArray[1]); - } - } - } - } - instream.close(); - } catch (Exception ex) { - // - } - } - } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/MyForegroundService.java b/app/src/main/java/com/csl/cs108ademoapp/MyForegroundService.java new file mode 100644 index 0000000..2729069 --- /dev/null +++ b/app/src/main/java/com/csl/cs108ademoapp/MyForegroundService.java @@ -0,0 +1,433 @@ +package com.csl.cs108ademoapp; + +import static android.Manifest.permission.BLUETOOTH_CONNECT; +import static android.Manifest.permission.BLUETOOTH_SCAN; +import static com.csl.cs108ademoapp.MainActivity.mContext; +import static com.csl.cs108ademoapp.MyForegroundService.ForegroundServiceState.CLOUDCONNECT; +import static com.csl.cs108ademoapp.MyForegroundService.ForegroundServiceState.CONNECT; +import static com.csl.cs108ademoapp.MyForegroundService.ForegroundServiceState.CONNECTED; +import static com.csl.cs108ademoapp.MyForegroundService.ForegroundServiceState.INVENTORY; +import static com.csl.cs108ademoapp.MyForegroundService.ForegroundServiceState.NULL; +import static com.csl.cs108ademoapp.MyForegroundService.ForegroundServiceState.SCAN; +import static com.csl.cs108ademoapp.MyForegroundService.ForegroundServiceState.WAIT; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ServiceInfo; +import android.os.Binder; +import android.os.Build; +import android.os.Handler; +import android.os.IBinder; +import android.util.Log; +import android.widget.Toast; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.core.app.NotificationCompat; + +import com.csl.cs108ademoapp.fragments.AboutFragment; +import com.csl.cslibrary4a.Cs108Library4A; +import com.csl.cslibrary4a.BluetoothGatt; +import com.csl.cslibrary4a.ReaderDevice; +import com.csl.cslibrary4a.RfidReaderChipData; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Random; + +public class MyForegroundService extends Service { + Handler mHandler = new Handler(); + public static final String CHANNEL_ID = "ForegroundServiceChannelA"; + public static final int SERVICE_ID = 1; + NotificationManager notificationManager; + NotificationCompat.Builder notificationCompatBuilder; + Cs108Library4A csLibrary4A; + ReaderDevice readerDevice; + SaveList2ExternalTask saveExternalTask; boolean isHttpServerOpened; + MyMqttClient myMqttClient; + ArrayList epcArrayList = new ArrayList(); + ArrayList readerDeviceArrayList = new ArrayList<>(); + long startTimeMillis, inventoryStartTimeMillis = 0; + int iConnectingCount = 0; + + private final IBinder binder = new LocalBinder(); + public class LocalBinder extends Binder { + MyForegroundService getService() { + // Return this instance of LocalService so clients can call public methods. + return MyForegroundService.this; + } + } + + @Override + public void onCreate() { + super.onCreate(); + mHandler.post(serviceRunnable); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + //String input = intent.getStringExtra("inputExtra"); + csLibrary4A = MainActivity.csLibrary4A; //new CsLibrary4A(this, null); //MainActivity.csLibrary4A + if (csLibrary4A != null) Log.i("Hello", "MyForegroundService onStartCommand: csLibrary4A is created"); + else Log.i("Hello", "MyForegroundService onStartCommand: null csLibrary4A"); + Log.i("Hello", "MyForegroundService: onStartCommand"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + Log.i("Hello", "MyForegroundService: createNotificationChannel"); + NotificationChannel serviceChannel = new NotificationChannel( + CHANNEL_ID, + "Foreground Service Channel", + NotificationManager.IMPORTANCE_LOW + ); + notificationManager = (NotificationManager) getSystemService(NotificationManager.class); //NotificationManager.class); //NOTIFICATION_SERVICE + List list = notificationManager.getNotificationChannels(); Log.i("Hello", "MyForegroundService onStartComand: getNotificationChannels.size = " + list.size()); + notificationManager.createNotificationChannel(serviceChannel); + list = notificationManager.getNotificationChannels(); Log.i("Hello", "MyForegroundService onStartCommand: after createNotificationChannel, getNotificationChannels.size = " + list.size()); + } + + Intent notificationIntent = new Intent(this, AboutFragment.class); + //notificationIntent.setFlags((Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)); + PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE); + notificationCompatBuilder = new NotificationCompat.Builder(this, CHANNEL_ID) + .setContentTitle("CsReader Foreground Service") + //.setContentText("Hello World !!!") + .setSmallIcon(R.drawable.csl_logo); + //.setPriority(NotificationCompat.PRIORITY_DEFAULT) + //.setContentIntent(pendingIntent) + //.setAutoCancel(true) + //.build(); + Notification notification = updateNotification("Hello World !!!"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + startForeground(SERVICE_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION); + } else { + startForeground(SERVICE_ID, notification); + } + + thread = new Thread( + new Runnable() { + @Override + public void run() { + while (csLibrary4A != null) { + int iRandom = getRandomNumber(); + String strMessage = iRandom + ", ServiceState = " + foregroundServiceState.toString(); + ForegroundServiceState foregroundServiceStateOld = foregroundServiceState; + if (foregroundServiceState == NULL) { + foregroundServiceState = WAIT; + } else if (foregroundServiceState == WAIT && MainActivity.csLibrary4A != null) { + //MainActivity.csLibrary4A.appendToLog("ForegroundReader is " + MainActivity.csLibrary4A.getForegroundReader()); + if (isForegroundEnable()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { //that is android 12 or above + if (ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED + || ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { + MainActivity.csLibrary4A.appendToLog("runnableStart: CANNOT start scanLeDevice as BLUETOOTH_CONNECT && BLUETOOTH_SCAN is NOT yet permitted"); + } else if (MainActivity.csLibrary4A.isBleConnected()) { + foregroundServiceState = CONNECTED; + MainActivity.csLibrary4A.appendToLog("going to CONNECTED"); + } else if (MainActivity.activityActive == false) { + MainActivity.csLibrary4A.appendToLog("runnableStartService: BLUETOOTH_CONNECT and BLUETOOTH_SCAN and (ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION) is permitted"); + } else { + csLibrary4A.appendToLog("Start ScanLeDevice"); + csLibrary4A.scanLeDevice(true); + foregroundServiceState = SCAN; + } + } + } + } else if (foregroundServiceState == SCAN) { + if (MainActivity.csLibrary4A.isBleConnected()) { + foregroundServiceState = CONNECTED; + } else if (isForegroundEnable()) { + BluetoothGatt.Cs108ScanData cs108ScanData = null; + while (true) { + cs108ScanData = csLibrary4A.getNewDeviceScanned(); + csLibrary4A.appendToLog("cs108ScanData is " + (cs108ScanData == null ? "null" : "valid") + ", foregroundReader = " + MainActivity.csLibrary4A.getForegroundReader()); + if (cs108ScanData == null) break; + strMessage += ("\n" + cs108ScanData.device.getAddress()); + if (cs108ScanData.device.getAddress().matches(MainActivity.csLibrary4A.getForegroundReader())) { //"84:C6:92:9D:DD:52")) { + readerDevice = new ReaderDevice(cs108ScanData.device.getName(), cs108ScanData.device.getAddress(), false, "", 1, cs108ScanData.rssi, cs108ScanData.serviceUUID2p2); + String strInfo = ""; + if (cs108ScanData.device.getBondState() == 12) { + strInfo += "BOND_BONDED\n"; + } + readerDevice.setDetails(strInfo + "scanRecord=" + MainActivity.csLibrary4A.byteArrayToString(cs108ScanData.scanRecord)); + + csLibrary4A.scanLeDevice(false); + csLibrary4A.connect(readerDevice); + foregroundServiceState = CONNECT; iConnectingCount = 0; + break; + } + } + if (foregroundServiceState != CONNECT && cs108ScanData != null) + strMessage += ("\n" + cs108ScanData.device.getAddress()); + } else { + csLibrary4A.appendToLog("Stop ScanLeDevice"); + csLibrary4A.scanLeDevice(false); + foregroundServiceState = NULL; + } + } else if (foregroundServiceState == CONNECT) { + if (csLibrary4A.isBleConnected()) { + readerDevice.setConnected(true); + readerDevice.setSelected(true); + MainActivity.sharedObjects.readersList.add(readerDevice); + foregroundServiceState = CONNECTED; + } else if (++iConnectingCount > 10) { + csLibrary4A.disconnect(false); + foregroundServiceState = NULL; + } + } else if (foregroundServiceState == CLOUDCONNECT) { + if (!csLibrary4A.isBleConnected()) foregroundServiceState = CONNECTED; + else if (!isForegroundEnable()) foregroundServiceState = CONNECTED; + if (false && csLibrary4A.getInventoryCloudSave() == 1) { + saveExternalTask = new SaveList2ExternalTask(false); + csLibrary4A.appendToLog("Server: new saveExternalTask"); + isHttpServerOpened = saveExternalTask.openServer(false); + csLibrary4A.appendToLog("Server: openServer is " + isHttpServerOpened); + foregroundServiceState = CONNECTED; + } else if (csLibrary4A.getInventoryCloudSave() == 2) { + if (myMqttClient != null && myMqttClient.isMqttServerConnected) + foregroundServiceState = CONNECTED; + else { + myMqttClient = new MyMqttClient(getApplicationContext()); + myMqttClient.connect(null); + } + } else foregroundServiceState = NULL; + } else if (foregroundServiceState == CONNECTED) { + if (csLibrary4A.isBleConnected()) { + if (isForegroundEnable()) { + boolean bStartInventory = false; + if (csLibrary4A.getInventoryCloudSave() == 1) { + if (false && !isHttpServerOpened) { + csLibrary4A.appendToLog("Server: going to CloudConnect"); + foregroundServiceState = CLOUDCONNECT; + } else if (csLibrary4A.getTriggerButtonStatus()) { + strMessage += ("\n" + "H pressed trigger"); + bStartInventory = true; + } else strMessage += ("\n" + "H released trigger"); + } else if (csLibrary4A.getInventoryCloudSave() == 2 + && csLibrary4A.getServerMqttLocation().length() > 0 && csLibrary4A.getTopicMqtt().length() > 0) { + if (myMqttClient == null || !myMqttClient.isMqttServerConnected) + foregroundServiceState = CLOUDCONNECT; + else if (csLibrary4A.getTriggerButtonStatus()) { + strMessage += ("\n" + "M pressed trigger"); + bStartInventory = true; + } else strMessage += ("\n" + "M released trigger"); + } + if (bStartInventory) { + //write2Server(messageStr); csLibrary4A.appendToLog("bImpinjServer: doInBackground after write2Server"); + //closeServer(); csLibrary4A.appendToLog("bImpinjServer: doInBackground after closeServer"); + csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY_COMPACT); + csLibrary4A.appendToLog("Server:sss startOperation"); + inventoryStartTimeMillis = System.currentTimeMillis(); + foregroundServiceState = INVENTORY; + } + } + MainActivity.csLibrary4A.appendToLog("isForegroundEnable = " + isForegroundEnable() + ", getInventoryCloudSave = " + csLibrary4A.getInventoryCloudSave() + ", getServerMqttLocation = " + csLibrary4A.getServerMqttLocation() + ", getTopicMqtt = " + csLibrary4A.getTopicMqtt()); + } else { + csLibrary4A.appendToLog("disconnect"); + csLibrary4A.disconnect(false); + if (isHttpServerOpened) { + if (saveExternalTask.closeServer()) csLibrary4A.appendToLog("Server: closeServer success"); + else csLibrary4A.appendToLog("Server: closeServer failure"); + isHttpServerOpened = false; + } + if (myMqttClient != null) myMqttClient.disconnect(null); + foregroundServiceState = NULL; + } + } else if (foregroundServiceState == INVENTORY) { + MainActivity.csLibrary4A.appendToLog("inventory: isBleConnected = " + csLibrary4A.isBleConnected()); + MainActivity.csLibrary4A.appendToLog("inventory: myMqttClient = " + (myMqttClient == null ? "null" : myMqttClient.isMqttServerConnected)); + if (!csLibrary4A.isBleConnected()) foregroundServiceState = CONNECTED; +// else if (csLibrary4A.getInventoryCloudSave() == 2 && (myMqttClient == null || !myMqttClient.isMqttServerConnected)) foregroundServiceState = CONNECTED; + else { + long timePeriod = System.currentTimeMillis() - startTimeMillis; + if (timePeriod > MainActivity.csLibrary4A.getForegroundDupElim() * 1000L) { + startTimeMillis = System.currentTimeMillis(); + MainActivity.csLibrary4A.appendToLog("Foreground removes strEpcList of size " + epcArrayList.size()); + epcArrayList.clear(); + } + timePeriod = System.currentTimeMillis() - inventoryStartTimeMillis; + if (csLibrary4A.getInventoryCloudSave() == 2) timePeriod = 0; + if (isForegroundEnable() && csLibrary4A.getTriggerButtonStatus() && timePeriod < 2000L) { + RfidReaderChipData.Rx000pkgData rx000pkgData = null, rx000pkgData1 = null; + while (csLibrary4A.getTriggerButtonStatus()) { + rx000pkgData = csLibrary4A.onRFIDEvent(); + MainActivity.csLibrary4A.appendToLog("rx000pkgData is " + (rx000pkgData == null ? "null" : "valid") + + ", rx000pkgData1 is " + (rx000pkgData1 == null ? "null" : "valid")); + if (rx000pkgData == null) { + if (rx000pkgData1 == null) + strMessage += ("\n NO Tag is found"); + break; + } else { + rx000pkgData1 = rx000pkgData; + String strEpc = MainActivity.csLibrary4A.byteArrayToString(rx000pkgData1.decodedEpc); + if (strEpc == null || strEpc.length() <= 0) + rx000pkgData1 = null; + else { + boolean match = false; + for (int i = 0; i < epcArrayList.size(); i++) { + if (strEpc.matches(epcArrayList.get(i))) { + match = true; + MainActivity.csLibrary4A.appendToLog("Foreground matches tag " + strEpc); + break; + } + } + if (!match) epcArrayList.add(strEpc); + else rx000pkgData1 = null; + } + if (rx000pkgData1 != null) { + csLibrary4A.appendToLog("Server: getInventoryCloudSave = " + MainActivity.csLibrary4A.getInventoryCloudSave()); + if (MainActivity.csLibrary4A.getInventoryCloudSave() == 1) { + ReaderDevice readerDevice1 = new ReaderDevice("", csLibrary4A.byteArrayToString(rx000pkgData1.decodedEpc), false, null, + csLibrary4A.byteArrayToString(rx000pkgData1.decodedPc), null, csLibrary4A.byteArrayToString(rx000pkgData1.decodedCrc), null, + null, -1, -1, + null, -1, -1, + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS").format(new Date()), new SimpleDateFormat("z").format(new Date()).replaceAll("GMT", ""), + MainActivity.mSensorConnector.mLocationDevice.getLocation(), MainActivity.mSensorConnector.mSensorDevice.getEcompass(), + 1, rx000pkgData1.decodedRssi, rx000pkgData1.decodedPhase, rx000pkgData1.decodedChidx, rx000pkgData1.decodedPort, -1, -1, -1, -1, -1, -1, null, -1); + + readerDeviceArrayList.add(readerDevice1); + } else if (MainActivity.csLibrary4A.getInventoryCloudSave() == 2) { + myMqttClient.publish(MainActivity.csLibrary4A.byteArrayToString(rx000pkgData1.decodedEpc)); + } + } + } + } + if (rx000pkgData1 != null) + strMessage += ("\n " + csLibrary4A.byteArrayToString(rx000pkgData1.decodedEpc)); + } else { //isForegroundEnable() && csLibrary4A.getTriggerButtonStatus() && timePeriod + csLibrary4A.appendToLog("Server:sss abortOperation with isForegroundEnable = " + isForegroundEnable() + ", getTriggerButtonStatus = " + csLibrary4A.getTriggerButtonStatus() + ", timePeriod = " + timePeriod + ", "); + csLibrary4A.abortOperation(); + while (true) { + RfidReaderChipData.Rx000pkgData rx000pkgData = csLibrary4A.onRFIDEvent(); + if (rx000pkgData == null) break; + } + if (readerDeviceArrayList.size() != 0) { + saveExternalTask = new SaveList2ExternalTask(false); + csLibrary4A.appendToLog("Server: new saveExternalTask"); + isHttpServerOpened = saveExternalTask.openServer(false); + csLibrary4A.appendToLog("Server: openServer is " + isHttpServerOpened); + String messageStr = saveExternalTask.createJSON(readerDeviceArrayList, null).toString(); + MainActivity.csLibrary4A.appendToLog("Server: Json = " + messageStr); + saveExternalTask.write2Server(messageStr); + csLibrary4A.appendToLog("Server: write2Server success"); + if (saveExternalTask.closeServer()) csLibrary4A.appendToLog("Server: closeServer success"); + else csLibrary4A.appendToLog("Server: closeServer failure"); + } + foregroundServiceState = CONNECTED; + } + } + } + if (foregroundServiceState != foregroundServiceStateOld) { + strMessage += (", New ServiceState = " + foregroundServiceState.toString()); + } + updateNotification(strMessage); + + MainActivity.csLibrary4A.batteryLevelRequest(); //dummy reader access + + try { + int iTime = 2000; + if (foregroundServiceState == INVENTORY) iTime = 100; + Thread.sleep(iTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + ); + thread.start(); + + // Builds the notification and issues it. + //do heavy work on a background thread + //stopSelf(); + return super.onStartCommand(intent, flags, startId); //return START_NOT_STICKY; + } + + @Override + public void onDestroy() { + Log.i("Hello1", "MyForegroundService: onDestroy"); + mHandler.removeCallbacks(serviceRunnable); + if (csLibrary4A != null) { + csLibrary4A.disconnect(false); + csLibrary4A.appendToLog("MyForegroundService: onDestroy 0"); + } + thread.stop(); + stopSelf(); + super.onDestroy(); + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + csLibrary4A.appendToLog("MyForegroundService: onBind"); + return binder; // null; + } + + @Override + public void onTaskRemoved(Intent rootIntent) { + csLibrary4A.appendToLog("MyForegroundService: onTaskRemoved"); + System.out.println("onTaskRemoved called"); + super.onTaskRemoved(rootIntent); + //do something you want + //stop service + thread.stop(); + this.stopSelf(); + } + + Thread thread = null; + Notification updateNotification(String string) { + Log.i("Hello","MyForegroundService updateNotification: " + string); + notificationCompatBuilder.setContentText(string); + Notification notification = notificationCompatBuilder.build(); + notificationManager.notify(1, notification); + return notification; + } + + int batteryCount_old; String strBatteryLow_old; + Runnable serviceRunnable = new Runnable() { + @Override + public void run() { + mHandler.postDelayed(serviceRunnable, 2000); + if (MainActivity.csLibrary4A == null) { } + else if (MainActivity.activityActive == false && MainActivity.csLibrary4A.isBleConnected()) { + int batteryCount = MainActivity.csLibrary4A.getBatteryCount(); + String strBatteryLow = MainActivity.csLibrary4A.isBatteryLow(); + MainActivity.csLibrary4A.appendToLog("CustomIME Debug 11 with batteryCount = " + batteryCount + ", batteryCount_old = " + batteryCount_old); + if (batteryCount_old != batteryCount) { + batteryCount_old = batteryCount; + MainActivity.csLibrary4A.appendToLog("CustomIME Debug 110 with isBatteryLow as " + strBatteryLow + ", strBattteryLow_old = " + strBatteryLow_old); + if (strBatteryLow == null || strBatteryLow_old == null) + strBatteryLow_old = strBatteryLow; + else if (!strBatteryLow.matches(strBatteryLow_old)) + strBatteryLow_old = strBatteryLow; + } + if (strBatteryLow != null) { + MainActivity.csLibrary4A.appendToLog("CustomIME Debug 112"); + Toast.makeText(mContext, + "Battery Low: " + strBatteryLow + "% Battery Life Left", + Toast.LENGTH_SHORT).show(); + } + } + } + }; + + final Random mGenerator = new Random(); + int getRandomNumber() { + return mGenerator.nextInt(100); + } + + boolean isForegroundEnable() { + MainActivity.csLibrary4A.appendToLog("isHomeFragment = " + MainActivity.isHomeFragment + ", getForegroundReader = " + MainActivity.csLibrary4A.getForegroundReader()); + return (MainActivity.isHomeFragment && MainActivity.csLibrary4A.getForegroundReader().length() != 0); + } + + enum ForegroundServiceState { + NULL, WAIT, SCAN, CONNECT, CLOUDCONNECT, CONNECTED, INVENTORY, DISCONNECT + } + ForegroundServiceState foregroundServiceState = NULL; +} \ No newline at end of file diff --git a/app/src/main/java/com/csl/cs108ademoapp/MyMqttClient.java b/app/src/main/java/com/csl/cs108ademoapp/MyMqttClient.java new file mode 100644 index 0000000..1a7b1e4 --- /dev/null +++ b/app/src/main/java/com/csl/cs108ademoapp/MyMqttClient.java @@ -0,0 +1,134 @@ +package com.csl.cs108ademoapp; + +import android.content.Context; +import android.util.Log; +import android.view.View; + +import org.eclipse.paho.client.mqttv3.IMqttActionListener; +import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; +import org.eclipse.paho.client.mqttv3.IMqttToken; +import org.eclipse.paho.client.mqttv3.MqttCallback; +import org.eclipse.paho.client.mqttv3.MqttClient; +import org.eclipse.paho.client.mqttv3.MqttConnectOptions; +import org.eclipse.paho.client.mqttv3.MqttMessage; + +import info.mqtt.android.service.Ack; +import info.mqtt.android.service.MqttAndroidClient; + +public class MyMqttClient { + final boolean DEBUG = false; final String TAG = "Hello"; + boolean isMqttServerConnected = false; + Context context; + public MyMqttClient(Context context) { + this.context = context; + + ///This here are the mqtt broker informations + String clientId = MqttClient.generateClientId(); + Log.i(TAG, "MQTT: clientId is " + (clientId == null ? "null" : clientId)); + //String serverMqttLocation = "tcp://192.168.25.153:1883"; + //String serverMqttLocation = "tcp://localhost:1883"; + String serverMqttLocation = "tcp://" + MainActivity.csLibrary4A.getServerMqttLocation() + ":1883"; + Log.i(TAG, "MQTT: serverLocation is " + serverMqttLocation); + client = new MqttAndroidClient(context, serverMqttLocation, clientId, Ack.AUTO_ACK); + Log.i(TAG, "MQTT: client is " + (client == null ? "null" : "valid")); + + if (true) { + MqttConnectOptions options = new MqttConnectOptions(); + //options.setUserName("narada"); + //options.setPassword("narada146551".toCharArray()); + //options.setPassword("narada683796".toCharArray()); + options.setKeepAliveInterval(60);//seconds + options.setCleanSession(true); + options.setAutomaticReconnect(true); + } + + /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + ContextCompat.registerReceiver(this, mMessageReceiver, + new IntentFilter(AppConstants.INTENT_FILTERS.DASHBOARD_MESSAGE),RECEIVER_NOT_EXPORTED); + }else { + ContextCompat.registerReceiver(this, mMessageReceiver, + new IntentFilter(AppConstants.INTENT_FILTERS.DASHBOARD_MESSAGE)); + }*/ + + client.setCallback(new MqttCallback() { + @Override + public void connectionLost(Throwable cause) { + Log.i(TAG, "MQTT: client.setCallback connectionLost"); + isMqttServerConnected = false; + } + + @Override + public void messageArrived(String topic, MqttMessage message) throws Exception { + Log.i(TAG, "MQTT: client.setCallback messageArrived"); + } + + @Override + public void deliveryComplete(IMqttDeliveryToken token) { + Log.i(TAG, "MQTT: client.setCallback deliveryComplete"); + } + }); + } + MqttAndroidClient client; + public void connect(View v) { + try { + IMqttToken token = client.connect(); + token.setActionCallback(new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken asyncActionToken) { + Log.i(TAG, "MQTT: client.connect.setActionCallback onSuccess"); + //Toast.makeText(MainActivity.this,"connected!!",Toast.LENGTH_LONG).show(); + subscribe(); + isMqttServerConnected = true; + } + + @Override + public void onFailure(IMqttToken asyncActionToken, Throwable exception) { + Log.i(TAG, "MQTT: client.connect.setActionCallback onFailure"); + //Toast.makeText(MainActivity.this,"connection failed!!",Toast.LENGTH_LONG).show(); + } + }); + } catch (Exception e) { + Log.i(TAG, "MQTT: conn Exception: " + e.toString()); + } + } + public void disconnect(View v) { + try { + IMqttToken token = client.disconnect(); + token.setActionCallback(new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken asyncActionToken) { + isMqttServerConnected = false; + Log.i(TAG, "MQTT: client.disconnect.setActionCallback onSuccess"); + //Toast.makeText(MainActivity.this,"Disconnected!!",Toast.LENGTH_LONG).show(); + } + + @Override + public void onFailure(IMqttToken asyncActionToken, Throwable exception) { + Log.i(TAG, "MQTT: client.disconnect.setActionCallback onFailure"); + //Toast.makeText(MainActivity.this,"Could not diconnect!!",Toast.LENGTH_LONG).show(); + } + }); + } catch (Exception e) { + Log.i(TAG, "MQTT: disconn Exception: " + e.toString()); + } + } + private void subscribe() { + try{ + client.subscribe("event",0); + Log.i(TAG, "MQTT: client.subscribe"); + } catch (Exception e){ + Log.i(TAG, "MQTT: setSubscription Exception: " + e.toString()); + } + } + public void publish(String message) { + String topic = MainActivity.csLibrary4A.getTopicMqtt(); + //String message = "the payload 11"; + try { + client.publish(topic, message.getBytes(),0,false); + Log.i(TAG, "MQTT: client.publish"); + //Toast.makeText(this,"Published Message",Toast.LENGTH_SHORT).show(); + } catch (Exception e) { + Log.i(TAG, "MQTT: published Exception: " + e.toString()); + } + } +} diff --git a/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java b/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java index dcd9e34..66fdab4 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java @@ -1,9 +1,10 @@ package com.csl.cs108ademoapp; -import android.Manifest; -import android.app.Activity; +import static android.content.Context.WIFI_SERVICE; +import static com.csl.cs108ademoapp.MainActivity.csLibrary4A; +import static com.csl.cs108ademoapp.MainActivity.mContext; + import android.bluetooth.BluetoothAdapter; -import android.content.pm.PackageManager; import android.media.MediaScannerConnection; import android.net.wifi.WifiManager; import android.os.AsyncTask; @@ -11,7 +12,6 @@ import android.os.Environment; import android.provider.Settings; import android.util.Log; -import android.widget.Toast; import com.csl.cslibrary4a.ReaderDevice; import com.csl.cslibrary4a.RfidReaderChipData; @@ -47,11 +47,6 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import static android.content.Context.WIFI_SERVICE; -import static androidx.core.app.ActivityCompat.requestPermissions; -import static com.csl.cs108ademoapp.MainActivity.mContext; -import static com.csl.cs108ademoapp.MainActivity.csLibrary4A; - public class SaveList2ExternalTask extends AsyncTask { public String messageStr; String resultDisplay = ""; @@ -381,6 +376,7 @@ public String save2File(String messageStr, boolean requestPermission) { String resultDisplay = ""; if (MainActivity.csLibrary4A.getSaveFileEnable() == false) return "No saving file as it is disabled"; boolean writeExtPermission = true; +/* if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (mContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { csLibrary4A.appendToLog("WRITE_EXTERNAL_STORAGE Permission is required !!!"); @@ -393,7 +389,7 @@ public String save2File(String messageStr, boolean requestPermission) { } } else csLibrary4A.appendToLog("WRITE_EXTERNAL_STORAGE Permission is GRANTED !!!"); } - +*/ errorDisplay = null; if (writeExtPermission == false) { errorDisplay = "denied WRITE_EXTERNAL_STORAGE Permission !!!"; @@ -428,69 +424,105 @@ public String save2File(String messageStr, boolean requestPermission) { return resultDisplay; } - public void openServer(boolean bImpinjServer) throws Exception { - if (false) { - url = "https://"; - url += "192.168.25.21:"; - url += "29090/WebServiceRESTs/1.0/req/"; - } else if (false) url = "http://ptsv2.com/t/10i1t-1519143332/post"; - else if (bImpinjServer) { } //url = "https://h9tqczg9-7275.asse.devtunnels.ms/api/Auth/login"; //"https://142.251.220.110"; // - else url = csLibrary4A.getServerLocation(); - - errorDisplay = "Error in SSLContext.getInstance()"; SSLContext sc = SSLContext.getInstance("TLS"); - errorDisplay = "Error in SSLContext.init()"; sc.init(null, new TrustManager[]{ - new X509TrustManager() { - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { - throw new UnsupportedOperationException("TrustManager.checkClientTrusted: Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } + public boolean openServer(boolean bImpinjServer) { + boolean bValue = true; + try { + if (false) { + url = "https://"; + url += "192.168.25.21:"; + url += "29090/WebServiceRESTs/1.0/req/"; + } else if (false) url = "http://ptsv2.com/t/10i1t-1519143332/post"; + else if (bImpinjServer) { + } //url = "https://h9tqczg9-7275.asse.devtunnels.ms/api/Auth/login"; //"https://142.251.220.110"; // + else url = csLibrary4A.getServerLocation(); + MainActivity.csLibrary4A.appendToLog("nnn 1: url is " + url); + + errorDisplay = "Error in SSLContext.getInstance()"; + SSLContext sc = SSLContext.getInstance("TLSv1.2"); + MainActivity.csLibrary4A.appendToLog("nnn 2: SSLContext sc is " + (sc == null ? "null" : "valid")); + errorDisplay = "Error in SSLContext.init()"; + sc.init(null, new TrustManager[]{ + new X509TrustManager() { + @Override + public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { + throw new UnsupportedOperationException("TrustManager.checkClientTrusted: Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { - } + @Override + public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { + } + @Override + public X509Certificate[] getAcceptedIssuers() { + return null; + } + } + }, new SecureRandom()); + MainActivity.csLibrary4A.appendToLog("nnn 3: SSLContext sc.init is Okay"); + if (true) { + errorDisplay = "Error in setDefaultSSLSocketFactory()"; + MainActivity.csLibrary4A.appendToLog("nnn 4: sc.getSocketFactory is " + (sc.getSocketFactory() == null ? "null" : "valid")); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + MainActivity.csLibrary4A.appendToLog("nnn 5: HttpsURLConnection.setDefaultSSLSocketFactory is Okay"); + errorDisplay = "Error in setDefaultHostnameVerifier()"; + HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override - public X509Certificate[] getAcceptedIssuers() { - return null; + public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) { + return true; } - } - }, new SecureRandom()); - if (true) { - errorDisplay = "Error in setDefaultSSLSocketFactory()"; HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - errorDisplay = "Error in setDefaultHostnameVerifier()"; HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { - @Override - public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) { - return true; - } - }); - } - HttpsURLConnection.setFollowRedirects(false); - - errorDisplay = "Error in URL()"; URL obj = new URL(url); MainActivity.csLibrary4A.appendToLog("obj is " + (obj != null ? "valid" : "NULL") + " with url = " + url); - errorDisplay = "Error in openConnection()"; - boolean isHttps = false; - if (url.length() >= 6) { - if (url.substring(0, 6).matches("https:")) isHttps = true; - } - con = (HttpURLConnection) obj.openConnection(); - if (isHttps) { - con = (HttpsURLConnection) obj.openConnection(); - } - errorDisplay = "Error in setConnectTimeout()"; con.setConnectTimeout(MainActivity.csLibrary4A.getServerTimeout() * 1000); - errorDisplay = "Error in setRequestMethod()"; con.setRequestMethod("POST"); - //errorDisplay = "Error in setRequestProperty(User-Agent)"; con.setRequestProperty("User-Agent", "Mozilla/5.0"); - //errorDisplay = "Error in setRequestProperty(text/plain)"; con.setRequestProperty("text/plain", "text/plain"); - //errorDisplay = "Error in setRequestProperty(Accept-Language)"; con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); - MainActivity.csLibrary4A.appendToLog("authenticate in url position : " + url.indexOf("authenticate")); - if (url.indexOf("authenticate") >= 0) { - String string = strBearer; - MainActivity.csLibrary4A.appendToLog("Authorization value = " + string); - errorDisplay = "Error in setRequestProperty(Authorization)"; con.setRequestProperty("Authorization", string); + }); + MainActivity.csLibrary4A.appendToLog("nnn 6: HttpsURLConnection.setDefaultHostnameVerifier is Okay"); + } + HttpsURLConnection.setFollowRedirects(false); + MainActivity.csLibrary4A.appendToLog("nnn 7: HttpsURLConnection.setFollowRedirects is Okay"); + + errorDisplay = "Error in URL()"; + URL obj = new URL(url); + MainActivity.csLibrary4A.appendToLog("nnn 8: URL(obj) is " + (obj != null ? "valid" : "NULL") + " with url = " + url); + errorDisplay = "Error in openConnection()"; + boolean isHttps = false; + if (url.length() >= 6) { + if (url.substring(0, 6).matches("https:")) isHttps = true; + } + con = (HttpURLConnection) obj.openConnection(); + MainActivity.csLibrary4A.appendToLog("nnn 9: HttpURLConnection obj.openConnection is " + (con == null ? "null" : "valid")); + if (isHttps) { + con = (HttpsURLConnection) obj.openConnection(); + MainActivity.csLibrary4A.appendToLog("nnn 10: HttpsURLConnection obj.openConnection is " + (con == null ? "null" : "valid")); + } + errorDisplay = "Error in setConnectTimeout()"; + con.setConnectTimeout(MainActivity.csLibrary4A.getServerTimeout() * 1000); + MainActivity.csLibrary4A.appendToLog("nnn 11: con.setConnectTimeout is Okay"); + errorDisplay = "Error in setRequestMethod()"; + con.setRequestMethod("POST"); + MainActivity.csLibrary4A.appendToLog("nnn 12: con.setRequestMethod is Okay"); + //errorDisplay = "Error in setRequestProperty(User-Agent)"; con.setRequestProperty("User-Agent", "Mozilla/5.0"); + //errorDisplay = "Error in setRequestProperty(text/plain)"; con.setRequestProperty("text/plain", "text/plain"); + //errorDisplay = "Error in setRequestProperty(Accept-Language)"; con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); + MainActivity.csLibrary4A.appendToLog("nnn 13: authenticate in url position : " + url.indexOf("authenticate")); + if (url.indexOf("authenticate") >= 0) { + String string = strBearer; + MainActivity.csLibrary4A.appendToLog("nnn 14: Authorization value = " + string); + errorDisplay = "Error in setRequestProperty(Authorization)"; + con.setRequestProperty("Authorization", string); + MainActivity.csLibrary4A.appendToLog("nnn 15 : con.setRequestProperty is Okay"); + } + errorDisplay = "Error in setRequestProperty(Content)"; + con.setRequestProperty("Content-Type", "application/json); //; charset=utf8"); + MainActivity.csLibrary4A.appendToLog("nnn 16: con.setRequestProperty is Okay"); + errorDisplay = "Error in setDoOutput()"; + con.setDoOutput(true); + MainActivity.csLibrary4A.appendToLog("nnn 17: con.setDoOutput is Okay"); + errorDisplay = "Error in setDoInput()"; + con.setDoInput(true); + MainActivity.csLibrary4A.appendToLog("nnn 18: Finished openServer"); + } catch (Exception ex) { + MainActivity.csLibrary4A.appendToLog("openServer Exception: " + ex.getMessage()); + bValue = false; } - errorDisplay = "Error in setRequestProperty(Content)"; con.setRequestProperty("Content-Type", "application/json); //; charset=utf8"); - errorDisplay = "Error in setDoOutput()"; con.setDoOutput(true); - errorDisplay = "Error in setDoInput()"; con.setDoInput(true); + return bValue; } + boolean serverWritten = false; public void write2Server(String messageStr0) { csLibrary4A.appendToLog("messageStr0 = " + messageStr0); @@ -506,34 +538,42 @@ public void write2Server(String messageStr0) { errorDisplay = "Error in close(os)"; os.close(); serverWritten = true; //csLibrary4A.appendToLog("inputStream = " + ir.readUTF()); + MainActivity.csLibrary4A.appendToLog("nnn 19: finished write2Server"); } catch (Exception ex) { - MainActivity.csLibrary4A.appendToLog("errorDisplay = " + errorDisplay + ", execpetion = " + ex.getMessage()); + MainActivity.csLibrary4A.appendToLog("nnn 20: errorDisplay = " + errorDisplay + ", execpetion = " + ex.getMessage()); } } + public int responseCode; public String response = null; - public void closeServer() throws Exception { + public boolean closeServer() { + boolean bValue = true; if (serverWritten) { - errorDisplay = "Error in getResponseCode()"; - responseCode = con.getResponseCode(); - //MainActivity.csLibrary4A.appendToLog("errorDisplay = " + errorDisplay); - MainActivity.csLibrary4A.appendToLog("responseCode = " + responseCode); - if (responseCode != 200) - errorDisplay = "Error in response code = " + responseCode; - else { - BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + try { + errorDisplay = "Error in getResponseCode()"; + responseCode = con.getResponseCode(); //MainActivity.csLibrary4A.appendToLog("errorDisplay = " + errorDisplay); - String inputLine; - response = ""; - while ((inputLine = in.readLine()) != null) { - response += inputLine; + MainActivity.csLibrary4A.appendToLog("responseCode = " + responseCode); + if (responseCode != 200) + errorDisplay = "Error in response code = " + responseCode; + else { + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + //MainActivity.csLibrary4A.appendToLog("errorDisplay = " + errorDisplay); + String inputLine; + response = ""; + while ((inputLine = in.readLine()) != null) { + response += inputLine; + } + in.close(); + //MainActivity.csLibrary4A.appendToLog("errorDisplay = " + errorDisplay); + resultDisplay += "Success in sending data to server with response = " + response; + MainActivity.csLibrary4A.appendToLog("response = " + response); + errorDisplay = null; } - in.close(); - //MainActivity.csLibrary4A.appendToLog("errorDisplay = " + errorDisplay); - resultDisplay += "Success in sending data to server with response = " + response; - MainActivity.csLibrary4A.appendToLog("response = " + response); - errorDisplay = null; + } catch (Exception ex) { + bValue = false; } } con.disconnect(); + return bValue; } } \ No newline at end of file diff --git a/app/src/main/java/com/csl/cs108ademoapp/SharedObjects.java b/app/src/main/java/com/csl/cs108ademoapp/SharedObjects.java index 201a823..3adbd9f 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/SharedObjects.java +++ b/app/src/main/java/com/csl/cs108ademoapp/SharedObjects.java @@ -37,7 +37,7 @@ public int compareTo(@NonNull TagsIndex tagsIndex) { public ArrayList readersList = new ArrayList(); public String connectedBleAddressOld = ""; - public boolean versioinWarningShown = false; + public boolean versionWarningShown = false; public int batteryWarningShown = 0; public boolean runningInventoryRfidTask = false; diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/AxzonAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/AxzonAdapter.java deleted file mode 100644 index 0b16881..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/AxzonAdapter.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessMicronFragment; -import com.csl.cs108ademoapp.fragments.AccessUcodeFragment; -import com.csl.cs108ademoapp.fragments.AccessXerxesLoggerFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class AxzonAdapter extends FragmentStatePagerAdapter { - public int NO_OF_TABS = 4; - public Fragment fragment0, fragment1, fragment2, fragment3; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = InventoryRfidiMultiFragment.newInstance(true, ""); - fragment0 = fragment; - break; - case 1: - fragment = AccessMicronFragment.newInstance(true); - fragment1 = fragment; - break; - case 2: - fragment = new AccessXerxesLoggerFragment(); - fragment2 = fragment; - break; - case 3: - fragment = new AccessUcodeFragment(); - fragment3 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public static AxzonAdapter newinstance(FragmentManager fm, int tabsCount) { - AxzonAdapter adapter = new AxzonAdapter(fm); - adapter.NO_OF_TABS = tabsCount; - return adapter; - } - public AxzonAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/ColdChainAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/ColdChainAdapter.java deleted file mode 100644 index 461272a..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/ColdChainAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessColdChainFragment; -import com.csl.cs108ademoapp.fragments.AccessEm4325PassiveFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class ColdChainAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 3; - public Fragment fragment0, fragment1, fragment2; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 2: - fragment = new AccessEm4325PassiveFragment(); - fragment1 = fragment; - break; - case 1: - fragment = new AccessColdChainFragment(); - fragment2 = fragment; - break; - case 0: - fragment = InventoryRfidiMultiFragment.newInstance(true,"E280B0"); - fragment0 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public ColdChainAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/FdmicroAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/FdmicroAdapter.java deleted file mode 100644 index 0df141c..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/FdmicroAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessFdmicroFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class FdmicroAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = InventoryRfidiMultiFragment.newInstance(true,"E2827001"); - fragment0 = fragment; - break; - case 1: - fragment = new AccessFdmicroFragment(); - fragment1 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public FdmicroAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/FilterAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/FilterAdapter.java deleted file mode 100644 index 13c7436..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/FilterAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.SettingFilterPostFragment; -import com.csl.cs108ademoapp.fragments.SettingFilterPreFragment; -import com.csl.cs108ademoapp.fragments.SettingFilterRssiFragment; - -public class FilterAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 3; - public Fragment fragment0, fragment1, fragment2; - - @Override - public Fragment getItem(int position) { - Fragment fragment = null; - switch (position) { - case 0: - fragment = new SettingFilterPreFragment(); - fragment0 = fragment; - break; - case 1: - fragment = new SettingFilterPostFragment(); - fragment1 = fragment; - break; - case 2: - fragment = new SettingFilterRssiFragment(); - fragment2 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public FilterAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/ImpinjAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/ImpinjAdapter.java deleted file mode 100644 index 928bfe3..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/ImpinjAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessImpinjFragment; -import com.csl.cs108ademoapp.fragments.AccessUcodeFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class ImpinjAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 3; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = new AccessImpinjFragment(false); - fragment0 = fragment; - break; - case 1: - fragment = InventoryRfidiMultiFragment.newInstance(true,""); - fragment1 = fragment; - break; - case 2: - fragment = new AccessUcodeFragment(); - fragment0 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public ImpinjAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/InventoryAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/InventoryAdapter.java deleted file mode 100644 index 9c2e026..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/InventoryAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.InventoryBarcodeFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class InventoryAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = InventoryRfidiMultiFragment.newInstance(false, null); - fragment0 = fragment; - break; - case 1: - fragment = new InventoryBarcodeFragment(); - fragment1 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public InventoryAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/KilowayAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/KilowayAdapter.java deleted file mode 100644 index 3af2f90..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/KilowayAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessKilowayFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class KilowayAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = InventoryRfidiMultiFragment.newInstance(true,"E281D"); - fragment1 = fragment; - break; - case 1: - fragment = new AccessKilowayFragment(false); - fragment0 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public KilowayAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/LongjingAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/LongjingAdapter.java deleted file mode 100644 index 3a4d1c0..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/LongjingAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessKilowayFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidSearchFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class LongjingAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = InventoryRfidiMultiFragment.newInstance(true,"E201E"); - fragment1 = fragment; - break; - case 2: - fragment = new AccessKilowayFragment(true); - fragment0 = fragment; - break; - case 1: - fragment = new InventoryRfidSearchFragment(true); - fragment0 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public LongjingAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/MicronAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/MicronAdapter.java deleted file mode 100644 index 625e2a4..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/MicronAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessMicronFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class MicronAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1, fragment2; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = InventoryRfidiMultiFragment.newInstance(true, ""); - fragment0 = fragment; - break; - case 1: - fragment = AccessMicronFragment.newInstance(false); - fragment1 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public MicronAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/Ucode8Adapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/MyAdapter.java similarity index 50% rename from app/src/main/java/com/csl/cs108ademoapp/adapters/Ucode8Adapter.java rename to app/src/main/java/com/csl/cs108ademoapp/adapters/MyAdapter.java index 63b0afe..fa3bcd5 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/Ucode8Adapter.java +++ b/app/src/main/java/com/csl/cs108ademoapp/adapters/MyAdapter.java @@ -1,59 +1,73 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.MainActivity; -import com.csl.cs108ademoapp.fragments.AccessUcode8Fragment; -import com.csl.cs108ademoapp.fragments.AccessUcodeFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; -import com.csl.cs108ademoapp.fragments.UtraceFragment; - -public class Ucode8Adapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 4; - public Fragment fragment0, fragment1, fragment2, fragment3; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - MainActivity.csLibrary4A.appendToLog("Ucode8Adapter getItem index = " + index); - switch (index) { - case 0: - fragment = new AccessUcode8Fragment(); - fragment0 = fragment; - break; - case 1: - fragment = InventoryRfidiMultiFragment.newInstance(true,""); - fragment1 = fragment; - break; - case 2: - fragment = new AccessUcodeFragment(); - fragment2 = fragment; - break; - case 3: - fragment = new UtraceFragment(); - fragment3 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public Ucode8Adapter(FragmentManager fm) { - super(fm); - } -} +package com.csl.cs108ademoapp.adapters; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.viewpager.widget.PagerAdapter; + +public class MyAdapter extends FragmentStatePagerAdapter { + private int iNumOfTabs; + public Fragment fragment0, fragment1, fragment2, fragment3, fragment4 = null; + + public MyAdapter(FragmentManager fm, int iNumOfTabs) { + super(fm); + this.iNumOfTabs = iNumOfTabs; + } + + @Override + public Fragment getItem(int index) { + Fragment fragment = null; + switch (index) { + case 0: + fragment = fragment0; + break; + case 1: + fragment = fragment1; + break; + case 2: + fragment = fragment2; + break; + case 3: + fragment = fragment3; + break; + case 4: + fragment = fragment4; + break; + default: + break; + } + return fragment; + } + + @Override + public int getCount() { + return iNumOfTabs; + } + + @Override + public int getItemPosition(Object object) { + return PagerAdapter.POSITION_NONE; + } + + public void setFragment(int index, Fragment fragment) { + switch (index) { + case 0: + fragment0 = fragment; + break; + case 1: + fragment1 = fragment; + break; + case 2: + fragment2 = fragment; + break; + case 3: + fragment3 = fragment; + break; + case 4: + fragment4 = fragment; + break; + default: + break; + } + } +} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/SecurityAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/SecurityAdapter.java deleted file mode 100644 index 1ace69f..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/SecurityAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessSecurityLockFragment; -import com.csl.cs108ademoapp.fragments.AccessSecurityKillFragment; - -public class SecurityAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = new AccessSecurityLockFragment(); - fragment0 = fragment; - break; - case 1: - fragment = new AccessSecurityKillFragment(); - fragment1 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public SecurityAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/SettingAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/SettingAdapter.java deleted file mode 100644 index 50396c4..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/SettingAdapter.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.SettingAdminFragment; -import com.csl.cs108ademoapp.fragments.SettingOperateFragment; - -public class SettingAdapter extends FragmentStatePagerAdapter { - private int mNumOfTabs; - public Fragment fragment0, fragment1, fragment2, fragment3, fragment4 = null; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = new SettingOperateFragment(); - fragment0 = fragment; - break; - case 1: - fragment = new SettingAdminFragment(); - fragment1 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return mNumOfTabs; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public SettingAdapter(FragmentManager fm, int NumOfTabs) { - super(fm); - this.mNumOfTabs = NumOfTabs; - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/UcodeAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/UcodeAdapter.java deleted file mode 100644 index a55068b..0000000 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/UcodeAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.csl.cs108ademoapp.adapters; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; - -import com.csl.cs108ademoapp.fragments.AccessUcodeFragment; -import com.csl.cs108ademoapp.fragments.InventoryRfidiMultiFragment; - -public class UcodeAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = InventoryRfidiMultiFragment.newInstance(true,"E2C06"); - fragment1 = fragment; - break; - case 1: - fragment = new AccessUcodeFragment(); - fragment0 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public UcodeAdapter(FragmentManager fm) { - super(fm); - } -} diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AboutFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AboutFragment.java index 68bd143..3bf1520 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AboutFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AboutFragment.java @@ -2,13 +2,14 @@ import android.os.Bundle; import android.os.Handler; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; + import com.csl.cs108ademoapp.BuildConfig; import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessSecurityFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessSecurityFragment.java index 7c9d12b..98c4341 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessSecurityFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessSecurityFragment.java @@ -1,22 +1,23 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; -import com.google.android.material.tabs.TabLayout; -import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + import com.csl.cs108ademoapp.MainActivity; -import com.csl.cs108ademoapp.adapters.SecurityAdapter; import com.csl.cs108ademoapp.R; +import com.csl.cs108ademoapp.adapters.MyAdapter; +import com.google.android.material.tabs.TabLayout; public class AccessSecurityFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - SecurityAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Lock", "Kill"}; @@ -36,9 +37,12 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new SecurityAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, new AccessSecurityLockFragment()); + adapter.setFragment(1, new AccessSecurityKillFragment()); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -63,29 +67,29 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); MainActivity.csLibrary4A.setSameCheck(true); MainActivity.csLibrary4A.restoreAfterTagSelect(); super.onDestroy(); @@ -93,8 +97,8 @@ public void onDestroy() { @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcodeFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcodeFragment.java index 832d4af..0a52030 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcodeFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessUcodeFragment.java @@ -1,4 +1,3 @@ - package com.csl.cs108ademoapp.fragments; import static com.csl.cs108ademoapp.MainActivity.csLibrary4A; @@ -265,12 +264,18 @@ public void onClick(View v) { MainActivity.csLibrary4A.setSameCheck(false); MainActivity.csLibrary4A.appendToLog("mDid in AccessUcodeFragment = " + MainActivity.mDid); - TextView textView = (TextView) getActivity().findViewById(R.id.accessUCAuthKeyIdLabel); textView.setVisibility(View.GONE); - EditText editText = (EditText) getActivity().findViewById(R.id.accessUCAuthKeyId); editText.setVisibility(View.GONE); - editTextAuthMsg.setText("049CA53E55EA"); - TableRow tableRow1 = (TableRow) getActivity().findViewById(R.id.accessUCAuthProfileRow); tableRow1.setVisibility(View.GONE); - LinearLayout layout1 = (LinearLayout) getActivity().findViewById(R.id.accessUCKeyLayout); layout1.setVisibility(View.GONE); + TextView textView = (TextView) getActivity().findViewById(R.id.accessUCAuthKeyIdLabel); + EditText editText = (EditText) getActivity().findViewById(R.id.accessUCAuthKeyId); + TableRow tableRow1 = (TableRow) getActivity().findViewById(R.id.accessUCAuthProfileRow); + LinearLayout layout1 = (LinearLayout) getActivity().findViewById(R.id.accessUCKeyLayout); LinearLayout layout = (LinearLayout) getActivity().findViewById(R.id.accessUCButtons); layout.setVisibility(View.GONE); + if (bImpinJTag) { + textView.setVisibility(View.GONE); + editText.setVisibility(View.GONE); + editTextAuthMsg.setText("049CA53E55EA"); + tableRow1.setVisibility(View.GONE); + layout1.setVisibility(View.GONE); + } Button buttonImpinjCheck = (Button) getActivity().findViewById(R.id.accessUCImpinjCheck); buttonImpinjCheck.setOnClickListener(new View.OnClickListener() { @@ -286,7 +291,7 @@ public void onClick(View view) { editTextAccessUCserverImpinj = (EditText) getActivity().findViewById(R.id.accessUCserverImpinj); editTextAccessUCemail = (EditText) getActivity().findViewById(R.id.accessUCemail); editTextAccessUCpassword = (EditText) getActivity().findViewById(R.id.accessUCpassword); - if (true) { + if (false) { editTextAccessUCserverImpinj.setText(csLibrary4A.getServerImpinjLocation()); editTextAccessUCemail.setText(csLibrary4A.getServerImpinjName()); editTextAccessUCpassword.setText(csLibrary4A.getServerImpinjPassword()); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonFragment.java index 2852af0..ca8f4f0 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AxzonFragment.java @@ -2,6 +2,8 @@ import androidx.lifecycle.Lifecycle; import android.os.Bundle; + +import com.csl.cs108ademoapp.adapters.MyAdapter; import com.google.android.material.tabs.TabLayout; import androidx.viewpager.widget.ViewPager; import androidx.appcompat.app.ActionBar; @@ -13,12 +15,11 @@ import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.AxzonAdapter; public class AxzonFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - AxzonAdapter mAdapter; + MyAdapter adapter; private String[] tabs = { "Scan/Select", "Read" }; private String[] tabsXerxes = { "Logger", "Security" }; @@ -31,7 +32,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) mAdapter.fragment0; + InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) adapter.fragment0; if (item.getItemId() == R.id.menuAction_clear) { fragment.clearTagsList(); return true; @@ -71,9 +72,14 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = AxzonAdapter.newinstance(getActivity().getSupportFragmentManager(), (bXervesTag ? 4 : 2)); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), (bXervesTag ? 4 : 2)); + adapter.setFragment(0, InventoryRfidiMultiFragment.newInstance(true, "")); + adapter.setFragment(1, AccessMicronFragment.newInstance(true)); + adapter.setFragment(2, new AccessXerxesLoggerFragment()); + adapter.setFragment(3, new AccessUcodeFragment()); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -105,37 +111,37 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - if (mAdapter.fragment0 != null) if (mAdapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment0.onPause(); - if (mAdapter.fragment1 != null) if (mAdapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment1.onPause(); - if (mAdapter.fragment2 != null) if (mAdapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment2.onPause(); - if (mAdapter.fragment3 != null) if (mAdapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment3.onPause(); + if (adapter.fragment0 != null) if (adapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment0.onPause(); + if (adapter.fragment1 != null) if (adapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment1.onPause(); + if (adapter.fragment2 != null) if (adapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment2.onPause(); + if (adapter.fragment3 != null) if (adapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment3.onPause(); super.onPause(); } @Override public void onStop() { - if (mAdapter.fragment0 != null) if (mAdapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment0.onStop(); - if (mAdapter.fragment1 != null) if (mAdapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment1.onStop(); - if (mAdapter.fragment2 != null) if (mAdapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment2.onStop(); - if (mAdapter.fragment3 != null) if (mAdapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment3.onStop(); + if (adapter.fragment0 != null) if (adapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment0.onStop(); + if (adapter.fragment1 != null) if (adapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment1.onStop(); + if (adapter.fragment2 != null) if (adapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment2.onStop(); + if (adapter.fragment3 != null) if (adapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment3.onStop(); super.onStop(); } @Override public void onDestroyView() { - if (mAdapter.fragment0 != null) if (mAdapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment0.onDestroyView(); - if (mAdapter.fragment1 != null) if (mAdapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment1.onDestroyView(); - if (mAdapter.fragment2 != null) if (mAdapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment2.onDestroyView(); - if (mAdapter.fragment3 != null) if (mAdapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment3.onDestroyView(); + if (adapter.fragment0 != null) if (adapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment0.onDestroyView(); + if (adapter.fragment1 != null) if (adapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment1.onDestroyView(); + if (adapter.fragment2 != null) if (adapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment2.onDestroyView(); + if (adapter.fragment3 != null) if (adapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment3.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - if (mAdapter.fragment0 != null) if (mAdapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment0.onDestroy(); - if (mAdapter.fragment1 != null) if (mAdapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment1.onDestroy(); - if (mAdapter.fragment2 != null) if (mAdapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment2.onDestroy(); - if (mAdapter.fragment3 != null) if (mAdapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment3.onDestroy(); + if (adapter.fragment0 != null) if (adapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment0.onDestroy(); + if (adapter.fragment1 != null) if (adapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment1.onDestroy(); + if (adapter.fragment2 != null) if (adapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment2.onDestroy(); + if (adapter.fragment3 != null) if (adapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment3.onDestroy(); if (MainActivity.selectFor != -1) { MainActivity.csLibrary4A.setSelectCriteriaDisable(-1); MainActivity.selectFor = -1; @@ -146,10 +152,10 @@ public void onDestroy() { @Override public void onDetach() { - if (mAdapter.fragment0 != null) if (mAdapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment0.onDetach(); - if (mAdapter.fragment1 != null) if (mAdapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment1.onDetach(); - if (mAdapter.fragment2 != null) if (mAdapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment2.onDetach(); - if (mAdapter.fragment3 != null) if (mAdapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) mAdapter.fragment3.onDetach(); + if (adapter.fragment0 != null) if (adapter.fragment0.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment0.onDetach(); + if (adapter.fragment1 != null) if (adapter.fragment1.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment1.onDetach(); + if (adapter.fragment2 != null) if (adapter.fragment2.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment2.onDetach(); + if (adapter.fragment3 != null) if (adapter.fragment3.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) adapter.fragment3.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/ColdChainFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/ColdChainFragment.java index 0034f00..5b4eef7 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/ColdChainFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/ColdChainFragment.java @@ -1,24 +1,24 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; - -import com.csl.cs108ademoapp.MainActivity; -import com.google.android.material.tabs.TabLayout; -import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import com.csl.cs108ademoapp.adapters.ColdChainAdapter; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + +import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; +import com.csl.cs108ademoapp.adapters.MyAdapter; +import com.google.android.material.tabs.TabLayout; public class ColdChainFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - ColdChainAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Select Tag", "Logging", "One-shot"}; @@ -30,7 +30,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment0; + InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) adapter.fragment0; if (item.getItemId() == R.id.menuAction_clear) { fragment1.clearTagsList(); return true; @@ -59,9 +59,13 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new ColdChainAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, InventoryRfidiMultiFragment.newInstance(true,"E280B0")); + adapter.setFragment(1, new AccessColdChainFragment()); + adapter.setFragment(2, new AccessEm4325PassiveFragment()); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (int i = 0; i < tabs.length; i++) { @@ -88,41 +92,41 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onPause(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onPause(); - if (mAdapter.fragment2 != null) mAdapter.fragment2.onPause(); + if (adapter.fragment0 != null) adapter.fragment0.onPause(); + if (adapter.fragment1 != null) adapter.fragment1.onPause(); + if (adapter.fragment2 != null) adapter.fragment2.onPause(); super.onPause(); } @Override public void onStop() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onStop(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onStop(); - if (mAdapter.fragment2 != null) mAdapter.fragment2.onStop(); + if (adapter.fragment0 != null) adapter.fragment0.onStop(); + if (adapter.fragment1 != null) adapter.fragment1.onStop(); + if (adapter.fragment2 != null) adapter.fragment2.onStop(); super.onStop(); } @Override public void onDestroyView() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onDestroyView(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onDestroyView(); - if (mAdapter.fragment2 != null) mAdapter.fragment2.onDestroyView(); + if (adapter.fragment0 != null) adapter.fragment0.onDestroyView(); + if (adapter.fragment1 != null) adapter.fragment1.onDestroyView(); + if (adapter.fragment2 != null) adapter.fragment2.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onDestroy(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onDestroy(); - if (mAdapter.fragment2 != null) mAdapter.fragment2.onDestroy(); + if (adapter.fragment0 != null) adapter.fragment0.onDestroy(); + if (adapter.fragment1 != null) adapter.fragment1.onDestroy(); + if (adapter.fragment2 != null) adapter.fragment2.onDestroy(); super.onDestroy(); } @Override public void onDetach() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onDetach(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onDetach(); - if (mAdapter.fragment2 != null) mAdapter.fragment2.onDetach(); + if (adapter.fragment0 != null) adapter.fragment0.onDetach(); + if (adapter.fragment1 != null) adapter.fragment1.onDetach(); + if (adapter.fragment2 != null) adapter.fragment2.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/CommonFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/CommonFragment.java index ad5b867..3b2fe06 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/CommonFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/CommonFragment.java @@ -5,11 +5,6 @@ import android.graphics.Color; import android.os.Bundle; import android.os.Handler; - -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; - import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.util.Log; @@ -21,10 +16,14 @@ import android.view.ViewGroup; import android.widget.Toast; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; + +import com.csl.cs108ademoapp.CustomAlertDialog; import com.csl.cs108ademoapp.CustomPopupWindow; import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; -import com.csl.cslibrary4a.CustomAlertDialog; public abstract class CommonFragment extends Fragment { final boolean DEBUG = false; final String TAG = "Hello"; @@ -74,16 +73,20 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public void run() { short reportCount = 5; - byte[] notificationData = MainActivity.csLibrary4A.onNotificationEvent(); - if (false && notificationData != null) { - MainActivity.csLibrary4A.appendToLog("2 matched Error: " + MainActivity.csLibrary4A.byteArrayToString(notificationData)); - CustomPopupWindow customPopupWindow = new CustomPopupWindow(MainActivity.mContext); - customPopupWindow.popupStart("Common Notification Error Code A101: " + MainActivity.csLibrary4A.byteArrayToString(notificationData), false); + if (MainActivity.csLibrary4A.isBleConnected()) { + byte[] notificationData = MainActivity.csLibrary4A.onNotificationEvent(); + if (false && notificationData != null) { + MainActivity.csLibrary4A.appendToLog("2 matched Error: " + MainActivity.csLibrary4A.byteArrayToString(notificationData)); + CustomPopupWindow customPopupWindow = new CustomPopupWindow(MainActivity.mContext); + customPopupWindow.popupStart("Common Notification Error Code A101: " + MainActivity.csLibrary4A.byteArrayToString(notificationData), false); + } + reportCount = MainActivity.csLibrary4A.getTriggerReportingCount(); } - if (MainActivity.csLibrary4A.isBleConnected()) reportCount = MainActivity.csLibrary4A.getTriggerReportingCount(); + mHandler.postDelayed(updateTriggerRunnable, reportCount * 1100); if (menuTriggerItem == null) return; if (MainActivity.csLibrary4A.isBleConnected() == false) { menuTriggerItem.setTitle(""); return; } + int triggerCount = MainActivity.csLibrary4A.getTriggerCount(); if (triggerCount != triggerCount_old) { triggerCount_old = triggerCount; @@ -127,7 +130,8 @@ public void run() { }); } } else if (DEBUG) MainActivity.csLibrary4A.appendToLog("bleConnected is Kept as FALSE in " + fragmentName); - MainActivity.sharedObjects.batteryWarningShown = 0; menuBatteryVoltageItem.setTitle(""); return; + MainActivity.sharedObjects.batteryWarningShown = 0; menuBatteryVoltageItem.setTitle(""); + return; } else { bleConnected = true; if (DEBUG) MainActivity.csLibrary4A.appendToLog("bleConnected is TRUE in " + fragmentName); @@ -144,21 +148,21 @@ public void run() { new Runnable() { @Override public void run() { - if (DEBUG) - MainActivity.csLibrary4A.appendToLog("Confirm is pressed"); + if (DEBUG) MainActivity.csLibrary4A.appendToLog("Confirm is pressed"); MainActivity.csLibrary4A.forceBTdisconnect(); } }, new Runnable() { @Override public void run() { - if (DEBUG) - MainActivity.csLibrary4A.appendToLog("Cancel is pressed."); + if (DEBUG) MainActivity.csLibrary4A.appendToLog("Cancel is pressed."); } }); } } - } else rfidFailure = false; + } else { + rfidFailure = false; + } int batteryCount = MainActivity.csLibrary4A.getBatteryCount(); String strText = MainActivity.csLibrary4A.getBatteryDisplay(false); @@ -303,7 +307,7 @@ public void onStop() { @Override public void onDestroyView() { - if (DEBUG) MainActivity.csLibrary4A.appendToLog(fragmentName); + if (false) MainActivity.csLibrary4A.appendToLog(fragmentName); super.onDestroyView(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java index 2e5ead5..4fedff4 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java @@ -2,7 +2,6 @@ import android.Manifest; import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; import android.bluetooth.le.ScanCallback; import android.content.pm.PackageManager; import android.os.AsyncTask; @@ -206,7 +205,7 @@ protected void onProgressUpdate(String... output) { if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) continue; } else if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED) continue; if (DEBUG) MainActivity.csLibrary4A.appendToLog("scanResultA.device.getType() = " + scanResultA.device.getType() + ". scanResultA.rssi = " + scanResultA.rssi); - if (scanResultA.device.getType() == BluetoothDevice.DEVICE_TYPE_LE && (true || scanResultA.rssi < 0)) { + if (/*scanResultA.device.getType() == BluetoothDevice.DEVICE_TYPE_LE &&*/(true || scanResultA.rssi < 0)) { boolean match = false; for (int i = 0; i < readersList.size(); i++) { if (readersList.get(i).getAddress().matches(scanResultA.device.getAddress())) { @@ -358,7 +357,7 @@ protected void onPostExecute(Integer result) { readerListAdapter.notifyDataSetChanged(); String connectedBleAddress = connectingDevice.getAddress(); - if (connectedBleAddress.matches(MainActivity.sharedObjects.connectedBleAddressOld) == false) MainActivity.sharedObjects.versioinWarningShown = false; + if (connectedBleAddress.matches(MainActivity.sharedObjects.connectedBleAddressOld) == false) MainActivity.sharedObjects.versionWarningShown = false; MainActivity.sharedObjects.connectedBleAddressOld = connectedBleAddress; MainActivity.sharedObjects.barsList.clear(); MainActivity.sharedObjects.tagsList.clear(); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/DirectWedgeFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/DirectWedgeFragment.java index af59121..5af40d9 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/DirectWedgeFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/DirectWedgeFragment.java @@ -1,11 +1,20 @@ package com.csl.cs108ademoapp.fragments; -import android.Manifest; -import android.bluetooth.BluetoothDevice; +import static android.Manifest.permission.ACCESS_COARSE_LOCATION; +import static android.Manifest.permission.ACCESS_FINE_LOCATION; +import static android.Manifest.permission.BLUETOOTH; +import static android.Manifest.permission.BLUETOOTH_CONNECT; +import static android.Manifest.permission.BLUETOOTH_SCAN; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; +import static android.content.Context.LOCATION_SERVICE; + +import static com.csl.cs108ademoapp.MainActivity.mContext; + import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.location.LocationManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; @@ -28,15 +37,14 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; -import com.csl.cs108ademoapp.BuildConfig; import com.csl.cs108ademoapp.CustomPopupWindow; import com.csl.cs108ademoapp.DrawerListContent; import com.csl.cs108ademoapp.adapters.ReaderListAdapter; import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; +import com.csl.cs108ademoapp.CustomAlertDialog; import com.csl.cslibrary4a.BluetoothGatt; import com.csl.cslibrary4a.ReaderDevice; -import com.csl.cslibrary4a.CustomAlertDialog; import java.util.ArrayList; import java.util.List; @@ -46,7 +54,7 @@ public class DirectWedgeFragment extends CommonFragment { private ArrayList readersList = MainActivity.sharedObjects.readersList; Handler handler = new Handler(); private ReaderListAdapter readerListAdapter; - boolean bConnecting = false; + boolean bWedgeConnecting = false, bWedgeConnected = false; boolean bCurrentIMEmatched = false; String stringImeExpected, stringLabelExpected; @@ -64,15 +72,19 @@ public void onActivityCreated(Bundle savedInstanceState) { TableRow tableRow2 = getActivity().findViewById(R.id.directWedgeRow2); TableRow tableRow3 = getActivity().findViewById(R.id.directWedgeRow3); TableRow tableRow4 = getActivity().findViewById(R.id.directWedgeRow4); + TableRow tableRow5 = getActivity().findViewById(R.id.directWedgeRow5); TableRow tableRowStart = getActivity().findViewById(R.id.directWedgeRowStart); + MainActivity.csLibrary4A.appendToLog("getPackageName = " + getActivity().getPackageName()); if (getActivity().getPackageName().contains("cs710awedgeapp")) { androidx.appcompat.app.ActionBar actionBar; actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); actionBar.setIcon(R.drawable.dl_access); - ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#0000FF")); + ColorDrawable colorDrawable = new ColorDrawable(getResources().getColor(R.color.colorPrimary)); actionBar.setBackgroundDrawable(colorDrawable); - actionBar.setTitle("CSL Java Simple Wedge v" + BuildConfig.VERSION_NAME); - + actionBar.setTitle(R.string.app_ime_simplewedge1); + actionBar.setDisplayHomeAsUpEnabled(false); + //String strTitle = actionBar.getTitle().toString() + " v" + BuildConfig.VERSION_NAME; + //actionBar.setTitle(strTitle); } else { //if (getActivity().getPackageName().contains("cs710ademoapp")) { ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); actionBar.setIcon(R.drawable.dl_inv); @@ -82,6 +94,7 @@ public void onActivityCreated(Bundle savedInstanceState) { tableRow2.setVisibility(View.GONE); tableRow3.setVisibility(View.GONE); tableRow4.setVisibility(View.GONE); + tableRow5.setVisibility(View.GONE); tableRowStart.setVisibility(View.VISIBLE); } @@ -102,8 +115,8 @@ public void onActivityCreated(Bundle savedInstanceState) { boolean DEBUG = true; @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - if (DEBUG) MainActivity.csLibrary4A.appendToLog("OnItemClickListener: bConnecting = " + bConnecting + ", position = " + position); - if (bConnecting) return; + if (DEBUG) MainActivity.csLibrary4A.appendToLog("OnItemClickListener: bConnecting = " + bWedgeConnecting + ", position = " + position); + if (bWedgeConnecting) return; ReaderDevice readerDevice = readerListAdapter.getItem(position); if (readersList.size() > position) { @@ -147,7 +160,7 @@ public void onClick(View v) { buttonConnect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (bConnecting) return; + if (bWedgeConnecting) return; if (MainActivity.csLibrary4A.isBleConnected()) { disconnectWedge(); readerListAdapter.notifyDataSetChanged(); @@ -167,6 +180,7 @@ public void onClick(View v) { }); Button buttonStart = (Button) getActivity().findViewById(R.id.directWedgeButtonStart); + if (!getActivity().getPackageName().matches("com.csl.cs710awedgeapp")) buttonStart.setVisibility(View.VISIBLE); buttonStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -185,29 +199,29 @@ public void onClick(View v) { buttonInfo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - CustomPopupWindow customPopupWindow = new CustomPopupWindow(MainActivity.mContext); + CustomPopupWindow customPopupWindow = new CustomPopupWindow(mContext); String stringInfo = - "1. After installation, when first time entering the application, the application may request user to do something, such as turning on location permission, selecting location accuracy, allowing connection and enabling . Please follow the requests and give positive answers.\n\n" + - "2. Use the Reader List box with title: \"Tick box to select reader\" and select the reader you want to connect to. The list shows the reader name and type and Bluetooth MAC address. Tick the box on the right hand side to select the reader to be connected. Once ticked, the reader will be connected automatically. The Connect button below would change to Disconnect.\n\n" + - "3. Once connected, you can now swap this application to background. Just press the Android \"square\" button at the bottom of the screen and the application will be swapped to background\n\n" + - "4. Open the final application that you want the wedge to serve. Call this \"Final Application\" for easy reference.\n\n" + - "5. If the \"Final Application\" allows user to select another input devices, user should see a keyboard icon at the lower right corner of the screen. Select the keyboard as the input.\n\n" + - "6. At this point, the Wedge is ready for the \"Final Application\". Just press and hold the blue gun trigger button of the reader to read the tags in front of the CS710S (or CS108) reader. The tag EPCs will then be shown in the \"Final Application\".\n\n" + - "7. At the end of tag reading, release the trigger button, close the \"Final Application\" and swap back the CSL Simple Wedge application from the background.\n\n" + - "8. Now you can press the Disconnect button to disconnect from the CS710S (or CS108) reader.\n\n" + - "9. Configuration button: Press the button to modify some parameters, such as power, prefix, suffix and delimiter.\n\n" + - "10. Connect / Disconnect button: Press the button to connect / disconnect the reader."; + "1. For the first time launching the application, please grant device permission for location, connectivity and enabling . \n\n" + + "2. Readers will be discovered by the app and please check the box on the right hand side to select the reader to be connected. \n\n" + + "3. Once connected, put the application in background.\n\n" + + "4. Open the target application where you would like data to be printed.\n\n" + + "5. On the target applicatoin , put the cursor to the text field where data will be printed. Switch your keyboard to .\n\n" + + "6. Press and hold the trigger key of the reader to start reading tags. EPC values will be printed to the cursor on your target application.\n\n" + + "7. Switch back to the CSL Data Wedge application. Now you can press the \"Disconnect\" button to disconnect from the reader.\n\n" + + "8. Configuration button: Press the button to modify parameters such as power, prefix, suffix and delimiter.\n\n"; MainActivity.csLibrary4A.appendToLog(stringInfo); customPopupWindow.popupStart(stringInfo, false); } }); - handler.post(runnableStart); + handler.post(runnableStartService); + handler.postDelayed(runnableStart, 1000); } @Override public void onResume() { super.onResume(); + readerListAdapter.notifyDataSetChanged(); updateCurrentIMEMatched(); } @@ -222,18 +236,96 @@ public DirectWedgeFragment() { super("DirectWedgeFragment"); } + public static boolean bUserRequestedDisconnect = false; void disconnectWedge() { - MainActivity.csLibrary4A.disconnect(false); bleDisConnecting = true; bConnecting = false; + MainActivity.csLibrary4A.appendToLog("foregroundReader108: updated 2A"); + MainActivity.csLibrary4A.setForegroundServiceEnable(false); + MainActivity.csLibrary4A.appendToLog("getForegroundReader = " + MainActivity.csLibrary4A.getForegroundReader()); + + MainActivity.csLibrary4A.disconnect(false); bleDisConnecting = true; bWedgeConnecting = false; bUserRequestedDisconnect = true; readersList.clear(); buttonConnect.setText("Connect"); handler.removeCallbacks(runnableStart); handler.postDelayed(runnableStart, 2000); + + MainActivity.csLibrary4A.setWedgeDeviceName(null); MainActivity.csLibrary4A.setWedgeDeviceAddress(null); } void connectWedge(ReaderDevice readerDevice) { MainActivity.csLibrary4A.scanLeDevice(false); - MainActivity.csLibrary4A.connect(readerDevice); bConnecting = true; + MainActivity.csLibrary4A.connect(readerDevice); bWedgeConnecting = true; bWedgeConnected = false; bUserRequestedDisconnect = false; buttonConnect.setText("Connecting"); + MainActivity.csLibrary4A.setWedgeDeviceName(readerDevice.getName()); MainActivity.csLibrary4A.setWedgeDeviceAddress(readerDevice.getAddress()); + MainActivity.csLibrary4A.setWedgeDeviceUUID2p1(readerDevice.getServiceUUID2p1()); } + Runnable runnableStartService = new Runnable() { + boolean DEBUG = false; + + @Override + public void run() { + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, WRITE_EXTERNAL_STORAGE) = " + ActivityCompat.checkSelfPermission(mContext, WRITE_EXTERNAL_STORAGE)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, READ_EXTERNAL_STORAGE) = " + ActivityCompat.checkSelfPermission(mContext, READ_EXTERNAL_STORAGE)); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (mContext.checkSelfPermission(WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + MainActivity.csLibrary4A.appendToLog("runnableStartService: requestPermissions WRITE_EXTERNAL_STORAGE"); // + requestPermissions(new String[] { WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE }, 1); + //Toast.makeText(mContext, com.csl.cslibrary4a.R.string.toast_permission_not_granted, Toast.LENGTH_SHORT).show(); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: WRITE_EXTERNAL_STORAGE is permitted"); /// + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: no need to handle WRITE_EXTERNAL_STORAGE"); + + LocationManager locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); + MainActivity.csLibrary4A.appendToLog("runnableStartService: locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) = " + locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) = " + locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, ACCESS_FINE_LOCATION) = " + ActivityCompat.checkSelfPermission(mContext, ACCESS_FINE_LOCATION)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, ACCESS_COARSE_LOCATION) = " + ActivityCompat.checkSelfPermission(mContext, ACCESS_COARSE_LOCATION)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if ((ActivityCompat.checkSelfPermission(mContext, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED + || ActivityCompat.checkSelfPermission(mContext, ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { + CustomAlertDialog appdialog = new CustomAlertDialog(); + appdialog.Confirm(getActivity(), "Use your location", + "This app collects location data in the background. In terms of the features using this location data in the background, this App collects location data when it is reading RFID tag in all inventory pages. The purpose of this is to correlate the RFID tag with the actual GNSS(GPS) location of the tag. In other words, this is to track the physical location of the logistics item tagged with the RFID tag.", + "No thanks", "Turn on", + new Runnable() { + @Override + public void run() { + MainActivity.csLibrary4A.appendToLog("runnableStartService: allow permission in ACCESS_FINE_LOCATION handler"); + MainActivity.csLibrary4A.appendToLog("runnableStartService: requestPermissions ACCESS_FINE_LOCATION"); + requestPermissions(new String[] { ACCESS_FINE_LOCATION }, 123); //ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION + //if (false) Toast.makeText(mContext, com.csl.cslibrary4a.R.string.toast_permission_not_granted, Toast.LENGTH_SHORT).show(); + /*{ + LocationManager locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); + if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) == false && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) == false) { + MainActivity.csLibrary4A.appendToLog("popupAlert: StreamOut: start activity ACTION_LOCATION_SOURCE_SETTINGS"); + Intent intent1 = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + mContext.startActivity(intent1); + } + }*/ + //bleEnableRequestShown0 = true; mHandler.postDelayed(mRquestAllowRunnable, 60000); + //bAlerting = false; + } + }, + new Runnable() { + @Override + public void run() { + MainActivity.csLibrary4A.appendToLog("runnableStartService: reject permission in ACCESS_FINE_LOCATION handler"); + //bAlerting = false; + //bleEnableRequestShown0 = true; mHandler.postDelayed(mRquestAllowRunnable, 60000); + } + }); + MainActivity.csLibrary4A.appendToLog("runnableStartService: started ACCESS_FINE_LOCATION handler"); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: handled ACCESS_FINE_LOCATION"); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: no need to handle ACCESS_FINE_LOCATION"); + + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, BLUETOOTH_CONNECT) = " + ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_CONNECT)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, BLUETOOTH_SCAN) = " + ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_SCAN)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + if (ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { + MainActivity.csLibrary4A.appendToLog("runnableStartService: requestPermissions BLUETOOTH_SCAN and BLUETOOTH_CONNECT"); + requestPermissions(new String[] { BLUETOOTH_SCAN, BLUETOOTH_CONNECT }, 123); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: handled BLUETOOTH_CONNECT and BLUETOOTH_SCAN"); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: no need to handle BLUETOOTH_SCAN and BLUETOOTH_CONNECT"); + } + }; + int runningMode = -1, connectWait = 0, scanWait = 0; Runnable runnableStart = new Runnable() { @Override @@ -241,71 +333,127 @@ public void run() { boolean bValue = true; if (MainActivity.csLibrary4A.isBleConnected()) { if (MainActivity.csLibrary4A.mrfidToWriteSize() == 0) { - MainActivity.csLibrary4A.setPowerLevel(MainActivity.wedgePower); - MainActivity.csLibrary4A.appendToLog("isBleConnected is true with mrfidToWriteSize = " + MainActivity.csLibrary4A.mrfidToWriteSize()); - bConnecting = false; - for (int i = 0; i < readersList.size(); i++) { - ReaderDevice readerDevice = readersList.get(i); - if (readerDevice.getSelected() && readerDevice.isConnected() == false) { - readerDevice.setConnected(true); - readersList.set(i, readerDevice); - readerListAdapter.notifyDataSetChanged(); + bWedgeConnecting = false; + if (bWedgeConnected == false) { + bWedgeConnected = true; + MainActivity.csLibrary4A.setPowerLevel(MainActivity.csLibrary4A.getWedgePower()); + MainActivity.csLibrary4A.appendToLog("runnableStart: isBleConnected is true with mrfidToWriteSize = " + MainActivity.csLibrary4A.mrfidToWriteSize()); + for (int i = 0; i < readersList.size(); i++) { + ReaderDevice readerDevice = readersList.get(i); + if (readerDevice.getSelected() && readerDevice.isConnected() == false) { + readerDevice.setConnected(true); + readersList.set(i, readerDevice); + readerListAdapter.notifyDataSetChanged(); + } + } + if (getActivity().getPackageName().contains("cs710awedgeapp")) { + MainActivity.csLibrary4A.appendToLog("foregroundReader108: updated 2b"); + MainActivity.csLibrary4A.setForegroundServiceEnable(true); + MainActivity.csLibrary4A.saveSetting2File(); } } buttonConnect.setText("Disconnect"); - return; } //else Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.toast_not_ready), Toast.LENGTH_SHORT).show(); - } else if (bConnecting) { - MainActivity.csLibrary4A.appendToLog("bConnecting is true"); + } else if (bWedgeConnecting) { + MainActivity.csLibrary4A.appendToLog("runnableStart: bConnecting is true"); } else if (MainActivity.csLibrary4A.isBleScanning()) { - MainActivity.csLibrary4A.appendToLog("isBleScanning is true"); + MainActivity.csLibrary4A.appendToLog("runnableStart: isBleScanning is true"); boolean listUpdated = false; - if (false && ++scanWait > 10) { + if (++scanWait > 10) { + boolean bValue1 = MainActivity.csLibrary4A.scanLeDevice(false); + MainActivity.csLibrary4A.appendToLog("runnableStart: STOP scanning with result = " + bValue1); scanWait = 0; - readersList.clear(); listUpdated = true; - } - while (true) { - BluetoothGatt.Cs108ScanData cs108ScanData = MainActivity.csLibrary4A.getNewDeviceScanned(); - if (cs108ScanData != null) { - BluetoothGatt.Cs108ScanData scanResultA = cs108ScanData; - if (getActivity() == null) continue; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) continue; - } else if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED) continue; - if (DEBUG) MainActivity.csLibrary4A.appendToLog("scanResultA.device.getType() = " + scanResultA.device.getType() + ". scanResultA.rssi = " + scanResultA.rssi); - if (scanResultA.device.getType() == BluetoothDevice.DEVICE_TYPE_LE && (true || scanResultA.rssi < 0)) { - boolean match = false; - for (int i = 0; i < readersList.size(); i++) { - if (readersList.get(i).getAddress().matches(scanResultA.device.getAddress())) { - ReaderDevice readerDevice1 = readersList.get(i); - int count = readerDevice1.getCount(); - count++; - readerDevice1.setCount(count); - readerDevice1.setRssi(scanResultA.rssi); - readersList.set(i, readerDevice1); listUpdated = true; - match = true; - break; + readersList.clear(); + listUpdated = true; + } else { + while (true) { + BluetoothGatt.Cs108ScanData cs108ScanData = MainActivity.csLibrary4A.getNewDeviceScanned(); + if (cs108ScanData != null) { + BluetoothGatt.Cs108ScanData scanResultA = cs108ScanData; + if (getActivity() == null) continue; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { + continue; } + } else if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), BLUETOOTH) != PackageManager.PERMISSION_GRANTED) { + continue; } - if (match == false) { - ReaderDevice readerDevice = new ReaderDevice(scanResultA.device.getName(), scanResultA.device.getAddress(), false, "", 1, scanResultA.rssi, scanResultA.serviceUUID2p2); - String strInfo = ""; - if (scanResultA.device.getBondState() == 12) { - strInfo += "BOND_BONDED\n"; + if (DEBUG) + MainActivity.csLibrary4A.appendToLog("runnableStart: scanResultA.device.getType() = " + scanResultA.device.getType() + ". scanResultA.rssi = " + scanResultA.rssi); + if (/*scanResultA.device.getType() == BluetoothDevice.DEVICE_TYPE_LE &&*/ (true || scanResultA.rssi < 0)) { + boolean match = false; + for (int i = 0; i < readersList.size(); i++) { + if (readersList.get(i).getAddress().matches(scanResultA.device.getAddress())) { + ReaderDevice readerDevice1 = readersList.get(i); + int count = readerDevice1.getCount(); + count++; + readerDevice1.setCount(count); + readerDevice1.setRssi(scanResultA.rssi); + readersList.set(i, readerDevice1); + listUpdated = true; + match = true; + break; + } } - readerDevice.setDetails(strInfo + "scanRecord=" + MainActivity.csLibrary4A.byteArrayToString(scanResultA.scanRecord)); - readersList.add(readerDevice); listUpdated = true; + if (match == false) { + ReaderDevice readerDevice = new ReaderDevice(scanResultA.device.getName(), scanResultA.device.getAddress(), false, "", 1, scanResultA.rssi, scanResultA.serviceUUID2p2); + String strInfo = ""; + if (scanResultA.device.getBondState() == 12) { + strInfo += "BOND_BONDED\n"; + } + //readerDevice.setDetails(strInfo + "scanRecord=" + mCsLibrary4A.byteArrayToString(scanResultA.scanRecord)); + readersList.add(readerDevice); + listUpdated = true; + } + } else { + if (DEBUG) + MainActivity.csLibrary4A.appendToLog("runnableStart: deviceScanTask: rssi=" + scanResultA.rssi + ", error type=" + scanResultA.device.getType()); } + //scanWait = 0; } else { - if (DEBUG) MainActivity.csLibrary4A.appendToLog("deviceScanTask: rssi=" + scanResultA.rssi + ", error type=" + scanResultA.device.getType()); + MainActivity.csLibrary4A.appendToLog("runnableStart: NO reader is found with scanWait = " + scanWait); + break; } - } else break; + } + if (listUpdated) readerListAdapter.notifyDataSetChanged(); } - if (listUpdated) readerListAdapter.notifyDataSetChanged(); } else { - MainActivity.csLibrary4A.appendToLog("isBleScanning is FALSE"); - bConnecting = false; connectWait = 0; scanWait = 0; - boolean bValue1 = MainActivity.csLibrary4A.scanLeDevice(true); + MainActivity.csLibrary4A.appendToLog("bbb 4"); + if (bWedgeConnected) { + bWedgeConnected = false; + MainActivity.csLibrary4A.appendToLog("bbb 4A"); + readersList.clear(); readerListAdapter.notifyDataSetChanged(); + buttonConnect.setText("Connect"); + } + MainActivity.csLibrary4A.appendToLog("runnableStart: isBleScanning is FALSE"); + boolean bScanPermitted = true; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { //that is android 12 or above + if (ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED + || ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { + bScanPermitted = false; + //MainActivity.csLibrary4A.appendToLog("runnableStartService: requestPermissions BLUETOOTH_SCAN and BLUETOOTH_CONNECT"); + //requestPermissions(new String[] { BLUETOOTH_SCAN, BLUETOOTH_CONNECT }, 123); + MainActivity.csLibrary4A.appendToLog("runnableStart: CANNOT start scanLeDevice as BLUETOOTH_CONNECT && BLUETOOTH_SCAN is NOT yet permitted"); + } else { + MainActivity.csLibrary4A.appendToLog("runnableStartService: BLUETOOTH_CONNECT and BLUETOOTH_SCAN and (ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION) is permitted"); + } + } else { + MainActivity.csLibrary4A.appendToLog("runnableStartService: no need to handle BLUETOOTH_SCAN and BLUETOOTH_CONNECT"); + if (ActivityCompat.checkSelfPermission(mContext, BLUETOOTH) != PackageManager.PERMISSION_GRANTED) { + bScanPermitted = false; + MainActivity.csLibrary4A.appendToLog("runnableStart: CANNOT start scanLeDevice as BLUETOOTH is NOT yet permitted"); + } else { + MainActivity.csLibrary4A.appendToLog("runnableStartService: BLUETOOTH_CONNECT and BLUETOOTH_SCAN and (ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION) is permitted"); + } + } + if ((ActivityCompat.checkSelfPermission(mContext, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED + || ActivityCompat.checkSelfPermission(mContext, ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { + bScanPermitted = false; + MainActivity.csLibrary4A.appendToLog("runnableStart: CANNOT start scanLeDevice as ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION is NOT yet permitted"); + } + bWedgeConnecting = false; connectWait = 0; scanWait = 0; + boolean bValue1 = false; + if (bScanPermitted) bValue1 = MainActivity.csLibrary4A.scanLeDevice(true); MainActivity.csLibrary4A.appendToLog("runnableStart: starting scanLeDevice is " + bValue1 + " with isScanning = " + MainActivity.csLibrary4A.isBleScanning()); } handler.postDelayed(runnableStart, 1000); @@ -347,9 +495,9 @@ void updateCurrentIMEMatched() { boolean bFound = false; List list = null; stringImeExpected = getActivity().getPackageName() + ".CustomIME"; - if (MainActivity.drawerPositionsDefault != DrawerListContent.DrawerPositions.MAIN) stringLabelExpected = getResources().getString(R.string.app_newime1); - else if (getActivity().getPackageName().contains("cs710ademoapp")) stringLabelExpected = getResources().getString(R.string.app_newime); - else stringLabelExpected = getResources().getString(R.string.app_ime); + if (MainActivity.drawerPositionsDefault != DrawerListContent.DrawerPositions.MAIN) stringLabelExpected = getResources().getString(R.string.app_ime_simplewedge1); + else if (getActivity().getPackageName().contains("cs710ademoapp")) stringLabelExpected = getResources().getString(R.string.app_ime_cs710); + else stringLabelExpected = getResources().getString(R.string.app_ime_cs108); InputMethodManager inputMethodManager = inputMethodManager = (InputMethodManager) getActivity().getSystemService(getActivity().INPUT_METHOD_SERVICE); MainActivity.csLibrary4A.appendToLog("FEATURE_INPUT_METHODS is " + getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_INPUT_METHODS)); @@ -389,7 +537,7 @@ void updateCurrentIMEMatched() { if (list.get(i).getServiceName().contains(stringImeExpected) && list.get(i).loadLabel(getActivity().getPackageManager()).toString().contains(stringLabelExpected)) { bFound = true; MainActivity.csLibrary4A.appendToLog("Found expected IME with id = " + list.get(i).getId()); - String idCurrent = Settings.Secure.getString(MainActivity.mContext.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); + String idCurrent = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); MainActivity.csLibrary4A.appendToLog("Found current IME with id = " + idCurrent); if (list.get(i).getId().matches(idCurrent)) { MainActivity.csLibrary4A.appendToLog("expected IME matches current IME"); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/FdmicroFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/FdmicroFragment.java index 9c58a82..c459d07 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/FdmicroFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/FdmicroFragment.java @@ -1,6 +1,8 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; + +import com.csl.cs108ademoapp.adapters.MyAdapter; import com.google.android.material.tabs.TabLayout; import androidx.viewpager.widget.ViewPager; @@ -12,12 +14,11 @@ import android.view.ViewGroup; import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.FdmicroAdapter; public class FdmicroFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - FdmicroAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Scan", "Configuration"}; @@ -29,7 +30,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) mAdapter.fragment0; + InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) adapter.fragment0; if (item.getItemId() == R.id.menuAction_clear) { fragment.clearTagsList(); return true; @@ -75,44 +76,47 @@ public void onTabReselected(TabLayout.Tab tab) { } }); - mAdapter = new FdmicroAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, InventoryRfidiMultiFragment.newInstance(true,"E2827001")); + adapter.setFragment(1, new AccessFdmicroFragment()); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); } @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); super.onDestroy(); } @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/ForegroundFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/ForegroundFragment.java new file mode 100644 index 0000000..3f29f88 --- /dev/null +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/ForegroundFragment.java @@ -0,0 +1,134 @@ +package com.csl.cs108ademoapp.fragments; + +import android.os.Bundle; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; + +import com.csl.cs108ademoapp.BuildConfig; +import com.csl.cs108ademoapp.MainActivity; +import com.csl.cs108ademoapp.R; + +public class ForegroundFragment extends CommonFragment { + Handler mHandler = new Handler(); + long timeMillis = 0; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState, true); + return inflater.inflate(R.layout.fragment_about, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); + actionBar.setIcon(R.drawable.dl_about); + actionBar.setTitle(R.string.title_activity_about); + + TextView appVersionView = (TextView) getActivity().findViewById(R.id.appVersion); + appVersionView.setText(BuildConfig.VERSION_NAME); + TextView libVersionView = (TextView) getActivity().findViewById(R.id.libVersion); + libVersionView.setText(MainActivity.csLibrary4A.getlibraryVersion()); + + MainActivity.mSensorConnector.mLocationDevice.turnOn(true); + MainActivity.mSensorConnector.mSensorDevice.turnOn(true); + mHandler.post(updateRunnable); + } + + @Override + public void onDestroy() { + MainActivity.mSensorConnector.mLocationDevice.turnOn(false); + MainActivity.mSensorConnector.mSensorDevice.turnOn(false); + mHandler.removeCallbacks(updateRunnable); + super.onDestroy(); + } + + public ForegroundFragment() { + super("AboutFragment"); + } + + private final Runnable updateRunnable = new Runnable() { + @Override + public void run() { + TextView timeStampView = (TextView) getActivity().findViewById(R.id.timeStamp); + TextView locationView = (TextView) getActivity().findViewById(R.id.GeoLocation); + TextView eCompassView = (TextView) getActivity().findViewById(R.id.eCompass); + + TextView radioVersion = (TextView) getActivity().findViewById(R.id.radioVersion); + TextView modelVersion = (TextView) getActivity().findViewById(R.id.modelVersion); + TextView moduleRfidOnStatus = (TextView) getActivity().findViewById(R.id.moduleRfid_onStatus); + TextView moduleBarOnStatus = (TextView) getActivity().findViewById(R.id.moduleBar_onStatus); + TextView triggerOnStatus = (TextView) getActivity().findViewById(R.id.trigger_onStatus); + TextView moduleBattery = (TextView) getActivity().findViewById(R.id.module_battery); + TextView moduleVersionLabel = (TextView) getActivity().findViewById(R.id.module_versionLabel); + if (MainActivity.csLibrary4A.get98XX() == 2) moduleVersionLabel.setText("Atmel firmware version"); + else if (MainActivity.csLibrary4A.get98XX() == 0) moduleVersionLabel.setText("SiliconLab firmware version"); + TextView moduleVersion = (TextView) getActivity().findViewById(R.id.module_version); + TextView radioSerial = (TextView) getActivity().findViewById(R.id.radio_serialnumber); + TextView radioBoardVersion = (TextView) getActivity().findViewById(R.id.radio_boardVersion); + TextView productSerial = (TextView) getActivity().findViewById(R.id.module_productserialnumber); + TextView boardVersion = (TextView) getActivity().findViewById(R.id.module_boardversion); + TextView barcodeSerial = (TextView) getActivity().findViewById(R.id.moduleBar_serialNumber); + TextView barcodeDate = (TextView) getActivity().findViewById(R.id.moduleBar_date); + TextView barcodeVersion = (TextView) getActivity().findViewById(R.id.moduleBar_version); + + TextView bluetoothVersion = (TextView) getActivity().findViewById(R.id.bluetooth_version); + TextView bluetoothAddress = (TextView) getActivity().findViewById(R.id.bluetooth_address); + TextView bluetoothRssi = (TextView) getActivity().findViewById(R.id.bluetooth_rssi); + + timeStampView.setText(MainActivity.mSensorConnector.getTimeStamp()); + locationView.setText(MainActivity.mSensorConnector.mLocationDevice.getLocation()); + eCompassView.setText(MainActivity.mSensorConnector.mSensorDevice.getEcompass()); + if (MainActivity.csLibrary4A.isBleConnected()) { + if (System.currentTimeMillis() - timeMillis > 5000) { + timeMillis = System.currentTimeMillis(); + radioVersion.setText(MainActivity.csLibrary4A.getMacVer()); + modelVersion.setText(MainActivity.csLibrary4A.getModelNumber()); + moduleVersion.setText(MainActivity.csLibrary4A.hostProcessorICGetFirmwareVersion()); + bluetoothVersion.setText(MainActivity.csLibrary4A.getBluetoothICFirmwareVersion()); + MainActivity.csLibrary4A.batteryLevelRequest(); + } + moduleRfidOnStatus.setText(MainActivity.csLibrary4A.getRfidOnStatus() ? "on" : "off"); + triggerOnStatus.setText(MainActivity.csLibrary4A.getTriggerButtonStatus() ? "pressed" : "released"); + moduleBarOnStatus.setText(MainActivity.csLibrary4A.getBarcodeOnStatus() ? "on" : "off"); + moduleBattery.setText(MainActivity.csLibrary4A.getBatteryDisplay(true)); + if (MainActivity.csLibrary4A.isRfidFailure()) radioSerial.setText("Not available"); + else radioSerial.setText(MainActivity.csLibrary4A.getRadioSerial()); + radioBoardVersion.setText(MainActivity.csLibrary4A.getRadioBoardVersion()); + productSerial.setText(MainActivity.csLibrary4A.getHostProcessorICSerialNumber()); + boardVersion.setText(MainActivity.csLibrary4A.getHostProcessorICBoardVersion()); + if (MainActivity.csLibrary4A.isBarcodeFailure()) barcodeSerial.setText("Not available"); + else { + barcodeSerial.setText(MainActivity.csLibrary4A.getBarcodeSerial()); + barcodeDate.setText(MainActivity.csLibrary4A.getBarcodeDate()); + barcodeVersion.setText(MainActivity.csLibrary4A.getBarcodeVersion()); + } + bluetoothAddress.setText(MainActivity.csLibrary4A.getBluetoothDeviceAddress()); + bluetoothRssi.setText(String.valueOf(MainActivity.csLibrary4A.getRssi())); + } else { + radioVersion.setText(""); + moduleRfidOnStatus.setText(""); + moduleBarOnStatus.setText(""); + triggerOnStatus.setText(""); + moduleBattery.setText(""); + moduleVersion.setText(""); + bluetoothVersion.setText(""); + radioSerial.setText(""); + radioBoardVersion.setText(""); + productSerial.setText(""); + boardVersion.setText(""); + barcodeSerial.setText(""); + bluetoothAddress.setText(""); + bluetoothRssi.setText(""); + } + mHandler.postDelayed(updateRunnable, 1000); + } + }; +} diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeFragment.java index bc0e412..8eaf931 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeFragment.java @@ -1,15 +1,47 @@ package com.csl.cs108ademoapp.fragments; +import static android.Manifest.permission.ACCESS_COARSE_LOCATION; +import static android.Manifest.permission.ACCESS_FINE_LOCATION; +import static android.Manifest.permission.BLUETOOTH_CONNECT; +import static android.Manifest.permission.BLUETOOTH_SCAN; +import static android.Manifest.permission.POST_NOTIFICATIONS; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; +import static android.content.Context.LOCATION_SERVICE; +import static androidx.core.app.ServiceCompat.STOP_FOREGROUND_REMOVE; +import static androidx.core.app.ServiceCompat.stopForeground; +import static androidx.core.content.ContextCompat.getSystemService; +import static com.csl.cs108ademoapp.MainActivity.isHomeFragment; +import static com.csl.cs108ademoapp.MainActivity.mContext; + +import android.app.ActivityManager; +import android.app.Service; import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.LocationManager; +import android.os.Build; import android.os.Bundle; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; -import com.csl.cs108ademoapp.*; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.app.NotificationManagerCompat; +import androidx.core.content.ContextCompat; + +import com.csl.cs108ademoapp.CustomAlertDialog; +import com.csl.cs108ademoapp.CustomPopupWindow; +import com.csl.cs108ademoapp.CustomProgressDialog; +import com.csl.cs108ademoapp.MainActivity; +import com.csl.cs108ademoapp.MyForegroundService; +import com.csl.cs108ademoapp.R; public class HomeFragment extends CommonFragment { final boolean DEBUG = false; @@ -22,6 +54,8 @@ public void onAttach(Context context) { @Override public void onStart() { Log.i("Hello", "HomeFragment.onStart"); + isHomeFragment = true; + MainActivity.csLibrary4A.appendToLog("isHomeFragment1 = " + isHomeFragment); super.onStart(); } @@ -30,7 +64,7 @@ public void onStart() { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState, true); if (getActivity().getPackageName().contains("com.csl.cs710ademoapp")) return inflater.inflate(R.layout.home_layout710, container, false); - else return inflater.inflate(R.layout.home_layout, container, false); + else return inflater.inflate(R.layout.home_layout108, container, false); } @Override @@ -40,13 +74,39 @@ public void onActivityCreated(Bundle savedInstanceState) { if (true && ((AppCompatActivity) getActivity()).getSupportActionBar() != null) { ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); actionBar.setIcon(android.R.drawable.ic_menu_save); - if (getActivity().getPackageName().contains("cs710awedgeapp")) actionBar.setTitle(R.string.title_activity_newhome1); - else if (getActivity().getPackageName().contains("cs710ademoapp")) actionBar.setTitle(R.string.title_activity_newhome); - else actionBar.setTitle(R.string.title_activity_home); + if (getActivity().getPackageName().contains("cs710ademoapp")) actionBar.setTitle(R.string.title_activity_home_cs710); + else actionBar.setTitle(R.string.title_activity_home_cs108); + } + if (true) { + String strForegroundReader = MainActivity.csLibrary4A.getForegroundReader(); + MainActivity.csLibrary4A.appendToLog("strForegroundReader = " + strForegroundReader + ", getForegroundServiceEnable = " + MainActivity.csLibrary4A.getForegroundServiceEnable()); + if (!getActivity().getPackageName().contains("com.csl.cs710awedgeapp") && strForegroundReader != null && strForegroundReader.length() != 0) { + MainActivity.csLibrary4A.appendToLog("strForegroundReader = " + strForegroundReader + ", getForegroundServiceEnable = " + MainActivity.csLibrary4A.getForegroundServiceEnable()); + LinearLayout linearLayout1, linearLayout2, linearLayout3, linearLayout4, linearLayout5; + linearLayout1 = (LinearLayout) getActivity().findViewById(R.id.mainRow1); + linearLayout2 = (LinearLayout) getActivity().findViewById(R.id.mainRow2); + linearLayout3 = (LinearLayout) getActivity().findViewById(R.id.mainRow3); + linearLayout4 = (LinearLayout) getActivity().findViewById(R.id.mainRow4); + linearLayout5 = (LinearLayout) getActivity().findViewById(R.id.mainRow5); + if (getActivity().getPackageName().contains("com.csl.cs710ademoapp")) { + FrameLayout frameLayout = (FrameLayout) getActivity().findViewById(R.id.mainButton1); + frameLayout.setVisibility(View.INVISIBLE); + } else { + Button button = (Button) getActivity().findViewById(R.id.mainButton1); + button.setVisibility(View.INVISIBLE); + } + linearLayout1.setVisibility(View.INVISIBLE); + linearLayout2.setVisibility(View.GONE); + linearLayout3.setVisibility(View.VISIBLE); + linearLayout4.setVisibility(View.INVISIBLE); + //linearLayout5.setVisibility(View.INVISIBLE); + + } } MainActivity.mDid = null; - if (true || MainActivity.sharedObjects.versioinWarningShown == false) + if (true || MainActivity.sharedObjects.versionWarningShown == false) mHandler.post(runnableConfiguring); + mHandler.postDelayed(runnableStartService, 1000); } @Override @@ -56,6 +116,13 @@ public void onStop() { super.onStop(); } + @Override + public void onDestroyView() { + isHomeFragment = false; + //MainActivity.csLibrary4A.appendToLog("isHomeFragment1 = " + isHomeFragment); + super.onDestroyView(); + } + public HomeFragment() { super("HomeFragment"); } @@ -68,7 +135,7 @@ void stopProgressDialog() { boolean DEBUG = false; @Override public void run() { - if (DEBUG) MainActivity.csLibrary4A.appendToLog("runnableConfiguring(): mrfidToWriteSize = " + MainActivity.csLibrary4A.mrfidToWriteSize()); + if (true) MainActivity.csLibrary4A.appendToLog("runnableConfiguring(): mrfidToWriteSize = " + MainActivity.csLibrary4A.mrfidToWriteSize()); boolean progressShown = false; if (progressDialog != null) { if (progressDialog.isShowing()) progressShown = true; } if (MainActivity.csLibrary4A.isBleConnected() == false || MainActivity.csLibrary4A.isRfidFailure()) { @@ -87,17 +154,125 @@ public void run() { } } else { stopProgressDialog(); - if (MainActivity.sharedObjects.versioinWarningShown == false) { + if (MainActivity.sharedObjects.versionWarningShown == false) { String stringPopup = MainActivity.csLibrary4A.checkVersion(); if (false && stringPopup != null && stringPopup.length() != 0) { stringPopup = "Firmware too old\nPlease upgrade firmware to at least:" + stringPopup; CustomPopupWindow customPopupWindow = new CustomPopupWindow((Context)getActivity()); customPopupWindow.popupStart(stringPopup, false); } - MainActivity.sharedObjects.versioinWarningShown = true; + MainActivity.sharedObjects.versionWarningShown = true; } } MainActivity.csLibrary4A.setPwrManagementMode(true); } }; + + Runnable runnableStartService = new Runnable() { + boolean DEBUG = false; + + @Override + public void run() { + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, WRITE_EXTERNAL_STORAGE) = " + ActivityCompat.checkSelfPermission(mContext, WRITE_EXTERNAL_STORAGE)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, READ_EXTERNAL_STORAGE) = " + ActivityCompat.checkSelfPermission(mContext, READ_EXTERNAL_STORAGE)); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (mContext.checkSelfPermission(WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + MainActivity.csLibrary4A.appendToLog("runnableStartService: requestPermissions WRITE_EXTERNAL_STORAGE"); // + requestPermissions(new String[] { WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE }, 1); + //Toast.makeText(mContext, com.csl.cslibrary4a.R.string.toast_permission_not_granted, Toast.LENGTH_SHORT).show(); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: WRITE_EXTERNAL_STORAGE is permitted"); /// + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: no need to handle WRITE_EXTERNAL_STORAGE"); + + LocationManager locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); + MainActivity.csLibrary4A.appendToLog("runnableStartService: locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) = " + locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) = " + locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, ACCESS_FINE_LOCATION) = " + ActivityCompat.checkSelfPermission(mContext, ACCESS_FINE_LOCATION)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, ACCESS_COARSE_LOCATION) = " + ActivityCompat.checkSelfPermission(mContext, ACCESS_COARSE_LOCATION)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if ((ActivityCompat.checkSelfPermission(mContext, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(mContext, ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { + CustomAlertDialog appdialog = new CustomAlertDialog(); + appdialog.Confirm(getActivity(), "Use your location", + "This app collects location data in the background. In terms of the features using this location data in the background, this App collects location data when it is reading RFID tag in all inventory pages. The purpose of this is to correlate the RFID tag with the actual GNSS(GPS) location of the tag. In other words, this is to track the physical location of the logistics item tagged with the RFID tag.", + "No thanks", "Turn on", + new Runnable() { + @Override + public void run() { + MainActivity.csLibrary4A.appendToLog("runnableStartService: allow permission in ACCESS_FINE_LOCATION handler"); + MainActivity.csLibrary4A.appendToLog("runnableStartService: requestPermissions ACCESS_FINE_LOCATION"); + requestPermissions(new String[] { ACCESS_FINE_LOCATION }, 123); //ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION + //if (false) Toast.makeText(mContext, com.csl.cslibrary4a.R.string.toast_permission_not_granted, Toast.LENGTH_SHORT).show(); + /*{ + LocationManager locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); + if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) == false && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) == false) { + MainActivity.csLibrary4A.appendToLog("popupAlert: StreamOut: start activity ACTION_LOCATION_SOURCE_SETTINGS"); + Intent intent1 = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + mContext.startActivity(intent1); + } + }*/ + //bleEnableRequestShown0 = true; mHandler.postDelayed(mRquestAllowRunnable, 60000); + //bAlerting = false; + } + }, + new Runnable() { + @Override + public void run() { + MainActivity.csLibrary4A.appendToLog("runnableStartService: reject permission in ACCESS_FINE_LOCATION handler"); + //bAlerting = false; + //bleEnableRequestShown0 = true; mHandler.postDelayed(mRquestAllowRunnable, 60000); + } + }); + MainActivity.csLibrary4A.appendToLog("runnableStartService: started ACCESS_FINE_LOCATION handler"); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: handled ACCESS_FINE_LOCATION"); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: no need to handle ACCESS_FINE_LOCATION"); + + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, BLUETOOTH_CONNECT) = " + ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_CONNECT)); + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, BLUETOOTH_SCAN) = " + ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_SCAN)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + if (ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(mContext, BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { + MainActivity.csLibrary4A.appendToLog("runnableStartService: requestPermissions BLUETOOTH_SCAN and BLUETOOTH_CONNECT"); + requestPermissions(new String[] { BLUETOOTH_SCAN, BLUETOOTH_CONNECT }, 123); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: handled BLUETOOTH_CONNECT and BLUETOOTH_SCAN"); + } else MainActivity.csLibrary4A.appendToLog("runnableStartService: no need to handle BLUETOOTH_SCAN and BLUETOOTH_CONNECT"); + + MainActivity.csLibrary4A.appendToLog("runnableStartService: ActivityCompat.checkSelfPermission(activity, POST_NOTIFICATIONS) = " + ActivityCompat.checkSelfPermission(mContext, POST_NOTIFICATIONS)); + if (NotificationManagerCompat.from(getActivity()).areNotificationsEnabled()) MainActivity.csLibrary4A.appendToLog("Notification is enabled"); + else MainActivity.csLibrary4A.appendToLog("Notification is disabled"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (ActivityCompat.checkSelfPermission(mContext, POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { + MainActivity.csLibrary4A.appendToLog("runnableStartService: requestPermissions POST_NOTIFICATIONS"); + requestPermissions(new String[] { POST_NOTIFICATIONS }, 10); //POST_NOTIFICATIONS, FOREGROUND_SERVICE_LOCATION + } else { + MainActivity.csLibrary4A.appendToLog("runnableStartService: handled POST_NOTIFICATIONS"); + startService(); + } + } else { + MainActivity.csLibrary4A.appendToLog("runnableStartService: no need to handle POST_NOTIFICATIONS"); + startService(); + } + } + }; + Intent serviceIntent; + Service serviceStarted; + public void startService() { + ActivityManager activityManager = (ActivityManager) getSystemService(getContext(), ActivityManager.class); + for (ActivityManager.RunningServiceInfo service: activityManager.getRunningServices(Integer.MAX_VALUE)) { + MainActivity.csLibrary4A.appendToLog("MyForegroundService.class.getName = " + MyForegroundService.class.getName() + ", service.service.getClassName = " + service.service.getClassName()); + if (MyForegroundService.class.getName().equals(service.service.getClassName())) { + return; + } + } + serviceIntent = new Intent(getActivity(), MyForegroundService.class); + Log.i("Hello", "getActivity is " + (getActivity() == null ? "NULL" : "Valid")); + serviceIntent.putExtra("inputExtra", "Foreground Service Example in Android"); + Log.i("Hello", "getContext is " + (getContext() == null ? "NULL" : "Valid")); + ContextCompat.startForegroundService(getContext(), serviceIntent); + } + public void stopService1() { + //Intent serviceIntent = new Intent(getActivity(), CustomForegroundService.class); + stopForeground(serviceStarted, STOP_FOREGROUND_REMOVE); + } + + void popupAlert() { + + } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeSpecialFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeSpecialFragment.java index 6a2a066..11c8190 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeSpecialFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeSpecialFragment.java @@ -1,13 +1,14 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; + import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; @@ -28,13 +29,15 @@ public void onActivityCreated(Bundle savedInstanceState) { actionBar.setTitle(R.string.title_activity_special); } + Button buttonAuraSense = (Button) getActivity().findViewById(R.id.SpecialButtonAurasense); Button buttonFdmicro = (Button) getActivity().findViewById(R.id.SpecialButtonFdmicro); Button buttonLanda = (Button) getActivity().findViewById(R.id.SpecialButtonLanda); if (MainActivity.csLibrary4A.get98XX() == 2) { + buttonAuraSense.setVisibility(View.GONE); buttonFdmicro.setVisibility(View.GONE); buttonLanda.setVisibility(View.GONE); } MainActivity.mDid = null; - MainActivity.csLibrary4A.restoreAfterTagSelect(); + if (MainActivity.csLibrary4A.isBleConnected()) MainActivity.csLibrary4A.restoreAfterTagSelect(); } public HomeSpecialFragment() { diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeWFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeWFragment.java index 5d15898..3490ae4 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeWFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/HomeWFragment.java @@ -8,20 +8,17 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; +import com.csl.cs108ademoapp.adapters.MyAdapter; import com.google.android.material.tabs.TabLayout; public class HomeWFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - MainWAdapter adapter; + MyAdapter adapter; private String[] tabs = {"Normal", "Simple"}; int iTargetOld, iSessionOld; @@ -59,7 +56,7 @@ public void onActivityCreated(Bundle savedInstanceState) { actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); actionBar.setIcon(R.drawable.dl_inv); - actionBar.setTitle(R.string.title_activity_home); + actionBar.setTitle(R.string.title_activity_home_cs108); TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); @@ -68,7 +65,11 @@ public void onActivityCreated(Bundle savedInstanceState) { adapter.fragment0.onDestroy(); adapter.fragment1.onDestroy(); } - adapter = new MainWAdapter(getActivity().getSupportFragmentManager()); + + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, new HomeFragment()); + adapter.setFragment(1, new DirectWedgeFragment()); + MainActivity.csLibrary4A.appendToLog("viewPager is " + (viewPager == null ? "null" : "valid")); viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); viewPager.setAdapter(null); viewPager.setAdapter(adapter); @@ -133,43 +134,4 @@ public void onDetach() { public HomeWFragment() { super("HomeWFragment"); } - - public class MainWAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - MainActivity.csLibrary4A.appendToLog("getItem = " + index); - Fragment fragment = null; - switch (index) { - case 0: - fragment = new HomeFragment(); - fragment0 = fragment; - break; - case 1: - fragment = new DirectWedgeFragment(); - fragment1 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public MainWAdapter(FragmentManager fm) { - super(fm); - } - } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/ImpinjFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/ImpinjFragment.java index 36b79e9..bf4886a 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/ImpinjFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/ImpinjFragment.java @@ -1,24 +1,24 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; - -import com.google.android.material.tabs.TabLayout; -import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.ImpinjAdapter; +import com.csl.cs108ademoapp.adapters.MyAdapter; +import com.google.android.material.tabs.TabLayout; public class ImpinjFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - ImpinjAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Configure", "Scan", "Authenticate"}; int iTargetOld, iSessionOld; @@ -31,21 +31,21 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment1; + InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) adapter.getItem(1); if (item.getItemId() == R.id.menuAction_clear) { - fragment1.clearTagsList(); + fragment.clearTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_sortRssi) { - fragment1.sortTagsListByRssi(); + fragment.sortTagsListByRssi(); return true; } else if (item.getItemId() == R.id.menuAction_sort) { - fragment1.sortTagsList(); + fragment.sortTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_save) { - fragment1.saveTagsList(); + fragment.saveTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_share) { - fragment1.shareTagsList(); + fragment.shareTagsList(); return true; } else return super.onOptionsItemSelected(item); } @@ -60,9 +60,13 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new ImpinjAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, new AccessImpinjFragment(false)); + adapter.setFragment(1, InventoryRfidiMultiFragment.newInstance(true,"")); + adapter.setFragment(2, new AccessUcodeFragment()); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -90,29 +94,29 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); MainActivity.csLibrary4A.setTagGroup(MainActivity.csLibrary4A.getQuerySelect(), iSessionOld, iTargetOld); //MainActivity.mCs108Library4a.macWrite(0x203, 0); super.onDestroy(); @@ -120,8 +124,8 @@ public void onDestroy() { @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/ImpinjM775Fragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/ImpinjM775Fragment.java index ef994f3..155c320 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/ImpinjM775Fragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/ImpinjM775Fragment.java @@ -1,65 +1,24 @@ package com.csl.cs108ademoapp.fragments; -import android.os.Bundle; - -import com.csl.cs108ademoapp.MainActivity; -import com.google.android.material.tabs.TabLayout; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + +import android.os.Bundle; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; - -class ImpinjSecurityAdapter extends FragmentStatePagerAdapter { - private final int NO_OF_TABS = 2; - public Fragment fragment0, fragment1; - - @Override - public Fragment getItem(int index) { - Fragment fragment = null; - switch (index) { - case 0: - fragment = new AccessImpinjFragment(true); - fragment0 = fragment; - break; - case 1: - fragment = InventoryRfidiMultiFragment.newInstance(true, "E2C011"); - fragment1 = fragment; - break; - default: - fragment = null; - break; - } - return fragment; - } - - @Override - public int getCount() { - return NO_OF_TABS; - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - - public ImpinjSecurityAdapter(FragmentManager fm) { - super(fm, FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); - } -} +import com.csl.cs108ademoapp.adapters.MyAdapter; +import com.google.android.material.tabs.TabLayout; public class ImpinjM775Fragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - ImpinjSecurityAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Configuration", "Scan"}; int iTargetOld, iSessionOld; @@ -72,8 +31,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment1; - return fragment1.onOptionsItemSelected(item); + InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) adapter.getItem(1); + return fragment.onOptionsItemSelected(item); } @Override @@ -86,9 +45,12 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new ImpinjSecurityAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, new AccessImpinjFragment(true)); + adapter.setFragment(1, InventoryRfidiMultiFragment.newInstance(true, "E2C011")); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -116,29 +78,29 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); MainActivity.csLibrary4A.setTagGroup(MainActivity.csLibrary4A.getQuerySelect(), iSessionOld, iTargetOld); //MainActivity.library4a.macWrite(0x203, 0); super.onDestroy(); @@ -146,8 +108,8 @@ public void onDestroy() { @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryFragment.java index 8792586..bf4614e 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryFragment.java @@ -1,25 +1,25 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; - -import com.csl.cs108ademoapp.MainActivity; -import com.google.android.material.tabs.TabLayout; -import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import com.csl.cs108ademoapp.adapters.InventoryAdapter; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + +import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; +import com.csl.cs108ademoapp.adapters.MyAdapter; +import com.google.android.material.tabs.TabLayout; public class InventoryFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - InventoryAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"RFID", "Barcode"}; @@ -33,8 +33,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { MainActivity.csLibrary4A.appendToLog("InventoryFragment: onOptionsItemSelected with viewPager as " + viewPager.getCurrentItem()); - InventoryRfidiMultiFragment fragment0 = (InventoryRfidiMultiFragment) mAdapter.fragment0; - InventoryBarcodeFragment fragment1 = (InventoryBarcodeFragment) mAdapter.fragment1; + InventoryRfidiMultiFragment fragment0 = (InventoryRfidiMultiFragment) adapter.getItem(0); + InventoryBarcodeFragment fragment1 = (InventoryBarcodeFragment) adapter.getItem(1); switch (viewPager.getCurrentItem()) { case 0: return fragment0.onOptionsItemSelected(item); @@ -55,10 +55,13 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new InventoryAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, InventoryRfidiMultiFragment.newInstance(false, null)); + adapter.setFragment(1, new InventoryBarcodeFragment()); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); Log.i("Hello", "InventoryFragment.onActivity"); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -83,36 +86,36 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); super.onDestroy(); } @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSearchFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSearchFragment.java index 6d15e0c..dafcdf3 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSearchFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSearchFragment.java @@ -114,11 +114,11 @@ public void onItemSelected(AdapterView parent, View view, int position, long editTextRWSelectOffset.setText("32"); break; case 1: - if (tagSelected != null) { if (tagSelected.getTid() != null) selectTag.editTextTagID.setText(tagSelected.getTid()); } + if (tagSelected != null) selectTag.editTextTagID.setText(tagSelected.getTid()); editTextRWSelectOffset.setText("0"); break; case 2: - if (tagSelected != null) { if (tagSelected.getUser() != null) selectTag.editTextTagID.setText(tagSelected.getUser()); } + if (tagSelected != null) selectTag.editTextTagID.setText(tagSelected.getUser()); editTextRWSelectOffset.setText("0"); break; default: @@ -238,7 +238,22 @@ void setupTagID() { final ReaderDevice tagSelected = MainActivity.tagSelected; if (tagSelected != null) { if (tagSelected.getSelected() == true) { - selectTag.editTextTagID.setText(tagSelected.getAddress()); + if (tagSelected.getTid() != null) { + if (tagSelected.getTid().indexOf("E281D") == 0 || tagSelected.getTid().indexOf("E201E") == 0) { + memoryBankSpinner.setSelection(1); + } + } + switch (memoryBankSpinner.getSelectedItemPosition()) { + case 0: + selectTag.editTextTagID.setText(tagSelected.getAddress()); + break; + case 1: + selectTag.editTextTagID.setText(tagSelected.getTid()); + break; + case 2: + selectTag.editTextTagID.setText(tagSelected.getUser()); + break; + } } } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSimpleFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSimpleFragment.java index 4236116..8f5dd07 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSimpleFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSimpleFragment.java @@ -281,8 +281,10 @@ void startStopHandler(boolean buttonTrigger) { if (bAdd2End) rfidListView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); else rfidListView.setSelection(0); - if (MainActivity.csLibrary4A.getInventoryVibrate() && MainActivity.csLibrary4A.getVibrateModeSetting() == 1) + MainActivity.csLibrary4A.appendToLog("setVibrateOn i 2 with getInventoryVibrate as " + MainActivity.csLibrary4A.getInventoryVibrate() + ", getVibrateModeSetting as " + MainActivity.csLibrary4A.getVibrateModeSetting()); + if (MainActivity.csLibrary4A.getInventoryVibrate() && MainActivity.csLibrary4A.getVibrateModeSetting() == 1) { MainActivity.csLibrary4A.setVibrateOn(2); + } //else MainActivity.csLibrary4A.setVibrateOn(0); startInventoryTask(); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java index 46ecd92..2cd435c 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java @@ -3,7 +3,6 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; @@ -21,6 +20,8 @@ import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.csl.cs108ademoapp.CustomPopupWindow; import com.csl.cs108ademoapp.GenericTextWatcher; import com.csl.cs108ademoapp.InventoryRfidTask; @@ -270,10 +271,12 @@ public void onClick(View v) { public void onClick(View v) { String buttonText = buttonT1.getText().toString().trim(); if (buttonText.toUpperCase().matches("BUZ")) { + MainActivity.csLibrary4A.appendToLog("setVibrateOn G 1"); MainActivity.csLibrary4A.setVibrateTime(0); MainActivity.csLibrary4A.setVibrateOn(1); buttonT1.setText("STOP"); } else { + MainActivity.csLibrary4A.appendToLog("setVibrateOn H 0"); MainActivity.csLibrary4A.setVibrateOn(0); buttonT1.setText("BUZ"); } @@ -480,14 +483,16 @@ void startInventoryTask() { //extra2Bank = 3; //extra2Offset = 0x10d; //extra2Count = 1; - } else if (mDid.indexOf("E281D") == 0) { - //extra1Bank = 0; - //extra1Offset = 4; - //extra1Count = 1; + } else if (mDid.indexOf("E281D") == 0) { //need atmel firmware 0.2.20 + extra1Bank = 0; + extra1Offset = 4; + extra1Count = 1; + extra2Count = 6; } else if (mDid.indexOf("E201E") == 0) { extra1Bank = 3; extra1Offset = 112; extra1Count = 1; + extra2Count = 6; } else if (mDid.matches("E282402")) { extra1Bank = 0; extra1Offset = 11; @@ -628,13 +633,13 @@ void startInventoryTask() { MainActivity.csLibrary4A.appendToLog("bMultiBank = " + bMultiBank + " with extra1Bank = " + extra1Bank + "," + extra1Offset + "," + extra1Count + ", extra2Bank = " + extra2Bank + "," + extra2Offset + "," + extra2Count); if (bMultiBank == false) { MainActivity.csLibrary4A.restoreAfterTagSelect(); - MainActivity.csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY_COMPACT); inventoryRfidTask = new InventoryRfidTask(getContext(), -1, -1, 0, 0, 0, 0, false, MainActivity.csLibrary4A.getInventoryBeep(), MainActivity.sharedObjects.tagsList, readerListAdapter, null, null, rfidRunTime, null, rfidVoltageLevel, rfidYieldView, button, rfidRateView); inventoryRfidTask.bSgtinOnly = checkBoxFilterByEpc.isChecked(); if (checkBoxFilterByEpc.isChecked()) clearTagsList(); + MainActivity.csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY_COMPACT); } else { boolean inventoryUcode8_bc = mDid != null && mDid.matches("E2806894") && MainActivity.mDid != null && (MainActivity.mDid.matches("E2806894B") || MainActivity.mDid.matches("E2806894C")); if ((extra1Bank != -1 && extra1Count != 0) || (extra2Bank != -1 && extra2Count != 0)) { @@ -649,6 +654,7 @@ void startInventoryTask() { if (extra1Bank == 1) extra1Offset += 2; if (extra2Bank == 1) extra2Offset += 2; MainActivity.csLibrary4A.appendToLog("HelloK: mDid = " + mDid + ", MainActivity.mDid = " + MainActivity.mDid + " with extra1Bank = " + extra1Bank + "," + extra1Offset + "," + extra1Count + ", extra2Bank = " + extra2Bank + "," + extra2Offset + "," + extra2Count); + if (mDid != null) MainActivity.csLibrary4A.setResReadNoReply(mDid.matches("E281D")); if (inventoryUcode8_bc == false) { MainActivity.csLibrary4A.appendToLog("BleStreamOut: Set Multibank"); MainActivity.csLibrary4A.setTagRead(extra2Count != 0 && extra2Count != 0 ? 2 : 1); @@ -665,15 +671,15 @@ void startInventoryTask() { } } else resetSelectData(); MainActivity.csLibrary4A.appendToLog("startInventoryTask: going to startOperation with extra1Bank = " + extra1Bank + "," + extra1Offset + "," + extra1Count + ", extra2Bank = " + extra2Bank + "," + extra2Offset + "," + extra2Count); - if (inventoryUcode8_bc) - MainActivity.csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY_COMPACT); - else - MainActivity.csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY); inventoryRfidTask = new InventoryRfidTask(getContext(), extra1Bank, extra2Bank, extra1Count, extra2Count, extra1Offset, extra2Offset, false, MainActivity.csLibrary4A.getInventoryBeep(), MainActivity.sharedObjects.tagsList, readerListAdapter, null, mDid, rfidRunTime, null, rfidVoltageLevel, rfidYieldView, button, rfidRateView); inventoryRfidTask.bProtectOnly = checkBoxFilterByProtect.isChecked(); + if (inventoryUcode8_bc) + MainActivity.csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY_COMPACT); + else + MainActivity.csLibrary4A.startOperation(RfidReaderChipData.OperationTypes.TAG_INVENTORY); } inventoryRfidTask.execute(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/KilowayFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/KilowayFragment.java index 6689cca..d6339eb 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/KilowayFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/KilowayFragment.java @@ -12,15 +12,15 @@ import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.KilowayAdapter; +import com.csl.cs108ademoapp.adapters.MyAdapter; import com.google.android.material.tabs.TabLayout; public class KilowayFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - KilowayAdapter mAdapter; + MyAdapter adapter; - private String[] tabs = {"Scan", "Access"}; + private String[] tabs = {"Scan", "Geiger"}; //, "Access"}; int iTargetOld, iSessionOld; @Override @@ -31,21 +31,21 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment1; + InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) adapter.getItem(0); if (item.getItemId() == R.id.menuAction_clear) { - fragment1.clearTagsList(); + fragment.clearTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_sortRssi) { - fragment1.sortTagsListByRssi(); + fragment.sortTagsListByRssi(); return true; } else if (item.getItemId() == R.id.menuAction_sort) { - fragment1.sortTagsList(); + fragment.sortTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_save) { - fragment1.saveTagsList(); + fragment.saveTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_share) { - fragment1.shareTagsList(); + fragment.shareTagsList(); return true; } else return super.onOptionsItemSelected(item); } @@ -60,9 +60,13 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new KilowayAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, InventoryRfidiMultiFragment.newInstance(true,"E281D")); + adapter.setFragment(1, new InventoryRfidSearchFragment(true)); + adapter.setFragment(2, new AccessKilowayFragment(false)); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -86,33 +90,34 @@ public void onTabReselected(TabLayout.Tab tab) { iTargetOld = MainActivity.csLibrary4A.getQueryTarget(); iSessionOld = MainActivity.csLibrary4A.getQuerySession(); + MainActivity.csLibrary4A.setBasicCurrentLinkProfile(); } @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); MainActivity.csLibrary4A.setTagGroup(MainActivity.csLibrary4A.getQuerySelect(), iSessionOld, iTargetOld); //MainActivity.mCs108Library4a.macWrite(0x203, 0); super.onDestroy(); @@ -120,8 +125,8 @@ public void onDestroy() { @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/LongjingFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/LongjingFragment.java index 64b407c..d70f9f3 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/LongjingFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/LongjingFragment.java @@ -12,13 +12,13 @@ import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.LongjingAdapter; +import com.csl.cs108ademoapp.adapters.MyAdapter; import com.google.android.material.tabs.TabLayout; public class LongjingFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - LongjingAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Scan", "Geiger"}; //"Access", int iTargetOld, iSessionOld; @@ -31,7 +31,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment1; + InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) adapter.getItem(0); if (item.getItemId() == R.id.menuAction_clear) { fragment1.clearTagsList(); return true; @@ -60,9 +60,13 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new LongjingAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, InventoryRfidiMultiFragment.newInstance(true,"E201E")); + adapter.setFragment(1, new InventoryRfidSearchFragment(true)); + adapter.setFragment(2, new AccessKilowayFragment(true)); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -91,29 +95,29 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); MainActivity.csLibrary4A.setTagGroup(MainActivity.csLibrary4A.getQuerySelect(), iSessionOld, iTargetOld); //MainActivity.mCs108Library4a.macWrite(0x203, 0); super.onDestroy(); @@ -121,8 +125,8 @@ public void onDestroy() { @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/MicronFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/MicronFragment.java index 583a7ec..2891b8f 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/MicronFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/MicronFragment.java @@ -1,6 +1,8 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; + +import com.csl.cs108ademoapp.adapters.MyAdapter; import com.google.android.material.tabs.TabLayout; import androidx.viewpager.widget.ViewPager; import androidx.appcompat.app.ActionBar; @@ -12,12 +14,11 @@ import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.MicronAdapter; public class MicronFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - MicronAdapter mAdapter; + MyAdapter adapter; private String[] tabs = { "Scan/Select", "Read" }; @@ -29,7 +30,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) mAdapter.fragment0; + InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) adapter.fragment0; if (item.getItemId() == R.id.menuAction_clear) { fragment.clearTagsList(); return true; @@ -58,9 +59,12 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new MicronAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, InventoryRfidiMultiFragment.newInstance(true, "")); + adapter.setFragment(1, AccessMicronFragment.newInstance(false)); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -87,29 +91,29 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onPause(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onPause(); + if (adapter.fragment0 != null) adapter.fragment0.onPause(); + if (adapter.fragment1 != null) adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onStop(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onStop(); + if (adapter.fragment0 != null) adapter.fragment0.onStop(); + if (adapter.fragment1 != null) adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onDestroyView(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onDestroyView(); + if (adapter.fragment0 != null) adapter.fragment0.onDestroyView(); + if (adapter.fragment1 != null) adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onDestroy(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onDestroy(); + if (adapter.fragment0 != null) adapter.fragment0.onDestroy(); + if (adapter.fragment1 != null) adapter.fragment1.onDestroy(); if (MainActivity.selectFor != -1) { MainActivity.csLibrary4A.setSelectCriteriaDisable(-1); MainActivity.selectFor = -1; @@ -120,8 +124,8 @@ public void onDestroy() { @Override public void onDetach() { - if (mAdapter.fragment0 != null) mAdapter.fragment0.onDetach(); - if (mAdapter.fragment1 != null) mAdapter.fragment1.onDetach(); + if (adapter.fragment0 != null) adapter.fragment0.onDetach(); + if (adapter.fragment1 != null) adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java index c316b99..a78986b 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java @@ -12,6 +12,7 @@ import android.widget.CheckBox; import android.widget.EditText; import android.widget.LinearLayout; +import android.widget.RadioButton; import android.widget.Spinner; import android.widget.TableRow; import android.widget.TextView; @@ -24,9 +25,10 @@ import com.csl.cslibrary4a.RfidReaderChipData; public class SettingAdminFragment extends CommonFragment { - private CheckBox checkBoxTriggerReporting, checkBoxInventoryBeep, checkBoxInventoryVibrate, checkBoxSaveFileEnable, checkBoxSaveCloudEnable, checkBoxSaveNewCloudEnable, checkBoxSaveAllCloudEnable, checkBoxDebugEnable; + private CheckBox checkBoxTriggerReporting, checkBoxInventoryBeep, checkBoxInventoryVibrate, checkBoxSaveFileEnable, checkBoxSaveCloudEnable, checkBoxSaveNewCloudEnable, checkBoxSaveAllCloudEnable, checkBoxDebugEnable, checkBoxForegroundService; private CheckBox checkBoxCsvColumnResBank, checkBoxCsvColumnEpcBank, checkBoxCsvColumnTidBank, checkBoxCsvColumnUserBank, checkBoxCsvColumnPhase, checkBoxCsvColumnChannel, checkBoxCsvColumnTime, checkBoxCsvColumnTimeZone, checkBoxCsvColumnLocation, checkBoxCsvColumnDirection, checkBoxCsvColumnOthers; - private EditText editTextDeviceName, editTextCycleDelay, editTextTriggerReportingCount, editTextBeepCount, editTextVibrateTime, editTextVibrateWindow, editTextServer, editTextServerTimeout, editTextServerImpinj, editTextServerImpinjName, editTextServerImpinjPasword; + private EditText editTextDeviceName, editTextCycleDelay, editTextTriggerReportingCount, editTextBeepCount, editTextVibrateTime, editTextVibrateWindow, editTextServer, editTextServerTimeout, editTextServerMqtt, editTextTopicMqtt, editTextForegroundDupElim, editTextServerImpinj, editTextServerImpinjName, editTextServerImpinjPasword; + private RadioButton radioButtonCloudSaveNone, radioButtonCloudSaveHttp, radioButtonCloudSaveMqtt; private TextView textViewReaderModel; private Spinner spinnerQueryBattery, spinnerQueryRssi, spinnerQueryVibrateMode, spinnerSavingFormat; private Button buttonCSLServer, button; @@ -45,8 +47,9 @@ public class SettingAdminFragment extends CommonFragment { short sTriggerCount = -1, sTriggerCountMin = 1, sTriggerCountMax = 100; int iVibrateTime = -1; int iVibrateTimeMin = 1; int iVibrateTimeMax = 999; int iVibrateWindow = -1; int iVibrateWindowMin = 1; int iVibrateWindowMax = 4; - boolean triggerReporting, inventoryBeep, inventoryVibrate, saveFileEnable, saveCloudEnable, saveNewCloudEnable, saveAllCloudEnable, debugEnable; - String serverName, serverImpinj, serverImpinjName, serverImpinjPasword; + boolean triggerReporting, inventoryBeep, inventoryVibrate, saveFileEnable, saveCloudEnable, saveNewCloudEnable, saveAllCloudEnable, debugEnable, foregroundServiceEnable; + String serverName, serverMqtt, topicMqtt, serverImpinj, serverImpinjName, serverImpinjPasword; + int buttonCloudSave = -1, iForegroundDupElimNew = -1; int iServerTimeout = -1; int iServerTimeoutMin = 3; int iServerTimeoutMax = 9; private SettingTask settingTask; @@ -173,6 +176,13 @@ public void onNothingSelected(AdapterView adapterView) { checkBoxSaveAllCloudEnable = (CheckBox) getActivity().findViewById(R.id.settingAdminAllToCloudEnable); editTextServer = (EditText) getActivity().findViewById(R.id.settingAdminServer); editTextServer.setHint("Cloud Address Pattern"); + editTextServerMqtt = (EditText) getActivity().findViewById(R.id.settingAdminMqttServer); + editTextServerMqtt.setHint("IP Address Pattern"); + editTextTopicMqtt = (EditText) getActivity().findViewById(R.id.settingAdminTopicMqtt); + editTextForegroundDupElim = (EditText) getActivity().findViewById(R.id.settingAdminDupElimDelay); + radioButtonCloudSaveNone = (RadioButton) getActivity().findViewById(R.id.settingAdminCloudSaveNone); + radioButtonCloudSaveHttp = (RadioButton) getActivity().findViewById(R.id.settingAdminCloudSaveHttp); + radioButtonCloudSaveMqtt = (RadioButton) getActivity().findViewById(R.id.settingAdminCloudSaveMqtt); editTextServerImpinj = (EditText) getActivity().findViewById(R.id.settingAdminServerImpinj); editTextServerImpinjName = (EditText) getActivity().findViewById(R.id.settingAdminServerImpinjName); editTextServerImpinjPasword = (EditText) getActivity().findViewById(R.id.settingAdminServerImpinjPassword); @@ -191,6 +201,9 @@ public void onClick(View view) { //String serverLocation = "https://" + "www.convergence.com.hk:" + "29090/WebServiceRESTs/1.0/req/" + "create-update-delete/update-entity/" + "tagdata"; //String serverLocation = "http://ptsv2.com/t/10i1t-1519143332/post"; editTextServer.setText(serverLocation); + //String serverMqttLocation = "192.168.25.182"; + //editTextServerMqtt.setText(serverMqttLocation); + //editTextTopicMqtt.setText("test/topic"); } }); @@ -341,10 +354,18 @@ public void onClick(View v) { saveAllCloudEnable = checkBoxSaveAllCloudEnable.isChecked(); serverName = editTextServer.getText().toString(); iServerTimeout = Integer.parseInt(editTextServerTimeout.getText().toString()); + serverMqtt = editTextServerMqtt.getText().toString(); + topicMqtt = editTextTopicMqtt.getText().toString(); + iForegroundDupElimNew = Integer.parseInt(editTextForegroundDupElim.getText().toString()); + buttonCloudSave = 0; + if (radioButtonCloudSaveNone.isChecked()) buttonCloudSave = 0; + else if (radioButtonCloudSaveHttp.isChecked()) buttonCloudSave = 1; + else if (radioButtonCloudSaveMqtt.isChecked()) buttonCloudSave = 2; serverImpinj = editTextServerImpinj.getText().toString(); serverImpinjName = editTextServerImpinjName.getText().toString(); serverImpinjPasword = editTextServerImpinjPasword.getText().toString(); debugEnable = checkBoxDebugEnable.isChecked(); + foregroundServiceEnable = checkBoxForegroundService.isChecked(); settingUpdate(); } catch (Exception ex) { Toast.makeText(MainActivity.mContext, R.string.toast_invalid_range, Toast.LENGTH_SHORT).show(); @@ -354,6 +375,7 @@ public void onClick(View v) { }); checkBoxDebugEnable = (CheckBox) getActivity().findViewById(R.id.settingAdminDebugEnable); + checkBoxForegroundService = (CheckBox) getActivity().findViewById(R.id.settingAdminForegroundEnable); if (sameCheck == false) MainActivity.csLibrary4A.setSameCheck(false); mHandler.post(updateRunnable); @@ -379,6 +401,7 @@ public void setUserVisibleHint(boolean isVisibleToUser) { checkBoxSaveNewCloudEnable.setChecked(MainActivity.csLibrary4A.getSaveNewCloudEnable()); checkBoxSaveAllCloudEnable.setChecked(MainActivity.csLibrary4A.getSaveAllCloudEnable()); checkBoxDebugEnable.setChecked(MainActivity.csLibrary4A.getUserDebugEnable()); + checkBoxForegroundService.setChecked(MainActivity.csLibrary4A.getForegroundServiceEnable()); } } @@ -427,6 +450,13 @@ public void run() { if (editTextVibrateWindow != null) editTextVibrateWindow.setText(String.valueOf(MainActivity.csLibrary4A.getVibrateWindow())); editTextServer.setText(MainActivity.csLibrary4A.getServerLocation()); editTextServerTimeout.setText(String.valueOf(MainActivity.csLibrary4A.getServerTimeout())); + editTextServerMqtt.setText(MainActivity.csLibrary4A.getServerMqttLocation()); + editTextTopicMqtt.setText(MainActivity.csLibrary4A.getTopicMqtt()); + editTextForegroundDupElim.setText(String.valueOf(MainActivity.csLibrary4A.getForegroundDupElim())); + int inventoryCloudSave = MainActivity.csLibrary4A.getInventoryCloudSave(); + if (inventoryCloudSave == 0) radioButtonCloudSaveNone.setChecked(true); + else if (inventoryCloudSave == 1) radioButtonCloudSaveHttp.setChecked(true); + else if (inventoryCloudSave == 2) radioButtonCloudSaveMqtt.setChecked(true); editTextServerImpinj.setText(MainActivity.csLibrary4A.getServerImpinjLocation()); editTextServerImpinjName.setText(MainActivity.csLibrary4A.getServerImpinjName()); editTextServerImpinjPasword.setText(MainActivity.csLibrary4A.getServerImpinjPassword()); @@ -605,6 +635,38 @@ else if (MainActivity.csLibrary4A.setServerTimeout(iServerTimeout) == false) invalidRequest = true; } } + if (invalidRequest == false && editTextServerMqtt != null) { + String serverLocation = MainActivity.csLibrary4A.getServerMqttLocation(); if (serverLocation == null) serverLocation = ""; + if (serverLocation.matches(serverMqtt) == false || sameCheck == false) { + sameSetting = false; + if (MainActivity.csLibrary4A.setServerMqttLocation(serverMqtt) == false) + invalidRequest = true; + } + } + if (invalidRequest == false && editTextTopicMqtt != null) { + String topic = MainActivity.csLibrary4A.getTopicMqtt(); if (topic == null) topic = ""; + if (topic.matches(topicMqtt) == false || sameCheck == false) { + sameSetting = false; + if (MainActivity.csLibrary4A.setTopicMqtt(topicMqtt) == false) + invalidRequest = true; + } + } + if (invalidRequest == false && editTextForegroundDupElim != null) { + int iForegroundDupElim = MainActivity.csLibrary4A.getForegroundDupElim(); if (iForegroundDupElim < 0) iForegroundDupElim = 0; + if (iForegroundDupElim != iForegroundDupElimNew || sameCheck == false) { + sameSetting = false; + if (MainActivity.csLibrary4A.setForegroundDupElim(iForegroundDupElimNew) == false) + invalidRequest = true; + } + } + if (invalidRequest == false && radioButtonCloudSaveNone != null && radioButtonCloudSaveHttp != null && radioButtonCloudSaveMqtt != null) { + int inventoryCloudSave = MainActivity.csLibrary4A.getInventoryCloudSave(); + if (inventoryCloudSave != buttonCloudSave || sameCheck == false) { + sameSetting = false; + if (MainActivity.csLibrary4A.setInventoryCloudSave(buttonCloudSave) == false) + invalidRequest = true; + } + } if (invalidRequest == false && editTextServerImpinj != null) { String string = MainActivity.csLibrary4A.getServerImpinjLocation(); if (string == null) string = ""; MainActivity.csLibrary4A.appendToLog("old serverImpinj = " + string + ", new = " + serverImpinj); @@ -640,6 +702,15 @@ else if (MainActivity.csLibrary4A.setServerTimeout(iServerTimeout) == false) invalidRequest = true; } } + if (invalidRequest == false && checkBoxForegroundService != null) { + MainActivity.csLibrary4A.appendToLog("getForegroundServiceEnable = " + MainActivity.csLibrary4A.getForegroundServiceEnable() + ", foregroundServiceEnable = " + foregroundServiceEnable); + if (MainActivity.csLibrary4A.getForegroundServiceEnable() != foregroundServiceEnable || sameCheck == false) { + sameSetting = false; + MainActivity.csLibrary4A.appendToLog("foregroundReader108: updated 2C"); + if (MainActivity.csLibrary4A.setForegroundServiceEnable(foregroundServiceEnable) == false) + invalidRequest = true; + } + } settingTask = new SettingTask(button, sameSetting, invalidRequest); settingTask.execute(); MainActivity.csLibrary4A.saveSetting2File(); diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterFragment.java index cc8bc88..30312cb 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterFragment.java @@ -1,22 +1,23 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; -import com.google.android.material.tabs.TabLayout; - -import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.FilterAdapter; +import com.csl.cs108ademoapp.adapters.MyAdapter; +import com.google.android.material.tabs.TabLayout; public class SettingFilterFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - FilterAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Pre-filter", "Post-filter", "Rssi-filter"}; @@ -36,9 +37,13 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new FilterAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, new SettingFilterPreFragment()); + adapter.setFragment(1, new SettingFilterPostFragment()); + adapter.setFragment(2, new SettingFilterRssiFragment()); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -48,6 +53,7 @@ public void onActivityCreated(Bundle savedInstanceState) { tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { + Log.i(TAG, "tab.position is " + tab.getPosition()); viewPager.setCurrentItem(tab.getPosition()); } @@ -63,36 +69,36 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); super.onDestroy(); } @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFragment.java index 6748b7e..9b26817 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFragment.java @@ -1,27 +1,28 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; -import com.google.android.material.tabs.TabLayout; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; import com.csl.cs108ademoapp.MainActivity; -import com.csl.cs108ademoapp.adapters.SettingAdapter; +import com.csl.cs108ademoapp.adapters.MyAdapter; import com.csl.cs108ademoapp.R; +import com.google.android.material.tabs.TabLayout; public class SettingFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; FragmentStatePagerAdapter pagerAdapter; - SettingAdapter mAdapter; + MyAdapter adapter; Fragment fragment0, fragment1; private String[] tabs = { "Operation", "Administration" }; @@ -68,10 +69,12 @@ public Fragment getItem(int position) { return fragment; } }; - mAdapter = new SettingAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, new SettingOperateFragment()); + adapter.setFragment(1, new SettingAdminFragment()); viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); //pagerAdapter); //mAdapter); + viewPager.setAdapter(adapter); //pagerAdapter); //mAdapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -96,37 +99,37 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); MainActivity.csLibrary4A.setAntennaSelect(0); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); super.onDestroy(); } @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingOperateFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingOperateFragment.java index 5a21ed7..54bbf43 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingOperateFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingOperateFragment.java @@ -328,7 +328,7 @@ void settingUpdate1() { @Override public void onDestroy() { if (settingTask != null) settingTask.cancel(true); - MainActivity.csLibrary4A.setSameCheck(true); + if (MainActivity.csLibrary4A != null) MainActivity.csLibrary4A.setSameCheck(true); mHandler.removeCallbacks(updateRunnable); super.onDestroy(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingWedgeFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingWedgeFragment.java index 431ece0..5bbad07 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingWedgeFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingWedgeFragment.java @@ -14,12 +14,9 @@ import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; -import java.io.File; -import java.io.FileOutputStream; - public class SettingWedgeFragment extends DialogFragment { EditText editTextPower, editTextPrefix, editTextSuffix; - Spinner spinnerDelimiter; + Spinner spinnerDelimiter, spinnerOutput; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -37,10 +34,10 @@ public void onClick(DialogInterface dialog, int whichButton) { if (iWedgePower < 0) iWedgePower = 0; else if (iWedgePower > 300) iWedgePower = 300; editTextPower.setText(String.valueOf(iWedgePower)); - MainActivity.wedgePower = iWedgePower; + MainActivity.csLibrary4A.setWedgePower(iWedgePower); } catch (Exception ex) { } - MainActivity.wedgePrefix = editTextPrefix.getText().toString(); - MainActivity.wedgeSuffix = editTextSuffix.getText().toString(); + MainActivity.csLibrary4A.setWedgePrefix(editTextPrefix.getText().toString()); + MainActivity.csLibrary4A.setWedgeSuffix(editTextSuffix.getText().toString()); int wedgeDelimiter = 0x0A; switch (spinnerDelimiter.getSelectedItemPosition()) { default: @@ -58,8 +55,10 @@ public void onClick(DialogInterface dialog, int whichButton) { wedgeDelimiter = -1; break; } - MainActivity.wedgeDelimiter = wedgeDelimiter; - saveWedgeSetting2File(); + MainActivity.csLibrary4A.setWedgeDelimiter(wedgeDelimiter); + MainActivity.csLibrary4A.appendToLog("SettingWedgeFragment, onCreateDialog: wedgeDelimiter = " + MainActivity.csLibrary4A.getWedgeOutput()); + MainActivity.csLibrary4A.setWedgeOutput(spinnerOutput.getSelectedItemPosition()); + MainActivity.csLibrary4A.saveWedgeSetting2File(); getDialog().dismiss(); } }); @@ -71,15 +70,15 @@ public void onClick(DialogInterface dialog, int whichButton) { editTextPower = (EditText) view.findViewById(R.id.directWedgeSettingEditTextPower); MainActivity.csLibrary4A.appendToLog("editTextPower is " + (editTextPower == null ? "null" : "valid")); - if (editTextPower != null) editTextPower.setText(String.valueOf(MainActivity.wedgePower)); + if (editTextPower != null) editTextPower.setText(String.valueOf(MainActivity.csLibrary4A.getWedgePower())); editTextPrefix = (EditText) view.findViewById(R.id.directWedgeSettingEditTextPrefix); MainActivity.csLibrary4A.appendToLog("editTextPrefix is " + (editTextPrefix == null ? "null" : "valid")); - if (editTextPrefix != null) editTextPrefix.setText(MainActivity.wedgePrefix); + if (editTextPrefix != null) editTextPrefix.setText(MainActivity.csLibrary4A.getWedgePrefix()); editTextSuffix = (EditText) view.findViewById(R.id.directWedgeSettingEditTextSuffix); MainActivity.csLibrary4A.appendToLog("editTextSuffix is " + (editTextSuffix == null ? "null" : "valid")); - if (editTextSuffix != null) editTextSuffix.setText(MainActivity.wedgeSuffix); + if (editTextSuffix != null) editTextSuffix.setText(MainActivity.csLibrary4A.getWedgeSuffix()); spinnerDelimiter = (Spinner) view.findViewById(R.id.directWedgeSettingSpinnerDelimiter); MainActivity.csLibrary4A.appendToLog("spinnerDelimiter is " + (spinnerDelimiter == null ? "null" : "valid")); @@ -87,7 +86,8 @@ public void onClick(DialogInterface dialog, int whichButton) { MainActivity.csLibrary4A.appendToLog("targetAdapter is " + (targetAdapter == null ? "null" : "valid")); targetAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); int position = 0; - switch (MainActivity.wedgeDelimiter) { + MainActivity.csLibrary4A.appendToLog("SettingWedgeFragment, onCreatDialog: wedgeDelimiter = " + MainActivity.csLibrary4A.getWedgeDelimiter()); + switch (MainActivity.csLibrary4A.getWedgeDelimiter()) { default: position = 0; break; @@ -107,30 +107,17 @@ public void onClick(DialogInterface dialog, int whichButton) { MainActivity.csLibrary4A.appendToLog("position is " + position); spinnerDelimiter.setAdapter(targetAdapter); spinnerDelimiter.setSelection(position); - return builder.create(); - } - void saveWedgeSetting2File() { - File path = getContext().getFilesDir(); - File file = new File(path, MainActivity.fileName); - FileOutputStream stream; - try { - stream = new FileOutputStream(file); - write2FileStream(stream, "Start of data\n"); - write2FileStream(stream, "wedgePower," + MainActivity.wedgePower + "\n"); - write2FileStream(stream, "wedgePrefix," + MainActivity.wedgePrefix + "\n"); - write2FileStream(stream, "wedgeSuffix," + MainActivity.wedgeSuffix + "\n"); - write2FileStream(stream, "wedgeDelimiter," + String.valueOf(MainActivity.wedgeDelimiter) + "\n"); - write2FileStream(stream, "End of data\n"); - stream.close(); - } catch (Exception ex){ - // - } - } - void write2FileStream(FileOutputStream stream, String string) { - boolean DEBUG = true; - try { - stream.write(string.getBytes()); if (DEBUG) MainActivity.csLibrary4A.appendToLog("outData = " + string); - } catch (Exception ex) { } + spinnerOutput = (Spinner) view.findViewById(R.id.directWedgeSettingSpinnerOutput); + MainActivity.csLibrary4A.appendToLog("spinnerOutput is " + (spinnerOutput == null ? "null" : "valid")); + ArrayAdapter targetAdapter1 = ArrayAdapter.createFromResource(getActivity(), R.array.wedgeOutput_options, R.layout.custom_spinner_layout); + MainActivity.csLibrary4A.appendToLog("targetAdapter1 is " + (targetAdapter1 == null ? "null" : "valid")); + targetAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int position1 = MainActivity.csLibrary4A.getWedgeOutput(); + MainActivity.csLibrary4A.appendToLog("position1 is " + position1); + spinnerOutput.setAdapter(targetAdapter1); + spinnerOutput.setSelection(position1); + + return builder.create(); } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/Ucode8Fragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/Ucode8Fragment.java index ad41ce9..1144a35 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/Ucode8Fragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/Ucode8Fragment.java @@ -1,23 +1,24 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; -import com.google.android.material.tabs.TabLayout; -import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + import com.csl.cs108ademoapp.MainActivity; import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.Ucode8Adapter; +import com.csl.cs108ademoapp.adapters.MyAdapter; +import com.google.android.material.tabs.TabLayout; public class Ucode8Fragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - Ucode8Adapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Configure", "Scan", "Security", "Untrace"}; @@ -29,21 +30,21 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment1; + InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) adapter.getItem(1); if (item.getItemId() == R.id.menuAction_clear) { - fragment1.clearTagsList(); + fragment.clearTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_sortRssi) { - fragment1.sortTagsListByRssi(); + fragment.sortTagsListByRssi(); return true; } else if (item.getItemId() == R.id.menuAction_sort) { - fragment1.sortTagsList(); + fragment.sortTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_save) { - fragment1.saveTagsList(); + fragment.saveTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_share) { - fragment1.shareTagsList(); + fragment.shareTagsList(); return true; } else return super.onOptionsItemSelected(item); } @@ -58,9 +59,14 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new Ucode8Adapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, new AccessUcode8Fragment()); + adapter.setFragment(1, InventoryRfidiMultiFragment.newInstance(true,"")); + adapter.setFragment(2, new AccessUcodeFragment()); + adapter.setFragment(3, new UtraceFragment()); + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -85,29 +91,29 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); MainActivity.csLibrary4A.setSelectCriteriaDisable(1); MainActivity.csLibrary4A.restoreAfterTagSelect(); super.onDestroy(); @@ -115,8 +121,8 @@ public void onDestroy() { @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/UcodeFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/UcodeFragment.java index 5c5db8a..d2a5d8d 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/UcodeFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/UcodeFragment.java @@ -1,22 +1,23 @@ package com.csl.cs108ademoapp.fragments; import android.os.Bundle; -import com.google.android.material.tabs.TabLayout; -import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + import com.csl.cs108ademoapp.R; -import com.csl.cs108ademoapp.adapters.UcodeAdapter; +import com.csl.cs108ademoapp.adapters.MyAdapter; +import com.google.android.material.tabs.TabLayout; public class UcodeFragment extends CommonFragment { private ActionBar actionBar; private ViewPager viewPager; - UcodeAdapter mAdapter; + MyAdapter adapter; private String[] tabs = {"Scan", "Authenticate"}; @@ -28,21 +29,21 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public boolean onOptionsItemSelected(MenuItem item) { - InventoryRfidiMultiFragment fragment1 = (InventoryRfidiMultiFragment) mAdapter.fragment1; + InventoryRfidiMultiFragment fragment = (InventoryRfidiMultiFragment) adapter.getItem(0); if (item.getItemId() == R.id.menuAction_clear) { - fragment1.clearTagsList(); + fragment.clearTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_sortRssi) { - fragment1.sortTagsListByRssi(); + fragment.sortTagsListByRssi(); return true; } else if (item.getItemId() == R.id.menuAction_sort) { - fragment1.sortTagsList(); + fragment.sortTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_save) { - fragment1.saveTagsList(); + fragment.saveTagsList(); return true; } else if (item.getItemId() == R.id.menuAction_share) { - fragment1.shareTagsList(); + fragment.shareTagsList(); return true; } else return super.onOptionsItemSelected(item); } @@ -57,9 +58,13 @@ public void onActivityCreated(Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.OperationsTabLayout); - mAdapter = new UcodeAdapter(getActivity().getSupportFragmentManager()); + adapter = new MyAdapter(getActivity().getSupportFragmentManager(), tabs.length); + adapter.setFragment(0, InventoryRfidiMultiFragment.newInstance(true,"E2C06")); + adapter.setFragment(1, new AccessUcodeFragment()); + + viewPager = (ViewPager) getActivity().findViewById(R.id.OperationsPager); - viewPager.setAdapter(mAdapter); + viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); for (String tab_name : tabs) { @@ -84,36 +89,36 @@ public void onTabReselected(TabLayout.Tab tab) { @Override public void onPause() { - mAdapter.fragment0.onPause(); - mAdapter.fragment1.onPause(); + adapter.fragment0.onPause(); + adapter.fragment1.onPause(); super.onPause(); } @Override public void onStop() { - mAdapter.fragment0.onStop(); - mAdapter.fragment1.onStop(); + adapter.fragment0.onStop(); + adapter.fragment1.onStop(); super.onStop(); } @Override public void onDestroyView() { - mAdapter.fragment0.onDestroyView(); - mAdapter.fragment1.onDestroyView(); + adapter.fragment0.onDestroyView(); + adapter.fragment1.onDestroyView(); super.onDestroyView(); } @Override public void onDestroy() { - mAdapter.fragment0.onDestroy(); - mAdapter.fragment1.onDestroy(); + adapter.fragment0.onDestroy(); + adapter.fragment1.onDestroy(); super.onDestroy(); } @Override public void onDetach() { - mAdapter.fragment0.onDetach(); - mAdapter.fragment1.onDetach(); + adapter.fragment0.onDetach(); + adapter.fragment1.onDetach(); super.onDetach(); } diff --git a/app/src/main/res/drawable/alert.png b/app/src/main/res/drawable/alert.png new file mode 100644 index 0000000..5199518 Binary files /dev/null and b/app/src/main/res/drawable/alert.png differ diff --git a/app/src/main/res/drawable/csl_logo_170420.png b/app/src/main/res/drawable/csl_logo_170420.png new file mode 100644 index 0000000..87e9edd Binary files /dev/null and b/app/src/main/res/drawable/csl_logo_170420.png differ diff --git a/app/src/main/res/drawable/csl_logo_211008.png b/app/src/main/res/drawable/csl_logo_211008.png new file mode 100644 index 0000000..8155511 Binary files /dev/null and b/app/src/main/res/drawable/csl_logo_211008.png differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ec7f934..3d8059b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,7 +1,8 @@ + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + + + + + + diff --git a/app/src/main/res/layout/custom_notification.xml b/app/src/main/res/layout/custom_notification.xml new file mode 100644 index 0000000..eea3b2a --- /dev/null +++ b/app/src/main/res/layout/custom_notification.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_directwedge.xml b/app/src/main/res/layout/fragment_directwedge.xml index a868e10..70a03be 100644 --- a/app/src/main/res/layout/fragment_directwedge.xml +++ b/app/src/main/res/layout/fragment_directwedge.xml @@ -3,8 +3,8 @@ style="@style/base_layout_style" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/colorPrimaryDark" android:gravity="center" - android:background="@color/material_dynamic_neutral_variant0" android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Configuration" + android:textColor="#FFFFFF" /> + android:layout_width="wrap_content" + android:text="Select Reader" + android:textColor="#FFFFFF" /> + android:layout_width="match_parent" + android:text="Connect" + android:textColor="#FFFFFF" /> + + + + +