Start parsing URIs.
Initially just do a placeholder implementation for a more full parsing through librustzcash.
This commit is contained in:
parent
dfc6838bdf
commit
3bf1ed1415
|
@ -122,13 +122,14 @@ class ScanFragment : BaseFragment<FragmentScanBinding>() {
|
|||
|
||||
private fun onQrScanned(qrContent: String, image: ImageProxy) {
|
||||
resumedScope.launch {
|
||||
if (viewModel.isNotValid(qrContent)) {
|
||||
val parsed = viewModel.parse(qrContent)
|
||||
if (parsed == null) {
|
||||
val network = ZcashSdk.NETWORK
|
||||
binding.textScanError.text = getString(R.string.scan_invalid_address, network, qrContent)
|
||||
image.close()
|
||||
} else { /* continue scanning*/
|
||||
binding.textScanError.text = ""
|
||||
sendViewModel.toAddress = qrContent
|
||||
sendViewModel.toAddress = parsed
|
||||
mainActivity?.safeNavigate(R.id.action_nav_scan_to_nav_send)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,16 @@ class ScanViewModel @Inject constructor() : ViewModel() {
|
|||
@Inject
|
||||
lateinit var synchronizer: Synchronizer
|
||||
|
||||
suspend fun isNotValid(address: String) = synchronizer.validateAddress(address).isNotValid
|
||||
suspend fun parse(qrCode: String): String? {
|
||||
//temporary parse code to allow both plain addresses and those that start with zcash:
|
||||
// TODO: replace with more robust ZIP-321 handling of QR codes
|
||||
val address = if (qrCode.startsWith("zcash:")) {
|
||||
qrCode.substring(6, qrCode.indexOf("?").takeUnless { it == -1 } ?: qrCode.length)
|
||||
} else {
|
||||
qrCode
|
||||
}
|
||||
return if (synchronizer.validateAddress(address).isNotValid) null else address
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
|
|
Loading…
Reference in New Issue