diff --git a/app/build.gradle b/app/build.gradle index bdf287e..4ac8e6d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { applicationId "com.csl.cs108ademoapp" minSdkVersion 19 - targetSdkVersion 30 + targetSdkVersion 31 versionCode 34 - versionName "2.3.0" + versionName "2.3.4" } } diff --git a/app/release/cs108ademo-20220224-v2.3.4-app-release.zip b/app/release/cs108ademo-20220224-v2.3.4-app-release.zip new file mode 100644 index 0000000..8391ec3 Binary files /dev/null and b/app/release/cs108ademo-20220224-v2.3.4-app-release.zip differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 813f986..9a9ab10 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,7 @@ @@ -27,6 +28,7 @@ diff --git a/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java b/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java index 9b5e646..2f7e955 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/InventoryRfidTask.java @@ -425,7 +425,7 @@ else if (strTidCompared.matches("E2806894") && MainActivity.mDid.matches("E28068 double rssiGeiger = rssi; if (MainActivity.mCs108Library4a.getRssiDisplaySetting() != 0) - rssiGeiger -= 106.98; + rssiGeiger -= MainActivity.mCs108Library4a.dBuV_dBm_constant; if (geigerTagRssiView != null) geigerTagRssiView.setText(String.format("%.1f", rssiGeiger)); if (geigerTagGotView != null) geigerTagGotView.setText(strEpc); diff --git a/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java b/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java index db01f08..71452b6 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java +++ b/app/src/main/java/com/csl/cs108ademoapp/MainActivity.java @@ -5,10 +5,8 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; -import android.nfc.NdefMessage; -import android.nfc.NfcAdapter; import android.os.Handler; -import android.os.Parcelable; + import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.drawerlayout.widget.DrawerLayout; @@ -16,8 +14,6 @@ import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.View; -import android.view.inputmethod.InputMethodInfo; -import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; @@ -29,9 +25,6 @@ import com.csl.cs108library4a.Cs108Library4A; import com.csl.cs108library4a.ReaderDevice; -import java.io.UnsupportedEncodingException; -import java.util.List; - public class MainActivity extends AppCompatActivity { final boolean DEBUG = false; final String TAG = "Hello"; public static boolean activityActive = false; @@ -52,7 +45,6 @@ public class MainActivity extends AppCompatActivity { public static ReaderDevice tagSelected; Handler mHandler = new Handler(); - public static NfcAdapter nfcAdapter = null; PendingIntent mPendingIntent; IntentFilter writeTagFilters[]; String[][] techList; @@ -85,28 +77,6 @@ protected void onCreate(Bundle savedInstanceState) { mCs108Library4a = new Cs108Library4A(mContext, mLogView); mSensorConnector = new SensorConnector(mContext); - InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); - List lst = imeManager.getInputMethodList(); - for (InputMethodInfo info : lst) { -// MainActivity.mCs108Library4a.appendToLog(info.getId() + " " + info.loadLabel(getPackageManager()).toString()); - } -// Intent intent = new Intent(MainActivity.this, CustomIME.class); - // startService(intent); -// savedInstanceState = null; - - nfcAdapter = NfcAdapter.getDefaultAdapter(this); - if (nfcAdapter == null) MainActivity.mCs108Library4a.appendToLog("onNewIntent !!! This device doesn't support NFC"); - else if (nfcAdapter.isEnabled() == false) MainActivity.mCs108Library4a.appendToLog("onNewIntent !!! This device doesn't enable NFC"); - else { - readFromIntent(getIntent()); - - mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); - IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED); - tagDetected.addCategory(Intent.CATEGORY_DEFAULT); - writeTagFilters = new IntentFilter[] { tagDetected }; - techList = new String[][]{{android.nfc.tech.Ndef.class.getName()}, {android.nfc.tech.NdefFormatable.class.getName()}}; - } - super.onCreate(savedInstanceState); if (savedInstanceState == null) selectItem(DrawerPositions.MAIN); Log.i(TAG, "MainActivity.onCreate.onCreate: END"); @@ -128,7 +98,6 @@ protected void onStart() { @Override protected void onResume() { super.onResume(); - if (nfcAdapter != null && nfcAdapter.isEnabled()) nfcAdapter.enableForegroundDispatch(this, mPendingIntent, writeTagFilters, techList); activityActive = true; wedged = false; if (DEBUG) mCs108Library4a.appendToLog("MainActivity.onResume()"); } @@ -136,7 +105,6 @@ protected void onResume() { @Override protected void onPause() { if (DEBUG) mCs108Library4a.appendToLog("MainActivity.onPause()"); - if (nfcAdapter != null) nfcAdapter.disableForegroundDispatch(this); activityActive = false; super.onPause(); } @@ -290,7 +258,9 @@ public void onBackPressed() { public static boolean permissionRequesting; @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - MainActivity.mCs108Library4a.appendToLog("onRequestPermissionsResult ===="); + MainActivity.mCs108Library4a.appendToLog("permissionRequesting: requestCode = " + requestCode + ", permissions is " + (permissions == null ? "null" : "valid") + ", grantResults is " + (grantResults == null ? "null" : "valid") ); + MainActivity.mCs108Library4a.appendToLog("permissionRequesting: permissions[" + permissions.length + "] = " + (permissions != null && permissions.length > 0 ? permissions[0] : "")); + MainActivity.mCs108Library4a.appendToLog("permissionRequesting: grantResults[" + grantResults.length + "] = " + (grantResults != null && grantResults.length > 0 ? grantResults[0] : "") ); super.onRequestPermissionsResult(requestCode, permissions, grantResults); permissionRequesting = false; } @@ -414,58 +384,9 @@ protected void onNewIntent(Intent intent) { super.onNewIntent(intent); mCs108Library4a.appendToLog("onNewIntent !!! intent.getAction = " + intent.getAction()); readFromIntent(intent); -// if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { -// } } private void readFromIntent(Intent intent) { mCs108Library4a.appendToLog("onNewIntent !!! readFromIntent entry"); String action = intent.getAction(); - if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) - || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) - || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) { - mCs108Library4a.appendToLog("onNewIntent !!! readFromIntent getAction = " + action); - Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); - mCs108Library4a.appendToLog("onNewIntent !!! readFromIntent rawMsgs.length = " + rawMsgs.length); - mCs108Library4a.appendToLog("onNewIntent !!! readFromIntent rawMsgs[0].toString = " + rawMsgs[0].toString()); - NdefMessage[] msgs = null; - if (rawMsgs != null) { - msgs = new NdefMessage[rawMsgs.length]; - for (int i = 0; i < rawMsgs.length; i++) { - msgs[i] = (NdefMessage) rawMsgs[i]; - } - } - buildTagViews(msgs); - } - } - - private void buildTagViews(NdefMessage[] msgs) { - if (msgs == null || msgs.length == 0) return; - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews msgs.length = " + msgs.length + ", msgs[0].getRecords().size = " + msgs[0].getRecords().length); - - String text = ""; - for (int x = 0; x < msgs.length; x++) { - for (int y = 0; y < msgs[0].getRecords().length; y++) { - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews msgs[" + x + "][" + y + "].Inf = " + msgs[x].getRecords()[y].getTnf()); - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews msgs[" + x + "][" + y + "].Type = " + mCs108Library4a.byteArrayToString(msgs[x].getRecords()[y].getType())); - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews msgs[" + x + "][" + y + "].Id = " + mCs108Library4a.byteArrayToString(msgs[x].getRecords()[y].getId())); - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews msgs[" + x + "][" + y + "].Payload = " + mCs108Library4a.byteArrayToString(msgs[x].getRecords()[y].getPayload())); - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews msgs[" + x + "][" + y + "].Class = " + msgs[x].getRecords()[y].getClass().toString()); - }} - - byte[] payload = msgs[0].getRecords()[0].getPayload(); - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews payload.length = " + payload.length + ", with payload[0] = " + payload[0]); - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews payload = " + mCs108Library4a.byteArrayToString(payload)); - String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16"; // Get the Text Encoding - int languageCodeLength = payload[0] & 0063; // Get the Language Code, e.g. "en" - // String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII"); - try { - // Get the Text - text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding); - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews text = " + text); - } catch (UnsupportedEncodingException e) { - mCs108Library4a.appendToLog("onNewIntent !!! buildTagViews UnsupportedEncoding" + e.toString()); - Log.e("UnsupportedEncoding", e.toString()); - } - //tvNFCContent.setText("NFC Content: " + text); } } diff --git a/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java b/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java index 46e7a9f..db4812c 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java +++ b/app/src/main/java/com/csl/cs108ademoapp/SaveList2ExternalTask.java @@ -11,8 +11,6 @@ import android.os.Environment; import android.provider.Settings; -import androidx.core.app.ActivityCompat; - import com.csl.cs108library4a.Cs108Library4A; import com.csl.cs108library4a.ReaderDevice; @@ -379,8 +377,11 @@ public String save2File(String messageStr, boolean requestPermission) { if (mContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { mCs108Library4a.appendToLog("WRITE_EXTERNAL_STORAGE Permission is required !!!"); writeExtPermission = false; - if (requestPermission) { MainActivity.permissionRequesting = true; requestPermissions((Activity) mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); - return null; } + if (requestPermission) { + mCs108Library4a.appendToLog("requestPermissions WRITE_EXTERNAL_STORAGE 1"); + MainActivity.permissionRequesting = true; requestPermissions((Activity) mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); + return null; + } } else mCs108Library4a.appendToLog("WRITE_EXTERNAL_STORAGE Permission is GRANTED !!!"); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/FilterAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/FilterAdapter.java index 35a8fdb..13c7436 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/FilterAdapter.java +++ b/app/src/main/java/com/csl/cs108ademoapp/adapters/FilterAdapter.java @@ -7,10 +7,11 @@ 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 = 2; - public Fragment fragment0, fragment1; + private final int NO_OF_TABS = 3; + public Fragment fragment0, fragment1, fragment2; @Override public Fragment getItem(int position) { @@ -24,6 +25,10 @@ public Fragment getItem(int position) { fragment = new SettingFilterPostFragment(); fragment1 = fragment; break; + case 2: + fragment = new SettingFilterRssiFragment(); + fragment2 = fragment; + break; default: fragment = null; break; diff --git a/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java b/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java index 078ba75..94915e6 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java +++ b/app/src/main/java/com/csl/cs108ademoapp/adapters/ReaderListAdapter.java @@ -86,7 +86,7 @@ public View getView(int position, View convertView, ViewGroup parent) { rssiTextView.setVisibility(View.VISIBLE); double rssiValue = reader.getRssi(); if (MainActivity.mCs108Library4a.getRssiDisplaySetting() != 0 && rssiValue > 0) - rssiValue -= 106.98; + rssiValue -= MainActivity.mCs108Library4a.dBuV_dBm_constant; rssiTextView.setText(String.format("%.1f", rssiValue)); } diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessEm4325PassiveFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessEm4325PassiveFragment.java index 38305de..ab02d18 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessEm4325PassiveFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/AccessEm4325PassiveFragment.java @@ -5,13 +5,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; import android.widget.Button; -import android.widget.CheckBox; import android.widget.EditText; -import android.widget.LinearLayout; -import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; 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 bc99563..d7f71fc 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/ConnectionFragment.java @@ -167,7 +167,6 @@ public void run() { private class DeviceScanTask extends AsyncTask { private long timeMillisUpdate = System.currentTimeMillis(); - boolean usbDeviceFound = false; ArrayList readersListOld = new ArrayList(); boolean wait4process = false; boolean scanning = false; 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 815a0b2..60a0055 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSearchFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidSearchFragment.java @@ -31,7 +31,7 @@ import com.csl.cs108library4a.ReaderDevice; public class InventoryRfidSearchFragment extends CommonFragment { - final double dBuV_dBm_constant = 106.98; + double dBuV_dBm_constant = MainActivity.mCs108Library4a.dBuV_dBm_constant; final int labelMin = -90; final int labelMax = -10; 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 45278f7..f3414c7 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/InventoryRfidiMultiFragment.java @@ -217,7 +217,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) rfidRunTime = (TextView) getActivity().findViewById(R.id.inventoryRfidRunTime1); rfidVoltageLevel = (TextView) getActivity().findViewById(R.id.inventoryRfidVoltageLevel1); TextView rfidFilterOn = (TextView) getActivity().findViewById(R.id.inventoryRfidFilterOn1); - if (mDid != null || (MainActivity.mCs108Library4a.getSelectEnable() == false && MainActivity.mCs108Library4a.getInvMatchEnable() == false)) + if (mDid != null || (MainActivity.mCs108Library4a.getSelectEnable() == false && MainActivity.mCs108Library4a.getInvMatchEnable() == false && MainActivity.mCs108Library4a.getRssiFilterEnable() == false)) rfidFilterOn.setVisibility(View.INVISIBLE); rfidYieldView = (TextView) getActivity().findViewById(R.id.inventoryRfidYield1); 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 bf4da4b..7e2146d 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingAdminFragment.java @@ -1,6 +1,5 @@ package com.csl.cs108ademoapp.fragments; -import android.inputmethodservice.Keyboard; import android.os.Bundle; import android.os.Handler; import android.text.InputFilter; 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 4c2ebd8..cc8bc88 100644 --- a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterFragment.java +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterFragment.java @@ -18,7 +18,7 @@ public class SettingFilterFragment extends CommonFragment { private ViewPager viewPager; FilterAdapter mAdapter; - private String[] tabs = {"Pre-filter", "Post-filter"}; + private String[] tabs = {"Pre-filter", "Post-filter", "Rssi-filter"}; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { diff --git a/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterRssiFragment.java b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterRssiFragment.java new file mode 100644 index 0000000..34cb547 --- /dev/null +++ b/app/src/main/java/com/csl/cs108ademoapp/fragments/SettingFilterRssiFragment.java @@ -0,0 +1,197 @@ +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.ArrayAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import com.csl.cs108ademoapp.MainActivity; +import com.csl.cs108ademoapp.R; +import com.csl.cs108ademoapp.SettingTask; + +public class SettingFilterRssiFragment extends CommonFragment { + private CheckBox checkBoxEnable; + private Spinner spinnerFilterType, spinnerFilterOption; + private EditText editTextFilterThreshold1, editTextFilterThreshold2, editTextFilterCount; + private Button button; + + final boolean sameCheck = false; + Handler mHandler = new Handler(); + + boolean invSelectEnable; + int invSelectFilterType = -1, invSelectFilterOption = -1; + double invSelectFilterThreshold1 = -1, invSelectFilterThreshold2 = -1; + long invSelectFilterCount = -1; + + private SettingTask settingTask; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState, false); + return inflater.inflate(R.layout.fragment_filterrssi_content, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + checkBoxEnable = (CheckBox) getActivity().findViewById(R.id.filterRssiCheck); + + spinnerFilterType = (Spinner) getActivity().findViewById(R.id.filterRssiFilterType); + ArrayAdapter filterTypeAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.filterType_options, R.layout.custom_spinner_layout); + filterTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinnerFilterType.setAdapter(filterTypeAdapter); + spinnerFilterType.setEnabled(false); + + spinnerFilterOption = (Spinner) getActivity().findViewById(R.id.filterRssiFilterOption); + ArrayAdapter filterOptionAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.filter_options1, R.layout.custom_spinner_layout); + filterOptionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinnerFilterOption.setAdapter(filterOptionAdapter); + + String strUnit = MainActivity.mCs108Library4a.getRssiDisplaySetting() > 0 ? "(dBm)" : "(dBuV)"; + TextView textViewThreshold1 = (TextView) getActivity().findViewById(R.id.filterRssiThreshold1Label); + textViewThreshold1.setText(textViewThreshold1.getText().toString() + strUnit); + TextView textViewThreshold2 = (TextView) getActivity().findViewById(R.id.filterRssiThreshold2Label); + textViewThreshold2.setText(textViewThreshold2.getText().toString() + strUnit); + + editTextFilterThreshold1 = (EditText) getActivity().findViewById(R.id.filterRssiThreshold1); + editTextFilterThreshold2 = (EditText) getActivity().findViewById(R.id.filterRssiThreshold2); + editTextFilterCount = (EditText) getActivity().findViewById(R.id.filterRssiCount); + + button = (Button) getActivity().findViewById(R.id.filterRssiSaveButton); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean validValue = false; + if (MainActivity.mCs108Library4a.isBleConnected() == false) { + Toast.makeText(MainActivity.mContext, R.string.toast_ble_not_connected, Toast.LENGTH_SHORT).show(); + return; + } else if (MainActivity.mCs108Library4a.isRfidFailure()) { + Toast.makeText(MainActivity.mContext, "Rfid is disabled", Toast.LENGTH_SHORT).show(); + return; + } else { + boolean bValid = false; + try { + invSelectEnable = checkBoxEnable.isChecked(); + invSelectFilterType = spinnerFilterType.getSelectedItemPosition(); + invSelectFilterOption = spinnerFilterOption.getSelectedItemPosition(); + invSelectFilterThreshold1 = Float.parseFloat(editTextFilterThreshold1.getText().toString()); + if (MainActivity.mCs108Library4a.getRssiDisplaySetting() > 0) invSelectFilterThreshold1 += MainActivity.mCs108Library4a.dBuV_dBm_constant; + invSelectFilterThreshold2 = Float.parseFloat(editTextFilterThreshold2.getText().toString()); + if (MainActivity.mCs108Library4a.getRssiDisplaySetting() > 0) invSelectFilterThreshold2 += MainActivity.mCs108Library4a.dBuV_dBm_constant; + invSelectFilterCount = Integer.parseInt(editTextFilterCount.getText().toString()); + bValid = true; + } catch (Exception ex) { + Toast.makeText(MainActivity.mContext, R.string.toast_invalid_range, Toast.LENGTH_SHORT).show(); + } + if (bValid) settingUpdate(); + } + } + }); + + if (sameCheck == false) MainActivity.mCs108Library4a.setSameCheck(false); + mHandler.post(updateRunnable); + } + + @Override + public void onDestroy() { + if (settingTask != null) settingTask.cancel(true); + MainActivity.mCs108Library4a.setSameCheck(true); + mHandler.removeCallbacks(updateRunnable); + super.onDestroy(); + } + + public SettingFilterRssiFragment() { + super("SettingFilterRssiFragment"); + } + + private final Runnable updateRunnable = new Runnable() { + @Override + public void run() { + int iValue; + long lValue; + String updating = null; + + if (MainActivity.mCs108Library4a.mrfidToWriteSize() != 0) updating = "waiting empty buffer"; + else { + if (updating == null) { + boolean bValue = MainActivity.mCs108Library4a.getRssiFilterEnable(); + MainActivity.mCs108Library4a.appendToLog("updateRunnable getSelectEnable = " + bValue); + checkBoxEnable.setChecked(bValue); + } + if (updating == null) { + int iValue1 = MainActivity.mCs108Library4a.getRssiFilterType(); + MainActivity.mCs108Library4a.appendToLog("updateRunnable getSelectAction = " + iValue1); + if (iValue1 < 0) updating = "getting filter type"; + else spinnerFilterType.setSelection(iValue1); + } + if (updating == null) { + int iValue1 = MainActivity.mCs108Library4a.getRssiFilterOption(); + MainActivity.mCs108Library4a.appendToLog("updateRunnable getSelectAction = " + iValue1); + if (iValue1 < 0) updating = "getting filter option"; + else spinnerFilterOption.setSelection(iValue1); + } + if (updating == null) { + double dValue = MainActivity.mCs108Library4a.getRssiFilterThreshold1(); + if (dValue < 0) updating = "updating threshold 1"; + else editTextFilterThreshold1.setText(String.format("%.1f", (MainActivity.mCs108Library4a.getRssiDisplaySetting() > 0 ? dValue -= MainActivity.mCs108Library4a.dBuV_dBm_constant : dValue))); + } + if (updating == null) { + double dValue = MainActivity.mCs108Library4a.getRssiFilterThreshold2(); + if (dValue < 0) updating = "updating threshold 2"; + else editTextFilterThreshold2.setText(String.format("%.1f", (MainActivity.mCs108Library4a.getRssiDisplaySetting() > 0 ? dValue -= MainActivity.mCs108Library4a.dBuV_dBm_constant : dValue))); + } + if (updating == null) { + long lValue1 = MainActivity.mCs108Library4a.getRssiFilterCount(); + if (lValue1 < 0) updating = "updating count"; + else editTextFilterCount.setText(String.valueOf(lValue1)); + } + } + if (updating != null) { + mHandler.postDelayed(updateRunnable, 1000); + MainActivity.mCs108Library4a.appendToLog("Updating in " + updating); + } + } + }; + + void settingUpdate() { + boolean sameSetting = true; + String invalidRequest = null; + + if (sameSetting == true && invalidRequest == null) { + if (MainActivity.mCs108Library4a.getRssiFilterEnable() != invSelectEnable + || MainActivity.mCs108Library4a.getRssiFilterType() != invSelectFilterType + || MainActivity.mCs108Library4a.getRssiFilterOption() != invSelectFilterOption) { + sameSetting = false; + if (MainActivity.mCs108Library4a.setRssiFilterConfig(invSelectEnable, invSelectFilterType, invSelectFilterOption) == false) invalidRequest = "setting filter type"; + } + if (MainActivity.mCs108Library4a.getRssiFilterThreshold1() != invSelectFilterThreshold1 || MainActivity.mCs108Library4a.getRssiFilterThreshold2() != invSelectFilterThreshold2) { + sameSetting = false; + if (MainActivity.mCs108Library4a.setRssiFilterThreshold(invSelectFilterThreshold1, invSelectFilterThreshold2) == false) invalidRequest = "setting filter threshold"; + } + if (MainActivity.mCs108Library4a.getRssiFilterCount() != invSelectFilterCount) { + sameSetting = false; + MainActivity.mCs108Library4a.appendToLog("rssiFilterCount = " + invSelectFilterCount); + if (MainActivity.mCs108Library4a.setRssiFilterCount(invSelectFilterCount) == false) invalidRequest = "setting filter count"; + } + } + + if (invalidRequest != null) { + String strValue = "Invalid " + invalidRequest + ". Operation is cancelled."; + Toast.makeText(MainActivity.mContext, strValue, Toast.LENGTH_SHORT).show(); + + } else { + settingTask = new SettingTask(button, sameSetting, false); + settingTask.execute(); + MainActivity.mCs108Library4a.saveSetting2File(); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_filterrssi_content.xml b/app/src/main/res/layout/fragment_filterrssi_content.xml new file mode 100644 index 0000000..b4d3d35 --- /dev/null +++ b/app/src/main/res/layout/fragment_filterrssi_content.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +