From 678ef52ffc7207a88dda8222c9585602729d6be1 Mon Sep 17 00:00:00 2001 From: jashandeep Date: Tue, 20 Aug 2024 14:06:58 +0530 Subject: [PATCH] - removing event bus - cleaning up listener logic - updating app side logic after removing event bus --- app/build.gradle | 1 - .../ui/activities/AddDeviceActivity.java | 12 +++---- .../ui/activities/BLEProvisionLanding.java | 8 ++--- .../ui/activities/ManualProvBaseActivity.java | 3 -- .../activities/ProofOfPossessionActivity.java | 12 +++---- .../ui/activities/ProvisionActivity.java | 14 +++----- .../ui/activities/ProvisionLanding.java | 8 ++--- .../ui/activities/ThreadConfigActivity.java | 14 +++----- .../ui/activities/WiFiConfigActivity.java | 12 +++---- .../ui/activities/WiFiScanActivity.java | 14 +++----- provisioning/build.gradle | 1 - .../com/espressif/provisioning/ESPDevice.java | 32 ++++++++++++----- .../provisioning/ESPProvisionManager.java | 27 ++++++++++++--- .../listeners/EventUpdateListener.java | 8 +++++ .../provisioning/transport/BLETransport.java | 34 +++++++++++-------- 15 files changed, 108 insertions(+), 92 deletions(-) create mode 100644 provisioning/src/main/java/com/espressif/provisioning/listeners/EventUpdateListener.java diff --git a/app/build.gradle b/app/build.gradle index f17b184..0cdc2b4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,6 @@ dependencies { implementation 'com.google.crypto.tink:tink-android:1.6.1' implementation project(path: ':provisioning') - implementation 'org.greenrobot:eventbus:3.3.1' implementation 'com.github.yuriy-budiyev:code-scanner:2.1.2' implementation 'com.github.firdausmaulan:AVLoadingIndicatorView:2.3.0' diff --git a/app/src/main/java/com/espressif/ui/activities/AddDeviceActivity.java b/app/src/main/java/com/espressif/ui/activities/AddDeviceActivity.java index 2e4151d..3f1f30f 100644 --- a/app/src/main/java/com/espressif/ui/activities/AddDeviceActivity.java +++ b/app/src/main/java/com/espressif/ui/activities/AddDeviceActivity.java @@ -49,20 +49,18 @@ import com.espressif.provisioning.ESPConstants; import com.espressif.provisioning.ESPDevice; import com.espressif.provisioning.ESPProvisionManager; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.provisioning.listeners.QRCodeScanListener; import com.espressif.wifi_provisioning.R; import com.google.android.material.card.MaterialCardView; import com.wang.avi.AVLoadingIndicatorView; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; -public class AddDeviceActivity extends AppCompatActivity { +public class AddDeviceActivity extends AppCompatActivity implements EventUpdateListener { private static final String TAG = AddDeviceActivity.class.getSimpleName(); @@ -95,8 +93,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { intent = new Intent(); sharedPreferences = getSharedPreferences(AppConstants.ESP_PREFERENCES, Context.MODE_PRIVATE); provisionManager = ESPProvisionManager.getInstance(getApplicationContext()); + provisionManager.addListener(this); initViews(); - EventBus.getDefault().register(this); } @Override @@ -150,7 +148,6 @@ protected void onPause() { protected void onDestroy() { hideLoading(); - EventBus.getDefault().unregister(this); // if (cameraPreview != null) { // cameraPreview.release(); // } @@ -220,8 +217,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEvent(DeviceConnectionEvent event) { + @Override public void onEvent(DeviceConnectionEvent event) { Log.d(TAG, "On Device Connection Event RECEIVED : " + event.getEventType()); diff --git a/app/src/main/java/com/espressif/ui/activities/BLEProvisionLanding.java b/app/src/main/java/com/espressif/ui/activities/BLEProvisionLanding.java index 1c372b0..f9568f9 100644 --- a/app/src/main/java/com/espressif/ui/activities/BLEProvisionLanding.java +++ b/app/src/main/java/com/espressif/ui/activities/BLEProvisionLanding.java @@ -49,19 +49,17 @@ import com.espressif.provisioning.DeviceConnectionEvent; import com.espressif.provisioning.ESPConstants; import com.espressif.provisioning.listeners.BleScanListener; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.ui.adapters.BleDeviceListAdapter; import com.espressif.ui.models.BleDevice; import com.espressif.ui.utils.Utils; import com.espressif.wifi_provisioning.BuildConfig; import com.espressif.wifi_provisioning.R; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - import java.util.ArrayList; import java.util.HashMap; -public class BLEProvisionLanding extends ManualProvBaseActivity { +public class BLEProvisionLanding extends ManualProvBaseActivity implements EventUpdateListener { private static final String TAG = BLEProvisionLanding.class.getSimpleName(); @@ -198,7 +196,7 @@ public void onRequestPermissionsResult(int requestCode, String permissions[], in } } - @Subscribe(threadMode = ThreadMode.MAIN) + @Override public void onEvent(DeviceConnectionEvent event) { Log.d(TAG, "ON Device Prov Event RECEIVED : " + event.getEventType()); diff --git a/app/src/main/java/com/espressif/ui/activities/ManualProvBaseActivity.java b/app/src/main/java/com/espressif/ui/activities/ManualProvBaseActivity.java index 68a24a2..248a8a4 100644 --- a/app/src/main/java/com/espressif/ui/activities/ManualProvBaseActivity.java +++ b/app/src/main/java/com/espressif/ui/activities/ManualProvBaseActivity.java @@ -27,7 +27,6 @@ import com.espressif.provisioning.ESPProvisionManager; import com.espressif.wifi_provisioning.R; -import org.greenrobot.eventbus.EventBus; import org.json.JSONException; import org.json.JSONObject; @@ -48,12 +47,10 @@ protected void onCreate(Bundle savedInstanceState) { securityType = getIntent().getIntExtra(AppConstants.KEY_SECURITY_TYPE, AppConstants.SEC_TYPE_DEFAULT); provisionManager = ESPProvisionManager.getInstance(getApplicationContext()); sharedPreferences = getSharedPreferences(AppConstants.ESP_PREFERENCES, Context.MODE_PRIVATE); - EventBus.getDefault().register(this); } @Override protected void onDestroy() { - EventBus.getDefault().unregister(this); super.onDestroy(); } diff --git a/app/src/main/java/com/espressif/ui/activities/ProofOfPossessionActivity.java b/app/src/main/java/com/espressif/ui/activities/ProofOfPossessionActivity.java index 5020742..96656e2 100644 --- a/app/src/main/java/com/espressif/ui/activities/ProofOfPossessionActivity.java +++ b/app/src/main/java/com/espressif/ui/activities/ProofOfPossessionActivity.java @@ -32,16 +32,14 @@ import com.espressif.provisioning.DeviceConnectionEvent; import com.espressif.provisioning.ESPConstants; import com.espressif.provisioning.ESPProvisionManager; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.provisioning.listeners.ResponseListener; import com.espressif.wifi_provisioning.R; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; -public class ProofOfPossessionActivity extends AppCompatActivity { +public class ProofOfPossessionActivity extends AppCompatActivity implements EventUpdateListener { private static final String TAG = ProofOfPossessionActivity.class.getSimpleName(); @@ -62,8 +60,8 @@ protected void onCreate(Bundle savedInstanceState) { provisionManager = ESPProvisionManager.getInstance(getApplicationContext()); initViews(); - EventBus.getDefault().register(this); + provisionManager.addListener(this); deviceName = provisionManager.getEspDevice().getDeviceName(); if (!TextUtils.isEmpty(deviceName)) { @@ -83,7 +81,7 @@ protected void onCreate(Bundle savedInstanceState) { @Override protected void onDestroy() { - EventBus.getDefault().unregister(this); + provisionManager.removeListener(this); super.onDestroy(); } @@ -93,7 +91,7 @@ public void onBackPressed() { super.onBackPressed(); } - @Subscribe(threadMode = ThreadMode.MAIN) + @Override public void onEvent(DeviceConnectionEvent event) { Log.d(TAG, "On Device Connection Event RECEIVED : " + event.getEventType()); diff --git a/app/src/main/java/com/espressif/ui/activities/ProvisionActivity.java b/app/src/main/java/com/espressif/ui/activities/ProvisionActivity.java index 9c1667d..f944be6 100644 --- a/app/src/main/java/com/espressif/ui/activities/ProvisionActivity.java +++ b/app/src/main/java/com/espressif/ui/activities/ProvisionActivity.java @@ -30,16 +30,13 @@ import com.espressif.AppConstants; import com.espressif.provisioning.DeviceConnectionEvent; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.wifi_provisioning.R; import com.espressif.provisioning.ESPConstants; import com.espressif.provisioning.ESPProvisionManager; import com.espressif.provisioning.listeners.ProvisionListener; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -public class ProvisionActivity extends AppCompatActivity { +public class ProvisionActivity extends AppCompatActivity implements EventUpdateListener { private static final String TAG = ProvisionActivity.class.getSimpleName(); @@ -66,8 +63,8 @@ protected void onCreate(Bundle savedInstanceState) { passphraseValue = intent.getStringExtra(AppConstants.KEY_WIFI_PASSWORD); dataset = intent.getStringExtra(AppConstants.KEY_THREAD_DATASET); provisionManager = ESPProvisionManager.getInstance(getApplicationContext()); + provisionManager.addListener(this); initViews(); - EventBus.getDefault().register(this); Log.d(TAG, "Selected AP -" + ssidValue); showLoading(); @@ -82,12 +79,11 @@ public void onBackPressed() { @Override protected void onDestroy() { - EventBus.getDefault().unregister(this); + provisionManager.removeListener(this); super.onDestroy(); } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEvent(DeviceConnectionEvent event) { + @Override public void onEvent(DeviceConnectionEvent event) { Log.d(TAG, "On Device Connection Event RECEIVED : " + event.getEventType()); diff --git a/app/src/main/java/com/espressif/ui/activities/ProvisionLanding.java b/app/src/main/java/com/espressif/ui/activities/ProvisionLanding.java index 198ae22..928979e 100644 --- a/app/src/main/java/com/espressif/ui/activities/ProvisionLanding.java +++ b/app/src/main/java/com/espressif/ui/activities/ProvisionLanding.java @@ -34,15 +34,14 @@ import com.espressif.AppConstants; import com.espressif.provisioning.DeviceConnectionEvent; import com.espressif.provisioning.ESPConstants; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.ui.utils.Utils; import com.espressif.wifi_provisioning.R; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; -public class ProvisionLanding extends ManualProvBaseActivity { +public class ProvisionLanding extends ManualProvBaseActivity implements EventUpdateListener { private static final String TAG = ProvisionLanding.class.getSimpleName(); @@ -92,8 +91,7 @@ public void onRequestPermissionsResult(int requestCode, String permissions[], in } } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEvent(DeviceConnectionEvent event) { + @Override public void onEvent(DeviceConnectionEvent event) { Log.d(TAG, "On Device Prov Event RECEIVED : " + event.getEventType()); diff --git a/app/src/main/java/com/espressif/ui/activities/ThreadConfigActivity.java b/app/src/main/java/com/espressif/ui/activities/ThreadConfigActivity.java index 22c6905..4728380 100644 --- a/app/src/main/java/com/espressif/ui/activities/ThreadConfigActivity.java +++ b/app/src/main/java/com/espressif/ui/activities/ThreadConfigActivity.java @@ -37,19 +37,16 @@ import com.espressif.provisioning.ESPConstants; import com.espressif.provisioning.ESPProvisionManager; import com.espressif.provisioning.WiFiAccessPoint; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.provisioning.listeners.WiFiScanListener; import com.espressif.ui.utils.Utils; import com.espressif.wifi_provisioning.R; import com.google.android.gms.threadnetwork.ThreadNetwork; import com.google.android.gms.threadnetwork.ThreadNetworkCredentials; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - import java.util.ArrayList; -public class ThreadConfigActivity extends AppCompatActivity { +public class ThreadConfigActivity extends AppCompatActivity implements EventUpdateListener { private static final String TAG = ThreadConfigActivity.class.getSimpleName(); @@ -72,16 +69,15 @@ protected void onCreate(Bundle savedInstanceState) { handler = new Handler(); threadNetworkList = new ArrayList<>(); provisionManager = ESPProvisionManager.getInstance(getApplicationContext()); + provisionManager.addListener(this); scanCapAvailable = getIntent().getBooleanExtra(AppConstants.KEY_THREAD_SCAN_AVAILABLE, false); - initViews(); - EventBus.getDefault().register(this); getThreadPreferredCredentials(); } @Override protected void onDestroy() { - EventBus.getDefault().unregister(this); + provisionManager.removeListener(this); super.onDestroy(); } @@ -91,7 +87,7 @@ public void onBackPressed() { super.onBackPressed(); } - @Subscribe(threadMode = ThreadMode.MAIN) + @Override public void onEvent(DeviceConnectionEvent event) { Log.d(TAG, "On Device Connection Event RECEIVED : " + event.getEventType()); diff --git a/app/src/main/java/com/espressif/ui/activities/WiFiConfigActivity.java b/app/src/main/java/com/espressif/ui/activities/WiFiConfigActivity.java index fcb5f8a..2f31dda 100644 --- a/app/src/main/java/com/espressif/ui/activities/WiFiConfigActivity.java +++ b/app/src/main/java/com/espressif/ui/activities/WiFiConfigActivity.java @@ -31,13 +31,11 @@ import com.espressif.provisioning.DeviceConnectionEvent; import com.espressif.provisioning.ESPConstants; import com.espressif.provisioning.ESPProvisionManager; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.wifi_provisioning.R; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; -public class WiFiConfigActivity extends AppCompatActivity { +public class WiFiConfigActivity extends AppCompatActivity implements EventUpdateListener { private static final String TAG = WiFiConfigActivity.class.getSimpleName(); @@ -54,13 +52,13 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_wifi_config); provisionManager = ESPProvisionManager.getInstance(getApplicationContext()); + provisionManager.addListener(this); initViews(); - EventBus.getDefault().register(this); } @Override protected void onDestroy() { - EventBus.getDefault().unregister(this); + provisionManager.removeListener(this); super.onDestroy(); } @@ -70,7 +68,7 @@ public void onBackPressed() { super.onBackPressed(); } - @Subscribe(threadMode = ThreadMode.MAIN) + @Override public void onEvent(DeviceConnectionEvent event) { Log.d(TAG, "On Device Connection Event RECEIVED : " + event.getEventType()); diff --git a/app/src/main/java/com/espressif/ui/activities/WiFiScanActivity.java b/app/src/main/java/com/espressif/ui/activities/WiFiScanActivity.java index 7d3752d..0ef2e7c 100644 --- a/app/src/main/java/com/espressif/ui/activities/WiFiScanActivity.java +++ b/app/src/main/java/com/espressif/ui/activities/WiFiScanActivity.java @@ -40,18 +40,15 @@ import com.espressif.provisioning.ESPConstants; import com.espressif.provisioning.ESPProvisionManager; import com.espressif.provisioning.WiFiAccessPoint; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.provisioning.listeners.WiFiScanListener; import com.espressif.ui.adapters.WiFiListAdapter; import com.espressif.wifi_provisioning.R; import com.google.android.material.textfield.TextInputLayout; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - import java.util.ArrayList; -public class WiFiScanActivity extends AppCompatActivity { +public class WiFiScanActivity extends AppCompatActivity implements EventUpdateListener { private static final String TAG = WiFiScanActivity.class.getSimpleName(); @@ -80,6 +77,7 @@ protected void onCreate(Bundle savedInstanceState) { wifiAPList = new ArrayList<>(); handler = new Handler(); provisionManager = ESPProvisionManager.getInstance(getApplicationContext()); + provisionManager.addListener(this); String deviceName = provisionManager.getEspDevice().getDeviceName(); String wifiMsg = String.format(getString(R.string.setup_instructions), deviceName); @@ -116,13 +114,12 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int } }); - EventBus.getDefault().register(this); startWifiScan(); } @Override protected void onDestroy() { - EventBus.getDefault().unregister(this); + provisionManager.removeListener(this); super.onDestroy(); } @@ -132,8 +129,7 @@ public void onBackPressed() { super.onBackPressed(); } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEvent(DeviceConnectionEvent event) { + @Override public void onEvent(DeviceConnectionEvent event) { Log.d(TAG, "On Device Connection Event RECEIVED : " + event.getEventType()); diff --git a/provisioning/build.gradle b/provisioning/build.gradle index c25f18a..9e8fb8f 100644 --- a/provisioning/build.gradle +++ b/provisioning/build.gradle @@ -56,7 +56,6 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'org.greenrobot:eventbus:3.3.1' implementation 'com.google.protobuf:protobuf-javalite:3.18.0' implementation 'com.google.crypto.tink:tink-android:1.6.1' implementation 'com.google.android.gms:play-services-vision:20.1.3' diff --git a/provisioning/src/main/java/com/espressif/provisioning/ESPDevice.java b/provisioning/src/main/java/com/espressif/provisioning/ESPDevice.java index f7d9436..9813913 100644 --- a/provisioning/src/main/java/com/espressif/provisioning/ESPDevice.java +++ b/provisioning/src/main/java/com/espressif/provisioning/ESPDevice.java @@ -37,6 +37,7 @@ import androidx.annotation.NonNull; import androidx.annotation.RequiresPermission; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.provisioning.listeners.ProvisionListener; import com.espressif.provisioning.listeners.ResponseListener; import com.espressif.provisioning.listeners.WiFiScanListener; @@ -50,7 +51,6 @@ import com.espressif.provisioning.utils.MessengeHelper; import com.google.protobuf.InvalidProtocolBufferException; -import org.greenrobot.eventbus.EventBus; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -101,9 +101,10 @@ public class ESPDevice { private String deviceName; private WifiManager wifiManager; private ConnectivityManager connectivityManager; + private final EventUpdateListener eventUpdateListener; private ConnectivityManager.NetworkCallback networkCallback; - public ESPDevice(Context context, ESPConstants.TransportType transportType, ESPConstants.SecurityType securityType) { + public ESPDevice(Context context, ESPConstants.TransportType transportType, ESPConstants.SecurityType securityType, EventUpdateListener eventUpdateListener) { this.context = context; handler = new Handler(Looper.getMainLooper()); @@ -111,11 +112,12 @@ public ESPDevice(Context context, ESPConstants.TransportType transportType, ESPC this.securityType = securityType; wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + this.eventUpdateListener = eventUpdateListener; switch (transportType) { case TRANSPORT_BLE: - transport = new BLETransport(context); + transport = new BLETransport(context, eventUpdateListener); break; case TRANSPORT_SOFTAP: @@ -157,7 +159,9 @@ public void connectBLEDevice(BluetoothDevice bluetoothDevice, String primaryServ ((BLETransport) transport).connect(bluetoothDevice, UUID.fromString(primaryServiceUuid)); } else { Log.e(TAG, "Trying to connect device with wrong transport."); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + if (eventUpdateListener != null) { + eventUpdateListener.onEvent(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + } } } @@ -175,7 +179,9 @@ public void connectWiFiDevice() { } else { Log.e(TAG, "Trying to connect device with wrong transport."); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + if (eventUpdateListener != null) { + eventUpdateListener.onEvent(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + } } } @@ -304,7 +310,9 @@ public void onLost(@NonNull Network network) { } else { Log.e(TAG, "Failed to add network"); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + if (eventUpdateListener != null) { + eventUpdateListener.onEvent(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + } } } } @@ -1609,7 +1617,9 @@ public void onSuccess(byte[] returnData) { } deviceName = fetchWiFiSSID(); handler.removeCallbacks(wifiConnectionFailedTask); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTED)); + if (eventUpdateListener != null) { + eventUpdateListener.onEvent(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTED)); + } } @Override @@ -1636,7 +1646,9 @@ public void run() { handler.removeCallbacks(getCapabilitiesTask); handler.removeCallbacks(deviceConnectionFailedTask); Log.e(TAG, "deviceConnectionFailedTask"); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + if (eventUpdateListener != null) { + eventUpdateListener.onEvent(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + } } }; @@ -1676,7 +1688,9 @@ public void run() { handler.removeCallbacks(task); Log.e(TAG, "wifiConnectionFailedTask"); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + if (eventUpdateListener != null) { + eventUpdateListener.onEvent(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + } } }; diff --git a/provisioning/src/main/java/com/espressif/provisioning/ESPProvisionManager.java b/provisioning/src/main/java/com/espressif/provisioning/ESPProvisionManager.java index f03d38e..2d34d48 100644 --- a/provisioning/src/main/java/com/espressif/provisioning/ESPProvisionManager.java +++ b/provisioning/src/main/java/com/espressif/provisioning/ESPProvisionManager.java @@ -36,6 +36,7 @@ import com.espressif.provisioning.device_scanner.BleScanner; import com.espressif.provisioning.device_scanner.WiFiScanner; import com.espressif.provisioning.listeners.BleScanListener; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.provisioning.listeners.QRCodeScanListener; import com.espressif.provisioning.listeners.WiFiScanListener; import com.google.android.gms.vision.CameraSource; @@ -56,7 +57,7 @@ * App can use this class to provision device. It has APIs to scan devices, scan QR code and connect with the device to get * object of ESPDevice. */ -public class ESPProvisionManager { +public class ESPProvisionManager implements EventUpdateListener { private static final String TAG = "ESP:" + ESPProvisionManager.class.getSimpleName(); @@ -68,6 +69,7 @@ public class ESPProvisionManager { private Context context; private Handler handler; private boolean isScanned = false; + private final List listeners = new ArrayList<>(); /** * This method is used to get singleton instance of @@ -83,6 +85,14 @@ public static ESPProvisionManager getInstance(Context context) { return provision; } + public void addListener(EventUpdateListener listener) { + listeners.add(listener); + } + + public void removeListener(EventUpdateListener listener) { + this.listeners.remove(listener); + } + private ESPProvisionManager(Context context) { this.context = context; handler = new Handler(); @@ -97,7 +107,7 @@ private ESPProvisionManager(Context context) { */ public ESPDevice createESPDevice(ESPConstants.TransportType transportType, ESPConstants.SecurityType securityType) { - espDevice = new ESPDevice(context, transportType, securityType); + espDevice = new ESPDevice(context, transportType, securityType, this); return espDevice; } @@ -208,7 +218,7 @@ public void run() { securityType = setSecurityType(security); - espDevice = new ESPDevice(context, transportType, securityType); + espDevice = new ESPDevice(context, transportType, securityType, ESPProvisionManager.this); espDevice.setDeviceName(deviceName); espDevice.setProofOfPossession(pop); espDevice.setUserName(userName); @@ -308,7 +318,7 @@ public void run() { securityType = setSecurityType(security); - espDevice = new ESPDevice(context, transportType, securityType); + espDevice = new ESPDevice(context, transportType, securityType, ESPProvisionManager.this); espDevice.setDeviceName(deviceName); espDevice.setProofOfPossession(pop); espDevice.setUserName(userName); @@ -474,6 +484,15 @@ private ESPConstants.SecurityType setSecurityType(int security) { } } + @Override + public void onEvent(DeviceConnectionEvent deviceConnectionEvent) { + if (listeners.isEmpty()) return; + + for (EventUpdateListener listener : listeners) { + listener.onEvent(deviceConnectionEvent); + } + } + class SearchDeviceTask implements Runnable { private ESPDevice device; diff --git a/provisioning/src/main/java/com/espressif/provisioning/listeners/EventUpdateListener.java b/provisioning/src/main/java/com/espressif/provisioning/listeners/EventUpdateListener.java new file mode 100644 index 0000000..e66190b --- /dev/null +++ b/provisioning/src/main/java/com/espressif/provisioning/listeners/EventUpdateListener.java @@ -0,0 +1,8 @@ +package com.espressif.provisioning.listeners; + +import com.espressif.provisioning.DeviceConnectionEvent; + +public interface EventUpdateListener { + + void onEvent(DeviceConnectionEvent deviceConnectionEvent); +} diff --git a/provisioning/src/main/java/com/espressif/provisioning/transport/BLETransport.java b/provisioning/src/main/java/com/espressif/provisioning/transport/BLETransport.java index 78eafc2..06f6d9b 100644 --- a/provisioning/src/main/java/com/espressif/provisioning/transport/BLETransport.java +++ b/provisioning/src/main/java/com/espressif/provisioning/transport/BLETransport.java @@ -28,9 +28,9 @@ import com.espressif.provisioning.DeviceConnectionEvent; import com.espressif.provisioning.ESPConstants; +import com.espressif.provisioning.listeners.EventUpdateListener; import com.espressif.provisioning.listeners.ResponseListener; -import org.greenrobot.eventbus.EventBus; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -65,16 +65,18 @@ public class BLETransport implements Transport { private boolean isReadingDescriptors = false; public ArrayList deviceCapabilities = new ArrayList<>(); public String versionInfo; + private final EventUpdateListener eventUpdateListener; /** * Create BLETransport implementation * * @param context */ - public BLETransport(Context context) { + public BLETransport(Context context, EventUpdateListener eventUpdateListener) { this.context = context; this.transportToken = new Semaphore(1); this.dispatcherThreadPool = Executors.newSingleThreadExecutor(); + this.eventUpdateListener = eventUpdateListener; } /** @@ -179,10 +181,10 @@ public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState Log.d(TAG, "onConnectionStateChange, New state : " + newState + ", Status : " + status); if (status == BluetoothGatt.GATT_FAILURE) { - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); return; } else if (status == 133) { - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); return; } else if (status != BluetoothGatt.GATT_SUCCESS && newState != BluetoothProfile.STATE_DISCONNECTED) { // TODO need to check this status @@ -194,7 +196,7 @@ public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState gatt.requestMtu(512); } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { Log.e(TAG, "Disconnected from GATT server."); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_DISCONNECTED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_DISCONNECTED)); } } @@ -206,7 +208,7 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status != BluetoothGatt.GATT_SUCCESS) { Log.d(TAG, "Status not success"); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); return; } @@ -214,7 +216,7 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (service == null) { Log.e(TAG, "Service not found!"); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); return; } @@ -222,7 +224,7 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (characteristic == null) { Log.e(TAG, "Tx characteristic not found!"); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); return; } @@ -243,7 +245,7 @@ public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descri Log.d(TAG, "Read Descriptor : " + bluetoothGatt.readDescriptor(descriptor)); } else { Log.e(TAG, "Fail to write descriptor"); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); } } @@ -257,8 +259,6 @@ public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descrip if (status != BluetoothGatt.GATT_SUCCESS) { Log.e(TAG, "Failed to read descriptor"); charUuidList.remove(charUuid); -// EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); -// return; } if (data == null) { @@ -335,7 +335,7 @@ public void onCharacteristicRead(BluetoothGatt gatt, Log.d(TAG, "Capabilities JSON not available."); } - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTED)); } if (currentResponseListener != null) { @@ -358,7 +358,6 @@ public void run() { } else { currentResponseListener.onFailure(new Exception("Read from BLE failed")); -// EventBus.getDefault().post(new DeviceProvEvent(LibConstants.EVENT_DEVICE_COMMUNICATION_FAILED)); } } transportToken.release(); @@ -376,7 +375,6 @@ public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristi } else { if (currentResponseListener != null) { currentResponseListener.onFailure(new Exception("Write to BLE failed")); -// EventBus.getDefault().post(new DeviceProvEvent(LibConstants.EVENT_DEVICE_COMMUNICATION_FAILED)); } transportToken.release(); } @@ -398,7 +396,7 @@ private void readNextDescriptor() { if (characteristic == null) { Log.e(TAG, "Tx characteristic not found!"); disconnect(); - EventBus.getDefault().post(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); + updateListeners(new DeviceConnectionEvent(ESPConstants.EVENT_DEVICE_CONNECTION_FAILED)); return; } @@ -427,4 +425,10 @@ private void readNextDescriptor() { } } } + + private void updateListeners(DeviceConnectionEvent connectionEvent) { + if (eventUpdateListener != null) { + eventUpdateListener.onEvent(connectionEvent); + } + } }