diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/GenericChipDeviceListener.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/GenericChipDeviceListener.kt index 12e17998fa7c15..e4542fc518e9a8 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/GenericChipDeviceListener.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/GenericChipDeviceListener.kt @@ -1,6 +1,7 @@ package com.google.chip.chiptool import chip.devicecontroller.ChipDeviceController +import chip.devicecontroller.ICDDeviceInfo open class GenericChipDeviceListener : ChipDeviceController.CompletionListener { override fun onConnectDeviceComplete() { @@ -56,7 +57,12 @@ open class GenericChipDeviceListener : ChipDeviceController.CompletionListener { // No op } - override fun onICDRegistrationComplete(icdNodeId: Long, icdCounter: Long) { + override fun onICDRegistrationComplete( + errorCode: Int, + icdNodeId: Long, + icdCounter: Long, + icdDeviceInfo: ICDDeviceInfo + ) { // No op } } diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt index dc082d5dc5b73c..a597bd934514e7 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt @@ -74,6 +74,7 @@ class SelectActionFragment : Fragment() { binding.unpairDeviceBtn.setOnClickListener { handleUnpairDeviceClicked() } binding.groupSettingBtn.setOnClickListener { handleGroupSettingClicked() } binding.otaProviderBtn.setOnClickListener { handleOTAProviderClicked() } + binding.icdBtn.setOnClickListener { handleICDClicked() } return binding.root } @@ -244,6 +245,10 @@ class SelectActionFragment : Fragment() { showFragment(GroupSettingFragment.newInstance()) } + private fun handleICDClicked() { + showFragment(ICDFragment.newInstance()) + } + companion object { @JvmStatic fun newInstance() = SelectActionFragment() diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/ICDFragment.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/ICDFragment.kt new file mode 100644 index 00000000000000..3b27f58c3af575 --- /dev/null +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/clusterclient/ICDFragment.kt @@ -0,0 +1,61 @@ +package com.google.chip.chiptool.clusterclient + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope +import chip.devicecontroller.ChipDeviceController +import com.google.chip.chiptool.ChipClient +import com.google.chip.chiptool.R +import com.google.chip.chiptool.databinding.ICDFragmentBinding +import kotlinx.coroutines.CoroutineScope + +class ICDFragment : Fragment() { + private val deviceController: ChipDeviceController + get() = ChipClient.getDeviceController(requireContext()) + + private lateinit var scope: CoroutineScope + + private lateinit var addressUpdateFragment: AddressUpdateFragment + + private var _binding: ICDFragmentBinding? = null + private val binding + get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = ICDFragmentBinding.inflate(inflater, container, false) + scope = viewLifecycleOwner.lifecycleScope + + addressUpdateFragment = + childFragmentManager.findFragmentById(R.id.addressUpdateFragment) as AddressUpdateFragment + + val clientInfo = deviceController.icdClientInfo + var msg = "" + + for (info in clientInfo) { + msg += "$info\n" + } + showMessage(msg) + + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + private fun showMessage(msg: String) { + requireActivity().runOnUiThread { binding.icdTv.text = msg } + } + + companion object { + fun newInstance(): ICDFragment = ICDFragment() + } +} diff --git a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/provisioning/DeviceProvisioningFragment.kt b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/provisioning/DeviceProvisioningFragment.kt index 16a411bc5eba05..88c9965d31f658 100644 --- a/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/provisioning/DeviceProvisioningFragment.kt +++ b/examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/provisioning/DeviceProvisioningFragment.kt @@ -32,6 +32,7 @@ import androidx.lifecycle.lifecycleScope import chip.devicecontroller.AttestationInfo import chip.devicecontroller.ChipDeviceController import chip.devicecontroller.DeviceAttestationDelegate +import chip.devicecontroller.ICDDeviceInfo import chip.devicecontroller.ICDRegistrationInfo import chip.devicecontroller.NetworkCredentials import com.google.chip.chiptool.ChipClient @@ -293,11 +294,22 @@ class DeviceProvisioningFragment : Fragment() { ) } - override fun onICDRegistrationComplete(icdNodeId: Long, icdCounter: Long) { - Log.d(TAG, "onICDRegistrationComplete - icdNodeId : $icdNodeId, icdCounter : $icdCounter") + override fun onICDRegistrationComplete( + errorCode: Int, + icdNodeId: Long, + icdCounter: Long, + icdDeviceInfo: ICDDeviceInfo + ) { + Log.d( + TAG, + "onICDRegistrationComplete - errorCode: $errorCode, icdNodeId : $icdNodeId, icdCounter : $icdCounter, symmetricKey : ${icdDeviceInfo.symmetricKey.toHex()}" + ) } } + private fun ByteArray.toHex(): String = + joinToString(separator = "") { eachByte -> "%02x".format(eachByte) } + /** Callback from [DeviceProvisioningFragment] notifying any registered listeners. */ interface Callback { /** Notifies that commissioning has been completed. */ diff --git a/examples/android/CHIPTool/app/src/main/res/layout/i_c_d_fragment.xml b/examples/android/CHIPTool/app/src/main/res/layout/i_c_d_fragment.xml new file mode 100644 index 00000000000000..6fb4e0fc35b6ca --- /dev/null +++ b/examples/android/CHIPTool/app/src/main/res/layout/i_c_d_fragment.xml @@ -0,0 +1,29 @@ + + + + + + + + diff --git a/examples/android/CHIPTool/app/src/main/res/layout/select_action_fragment.xml b/examples/android/CHIPTool/app/src/main/res/layout/select_action_fragment.xml index 2ec36b43128be4..5824e8061a4e03 100644 --- a/examples/android/CHIPTool/app/src/main/res/layout/select_action_fragment.xml +++ b/examples/android/CHIPTool/app/src/main/res/layout/select_action_fragment.xml @@ -127,6 +127,14 @@ android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:text="@string/ota_provider_btn_text" /> + +