blob: 8d14e2ca41034314d46e5c7e469d45bca189f247 [file] [log] [blame]
/*
* Copyright (c) 2020 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.google.chip.chiptool.setuppayloadscanner
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import com.google.chip.chiptool.R
import com.google.chip.chiptool.databinding.ChipDeviceInfoFragmentBinding
import com.google.chip.chiptool.util.FragmentUtil
/** Show the [CHIPDeviceInfo]. */
class CHIPDeviceDetailsFragment : Fragment() {
private lateinit var deviceInfo: CHIPDeviceInfo
private var _binding: ChipDeviceInfoFragmentBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = ChipDeviceInfoFragmentBinding.inflate(inflater, container, false)
deviceInfo = checkNotNull(requireArguments().getParcelable(ARG_DEVICE_INFO))
binding.versionTv.text = "${deviceInfo.version}"
binding.vendorIdTv.text = "${deviceInfo.vendorId}"
binding.productIdTv.text = "${deviceInfo.productId}"
binding.setupCodeTv.text = "${deviceInfo.setupPinCode}"
binding.discriminatorTv.text = "${deviceInfo.discriminator}"
binding.discoveryCapabilitiesTv.text = requireContext().getString(
R.string.chip_device_info_discovery_capabilities_text,
deviceInfo.discoveryCapabilities
)
if (deviceInfo.optionalQrCodeInfoMap.isEmpty()) {
binding.vendorTagsLabelTv.visibility = View.GONE
binding.vendorTagsContainer.visibility = View.GONE
} else {
binding.vendorTagsLabelTv.visibility = View.VISIBLE
binding.vendorTagsContainer.visibility = View.VISIBLE
deviceInfo.optionalQrCodeInfoMap.forEach { (_, qrCodeInfo) ->
val tv = inflater.inflate(R.layout.barcode_vendor_tag, null, false) as TextView
val info = "${qrCodeInfo.tag}. ${qrCodeInfo.data}, ${qrCodeInfo.intDataValue}"
tv.text = info
binding.vendorTagsContainer.addView(tv)
}
}
binding.commissioningFlowTv.text = "${deviceInfo.commissioningFlow}"
// commissioningFlow = 2 (Custom), read device info from Ledger
if (deviceInfo.commissioningFlow == 2) {
binding.customFlowBtn.visibility = View.VISIBLE
binding.customFlowBtn.setOnClickListener {
FragmentUtil.getHost(this@CHIPDeviceDetailsFragment, Callback::class.java)
?.handleReadFromLedgerClicked(deviceInfo)
}
}
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
/** Interface for notifying the host. */
interface Callback {
/** Notifies listener of Read Device Info from Ledger button click. */
fun handleReadFromLedgerClicked(deviceInfo: CHIPDeviceInfo)
}
companion object {
private const val ARG_DEVICE_INFO = "device_info"
@JvmStatic
fun newInstance(deviceInfo: CHIPDeviceInfo): CHIPDeviceDetailsFragment {
return CHIPDeviceDetailsFragment().apply {
arguments = Bundle(1).apply { putParcelable(ARG_DEVICE_INFO, deviceInfo) }
}
}
}
}