Skip to content

Commit

Permalink
move dependencies in the constructor for AndroidChipPlatform
Browse files Browse the repository at this point in the history
  • Loading branch information
xylophone21 committed Sep 24, 2021
1 parent d2fc74f commit 46e85b5
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,6 @@ class CHIPToolActivity :
setContentView(R.layout.top_activity)

if (savedInstanceState == null) {
ChipDeviceController.load()
ChipClient.getAndroidChipPlatform().setConfigurationManager(PreferencesConfigurationManager(this))
ChipClient.getAndroidChipPlatform().setKeyValueStoreManager(chip.platform.PreferencesKeyValueStoreManager(this))
ChipClient.getAndroidChipPlatform().setServiceResolver(NsdManagerServiceResolver(this))
ChipClient.getAndroidChipPlatform().bleManager = AndroidBleManager()
val fragment = SelectActionFragment.newInstance()
supportFragmentManager
.beginTransaction()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ import android.content.Context
import android.util.Log
import chip.devicecontroller.ChipDeviceController
import chip.devicecontroller.GetConnectedDeviceCallbackJni.GetConnectedDeviceCallback
import chip.platform.AndroidBleManager
import chip.platform.AndroidChipPlatform
import chip.platform.NsdManagerServiceResolver
import chip.platform.PreferencesConfigurationManager
import chip.platform.PreferencesKeyValueStoreManager
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine
Expand All @@ -33,15 +37,19 @@ object ChipClient {
private lateinit var androidPlatform: AndroidChipPlatform

fun getDeviceController(context: Context): ChipDeviceController {
getAndroidChipPlatform(context)

if (!this::chipDeviceController.isInitialized) {
chipDeviceController = ChipDeviceController()
}
return chipDeviceController
}

fun getAndroidChipPlatform(): AndroidChipPlatform {
if(!this::androidPlatform.isInitialized) {
androidPlatform = AndroidChipPlatform()
fun getAndroidChipPlatform(context: Context?): AndroidChipPlatform {
if(!this::androidPlatform.isInitialized && context != null) {
//force ChipDeviceController load jni
ChipDeviceController.load()
androidPlatform = AndroidChipPlatform(AndroidBleManager(), PreferencesKeyValueStoreManager(context), PreferencesConfigurationManager(context), NsdManagerServiceResolver(context))
}
return androidPlatform
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import android.bluetooth.le.ScanSettings
import android.content.Context
import android.os.ParcelUuid
import android.util.Log
import chip.platform.AndroidChipPlatform
import chip.platform.BleConnection
import com.google.chip.chiptool.ChipClient
import java.util.UUID
Expand Down Expand Up @@ -43,13 +42,13 @@ class BluetoothManager : BleConnection {
.toByteArray()
}

suspend fun getBluetoothDevice(discriminator: Int): BluetoothDevice? {
suspend fun getBluetoothDevice(context: Context, discriminator: Int): BluetoothDevice? {

if (! bluetoothAdapter.isEnabled) {
bluetoothAdapter.enable();
}

connectionId = ChipClient.getAndroidChipPlatform().bleManager.addConnection(this)
connectionId = ChipClient.getAndroidChipPlatform(context).bleManager.addConnection(this)

val scanner = bluetoothAdapter.bluetoothLeScanner ?: run {
Log.e(TAG, "No bluetooth scanner found")
Expand Down Expand Up @@ -106,7 +105,7 @@ class BluetoothManager : BleConnection {
continuation: CancellableContinuation<BluetoothGatt?>
): BluetoothGattCallback {
return object : BluetoothGattCallback() {
private val wrappedCallback = ChipClient.getAndroidChipPlatform().bleManager.callback;
private val wrappedCallback = ChipClient.getAndroidChipPlatform(context).bleManager.callback;
private val coroutineContinuation = continuation

override fun onConnectionStateChange(
Expand Down Expand Up @@ -208,7 +207,7 @@ class BluetoothManager : BleConnection {

override fun onCloseBleComplete(connId: Int) {
bleGatt?.close();
ChipClient.getAndroidChipPlatform().bleManager.removeConnection(connectionId)
ChipClient.getAndroidChipPlatform(null).bleManager.removeConnection(connectionId)
connectionId = 0
//todo: notify DeviceProvisiongFragment
Log.d(TAG, "onCloseBleComplete")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ class DeviceProvisioningFragment : Fragment() {
R.string.rendezvous_over_ble_scanning_text,
deviceInfo.discriminator.toString()
)
val device = bluetoothManager.getBluetoothDevice(deviceInfo.discriminator) ?: run {
val device = bluetoothManager.getBluetoothDevice(requireContext(), deviceInfo.discriminator) ?: run {
showMessage(R.string.rendezvous_over_ble_scanning_failed_text)
return@launch
}
Expand Down
19 changes: 12 additions & 7 deletions src/platform/android/java/chip/platform/AndroidChipPlatform.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,27 @@
public final class AndroidChipPlatform {
private BleManager mBleManager = null;

public AndroidChipPlatform() {}
public AndroidChipPlatform(BleManager ble, KeyValueStoreManager kvm, ConfigurationManager cfg, ServiceResolver resolver) {
setBLEManager(ble);
setKeyValueStoreManager(kvm);
setConfigurationManager(cfg);
setServiceResolver(resolver);
}

// for BLEManager
public BleManager getBLEManager() {
return mBleManager;
}

public void setBLEManager(BleManager manager) {
private void setBLEManager(BleManager manager) {
if (manager != null) {
mBleManager = manager;
manager.setAndroidChipPlatform(this);
nativeSetBLEManager(manager);
}
}

public native void nativeSetBLEManager(BleManager manager);
private native void nativeSetBLEManager(BleManager manager);

// apis in BleLayer.h called by Platform
// write success
Expand All @@ -57,20 +62,20 @@ public native void handleUnsubscribeComplete(
public native void handleConnectionError(int connId);

// for KeyValueStoreManager
public native void setKeyValueStoreManager(KeyValueStoreManager manager);
private native void setKeyValueStoreManager(KeyValueStoreManager manager);

// for ConfigurationManager
public native void setConfigurationManager(ConfigurationManager manager);
private native void setConfigurationManager(ConfigurationManager manager);

// for ServiceResolver
public void setServiceResolver(ServiceResolver resolver) {
private void setServiceResolver(ServiceResolver resolver) {
if(resolver != null) {
resolver.setAndroidChipPlatform(this);
nativeSetServiceResolver(resolver);
}
}

public native void nativeSetServiceResolver(ServiceResolver resolver);
private native void nativeSetServiceResolver(ServiceResolver resolver);

public native void handleServiceResolve(
String instanceName,
Expand Down

0 comments on commit 46e85b5

Please sign in to comment.