Skip to content

Commit cf9a3a2

Browse files
committed
Merge branch 'master' into ember_compatibility_split
2 parents ce59a6d + 93aa97d commit cf9a3a2

34 files changed

+1325
-778
lines changed

.github/workflows/lint.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ jobs:
246246
output.
247247
if: always()
248248
run: |
249-
git grep -I -n '0x%[0-9l.-]*[^0-9lxX".-]' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
249+
git grep -I -n '0x%[0-9l.*-]*[^xX"0-9l.*-]' -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
250250
251251
# git grep exits with 0 if it finds a match, but we want
252252
# to fail (exit nonzero) on match. And we want to exclude this file,

examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/CHIPToolActivity.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class CHIPToolActivity :
122122
startActivity(redirectIntent)
123123
}
124124

125-
override fun SetNetworkType(type: ProvisionNetworkType) {
125+
override fun setNetworkType(type: ProvisionNetworkType?) {
126126
networkType = type
127127
}
128128

examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/SelectActionFragment.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ class SelectActionFragment : Fragment() {
154154
/** Notifies listener of a click to manually input the CHIP device address. */
155155
fun onShowDeviceAddressInput()
156156

157-
fun SetNetworkType(type: ProvisionNetworkType)
157+
fun setNetworkType(type: ProvisionNetworkType?)
158158
}
159159

160160
private fun showFragment(fragment: Fragment, showOnBack: Boolean = true) {
@@ -172,6 +172,7 @@ class SelectActionFragment : Fragment() {
172172

173173
/** Notifies listener of Scan QR code button click. */
174174
private fun handleScanQrCodeClicked() {
175+
getCallback()?.setNetworkType(null)
175176
showFragment(BarcodeFragment.newInstance())
176177
}
177178

@@ -226,13 +227,13 @@ class SelectActionFragment : Fragment() {
226227

227228
/** Notifies listener of provision-WiFi-credentials button click. */
228229
private fun handleProvisionWiFiCredentialsClicked() {
229-
getCallback()?.SetNetworkType(ProvisionNetworkType.WIFI)
230+
getCallback()?.setNetworkType(ProvisionNetworkType.WIFI)
230231
showFragment(BarcodeFragment.newInstance())
231232
}
232233

233234
/** Notifies listener of provision-Thread-credentials button click. */
234235
private fun handleProvisionThreadCredentialsClicked() {
235-
getCallback()?.SetNetworkType(ProvisionNetworkType.THREAD)
236+
getCallback()?.setNetworkType(ProvisionNetworkType.THREAD)
236237
showFragment(BarcodeFragment.newInstance())
237238
}
238239

examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/CHIPDeviceDetailsFragment.kt

+85-12
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@
1818

1919
package com.google.chip.chiptool.setuppayloadscanner
2020

21+
import android.content.Intent
22+
import android.net.Uri
2123
import android.os.Bundle
24+
import android.text.Editable
25+
import android.text.TextWatcher
26+
import android.util.Log
2227
import android.view.LayoutInflater
2328
import android.view.View
2429
import android.view.ViewGroup
@@ -27,6 +32,10 @@ import androidx.fragment.app.Fragment
2732
import com.google.chip.chiptool.R
2833
import com.google.chip.chiptool.databinding.ChipDeviceInfoFragmentBinding
2934
import com.google.chip.chiptool.util.FragmentUtil
35+
import java.net.URLEncoder
36+
import matter.onboardingpayload.OnboardingPayload
37+
import matter.onboardingpayload.OnboardingPayloadException
38+
import matter.onboardingpayload.QRCodeOnboardingPayloadGenerator
3039

3140
/** Show the [CHIPDeviceInfo]. */
3241
class CHIPDeviceDetailsFragment : Fragment() {
@@ -35,6 +44,8 @@ class CHIPDeviceDetailsFragment : Fragment() {
3544
private val binding
3645
get() = _binding!!
3746

47+
private lateinit var onBoardingPayload: OnboardingPayload
48+
3849
override fun onCreateView(
3950
inflater: LayoutInflater,
4051
container: ViewGroup?,
@@ -43,17 +54,13 @@ class CHIPDeviceDetailsFragment : Fragment() {
4354
_binding = ChipDeviceInfoFragmentBinding.inflate(inflater, container, false)
4455
deviceInfo = checkNotNull(requireArguments().getParcelable(ARG_DEVICE_INFO))
4556

46-
binding.versionTv.text = "${deviceInfo.version}"
47-
binding.vendorIdTv.text = "${deviceInfo.vendorId}"
48-
binding.productIdTv.text = "${deviceInfo.productId}"
49-
binding.setupCodeTv.text = "${deviceInfo.setupPinCode}"
50-
binding.discriminatorTv.text = "${deviceInfo.discriminator}"
51-
binding.discoveryCapabilitiesTv.text =
52-
requireContext()
53-
.getString(
54-
R.string.chip_device_info_discovery_capabilities_text,
55-
deviceInfo.discoveryCapabilities
56-
)
57+
binding.versionEd.setText(deviceInfo.version.toString())
58+
binding.vendorIdEd.setText(deviceInfo.vendorId.toString())
59+
binding.productIdEd.setText(deviceInfo.productId.toString())
60+
binding.setupCodeEd.setText(deviceInfo.setupPinCode.toString())
61+
binding.discriminatorEd.setText(deviceInfo.discriminator.toString())
62+
binding.serialNumberEd.setText(deviceInfo.serialNumber)
63+
binding.discoveryCapabilitiesTv.text = "${deviceInfo.discoveryCapabilities}"
5764

5865
if (deviceInfo.optionalQrCodeInfoMap.isEmpty()) {
5966
binding.vendorTagsLabelTv.visibility = View.GONE
@@ -70,7 +77,7 @@ class CHIPDeviceDetailsFragment : Fragment() {
7077
}
7178
}
7279

73-
binding.commissioningFlowTv.text = "${deviceInfo.commissioningFlow}"
80+
binding.commissioningFlowEd.setText(deviceInfo.commissioningFlow.toString())
7481

7582
// commissioningFlow = 2 (Custom), read device info from Ledger
7683
if (deviceInfo.commissioningFlow == 2) {
@@ -81,9 +88,74 @@ class CHIPDeviceDetailsFragment : Fragment() {
8188
}
8289
}
8390

91+
onBoardingPayload = deviceInfo.toSetupPayload()
92+
binding.qrCodeTv.text =
93+
QRCodeOnboardingPayloadGenerator(onBoardingPayload)
94+
.payloadBase38RepresentationWithAutoTLVBuffer()
95+
96+
setDiscoveryCapabilitiesEditTextListener()
97+
setQRCodeButtonListener()
98+
8499
return binding.root
85100
}
86101

102+
private fun setDiscoveryCapabilitiesEditTextListener() {
103+
binding.discoveryCapabilitiesEd.setText(onBoardingPayload.getRendezvousInformation().toString())
104+
binding.discoveryCapabilitiesEd.addTextChangedListener(
105+
object : TextWatcher {
106+
override fun onTextChanged(value: CharSequence?, p1: Int, p2: Int, p3: Int) {
107+
if (value.isNullOrEmpty()) {
108+
return
109+
}
110+
onBoardingPayload.setRendezvousInformation(value.toString().toLong())
111+
binding.discoveryCapabilitiesTv.text = "${onBoardingPayload.discoveryCapabilities}"
112+
}
113+
114+
override fun afterTextChanged(p0: Editable?) {
115+
// no_op
116+
}
117+
118+
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
119+
// no_op
120+
}
121+
}
122+
)
123+
}
124+
125+
private fun setQRCodeButtonListener() {
126+
binding.showQRCodeBtn.setOnClickListener {
127+
onBoardingPayload.apply {
128+
version = binding.versionEd.text.toString().toInt()
129+
vendorId = binding.vendorIdEd.text.toString().toInt()
130+
productId = binding.productIdEd.text.toString().toInt()
131+
commissioningFlow = binding.commissioningFlowEd.text.toString().toInt()
132+
setupPinCode = binding.setupCodeEd.text.toString().toLong()
133+
discriminator = binding.discriminatorEd.text.toString().toInt()
134+
val serialNumber = binding.serialNumberEd.text.toString()
135+
try {
136+
removeSerialNumber()
137+
} catch (e: OnboardingPayloadException) {
138+
Log.d(TAG, "Serial Number not set!", e)
139+
}
140+
if (serialNumber.isNotEmpty()) {
141+
addSerialNumber(binding.serialNumberEd.text.toString())
142+
}
143+
}
144+
val qrCode =
145+
QRCodeOnboardingPayloadGenerator(onBoardingPayload)
146+
.payloadBase38RepresentationWithAutoTLVBuffer()
147+
Log.d(TAG, "QR Code : $qrCode")
148+
binding.qrCodeTv.text = qrCode
149+
}
150+
151+
binding.showQRCodeUriBtn.setOnClickListener {
152+
val qrCodeEncode = URLEncoder.encode(binding.qrCodeTv.text.toString(), "UTF-8")
153+
val qrCodeUri = getString(R.string.chip_device_info_qrcode_uri, qrCodeEncode)
154+
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(qrCodeUri))
155+
startActivity(intent)
156+
}
157+
}
158+
87159
override fun onDestroyView() {
88160
super.onDestroyView()
89161
_binding = null
@@ -96,6 +168,7 @@ class CHIPDeviceDetailsFragment : Fragment() {
96168
}
97169

98170
companion object {
171+
private const val TAG = "CHIPDeviceDetailsFragment"
99172
private const val ARG_DEVICE_INFO = "device_info"
100173

101174
@JvmStatic

examples/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/setuppayloadscanner/CHIPDeviceInfo.kt

+32-1
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
package com.google.chip.chiptool.setuppayloadscanner
2020

2121
import android.os.Parcelable
22+
import android.util.Log
2223
import kotlinx.parcelize.Parcelize
2324
import matter.onboardingpayload.DiscoveryCapability
2425
import matter.onboardingpayload.OnboardingPayload
26+
import matter.onboardingpayload.OnboardingPayloadException
2527

2628
/** Class to hold the CHIP device information. */
2729
@Parcelize
@@ -35,12 +37,40 @@ data class CHIPDeviceInfo(
3537
val optionalQrCodeInfoMap: Map<Int, QrCodeInfo> = mapOf(),
3638
val discoveryCapabilities: MutableSet<DiscoveryCapability> = mutableSetOf(),
3739
val isShortDiscriminator: Boolean = false,
40+
val serialNumber: String = "",
3841
val ipAddress: String? = null,
3942
val port: Int = 5540
4043
) : Parcelable {
4144

45+
fun toSetupPayload(): OnboardingPayload {
46+
val onboardingPayload =
47+
OnboardingPayload(
48+
version,
49+
vendorId,
50+
productId,
51+
commissioningFlow,
52+
discoveryCapabilities,
53+
discriminator,
54+
isShortDiscriminator,
55+
setupPinCode
56+
)
57+
if (serialNumber.isNotEmpty()) {
58+
onboardingPayload.addSerialNumber(serialNumber)
59+
}
60+
return onboardingPayload
61+
}
62+
4263
companion object {
64+
private const val TAG = "CHIPDeviceInfo"
65+
4366
fun fromSetupPayload(setupPayload: OnboardingPayload): CHIPDeviceInfo {
67+
val serialNumber =
68+
try {
69+
setupPayload.getSerialNumber()
70+
} catch (e: OnboardingPayloadException) {
71+
Log.d(TAG, "serialNumber Exception", e)
72+
""
73+
}
4474
return CHIPDeviceInfo(
4575
setupPayload.version,
4676
setupPayload.vendorId,
@@ -52,7 +82,8 @@ data class CHIPDeviceInfo(
5282
QrCodeInfo(info.tag, info.type, info.data, info.int32)
5383
},
5484
setupPayload.discoveryCapabilities,
55-
setupPayload.hasShortDiscriminator
85+
setupPayload.hasShortDiscriminator,
86+
serialNumber
5687
)
5788
}
5889
}

0 commit comments

Comments
 (0)