srctree

Robin Linden parent cb18f04d bf24edc2
Replace embedded QR scanner with calling into an external app

The embedded QR scanner was pinned to an old version due to support forAndroid 4.4 being dropped in later versions. jcenter is going away, andthe replacement, mavencentral, doesn't have this ancient version of theembedded scanner.

inlinesplit
atox/build.gradle.kts added: 25, removed: 24, total 1
@@ -82,8 +82,6 @@ dependencies {
 
implementation(Square.picasso)
 
implementation(JourneyApps.zxing)
 
debugImplementation(Square.leakcanary)
 
testImplementation(Test.junit)
 
atox/src/main/AndroidManifest.xml added: 25, removed: 24, total 1
@@ -51,9 +51,5 @@
<data android:scheme="tox" />
</intent-filter>
</activity>
 
<activity android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="fullSensor"
tools:replace="screenOrientation"/>
</application>
</manifest>
 
atox/src/main/kotlin/ui/addcontact/AddContactFragment.kt added: 25, removed: 24, total 1
@@ -1,7 +1,10 @@
package ltd.evilcorp.atox.ui.addcontact
 
import android.app.Activity.RESULT_OK
import android.content.ActivityNotFoundException
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.TextView
@@ -11,7 +14,6 @@ import androidx.core.view.updatePadding
import androidx.core.widget.doAfterTextChanged
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.google.zxing.integration.android.IntentIntegrator
import ltd.evilcorp.atox.R
import ltd.evilcorp.atox.databinding.FragmentAddContactBinding
import ltd.evilcorp.atox.ui.BaseFragment
@@ -20,6 +22,8 @@ import ltd.evilcorp.core.vo.Contact
import ltd.evilcorp.domain.tox.ToxID
import ltd.evilcorp.domain.tox.ToxIdValidator
 
private const val REQUEST_CODE_SCAN_QR = 6100
 
class AddContactFragment : BaseFragment<FragmentAddContactBinding>(FragmentAddContactBinding::inflate) {
private val viewModel: AddContactViewModel by viewModels { vmFactory }
 
@@ -92,10 +96,17 @@ class AddContactFragment : BaseFragment<FragmentAddContactBinding>(FragmentAddCo
 
if (requireContext().packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) {
readQr.setOnClickListener {
IntentIntegrator.forSupportFragment(this@AddContactFragment).apply {
setOrientationLocked(false)
setBeepEnabled(false)
}.initiateScan(listOf(IntentIntegrator.QR_CODE))
try {
val intent = Intent("com.google.zxing.client.android.SCAN").apply {
putExtra("SCAN_FORMATS", "QR_CODE")
putExtra("SCAN_ORIENTATION_LOCKED", false)
putExtra("BEEP_ENABLED", false)
}
startActivityForResult(intent, REQUEST_CODE_SCAN_QR)
} catch (e: ActivityNotFoundException) {
val uri = Uri.parse("https://f-droid.org/en/packages/com.google.zxing.client.android/")
startActivity(Intent(Intent.ACTION_VIEW, uri))
}
}
} else {
readQr.visibility = View.GONE
@@ -106,8 +117,9 @@ class AddContactFragment : BaseFragment<FragmentAddContactBinding>(FragmentAddCo
toxId.setText(arguments?.getString("toxId"), TextView.BufferType.EDITABLE)
}
 
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) =
IntentIntegrator.parseActivityResult(requestCode, resultCode, data)?.contents?.let {
binding.toxId.setText(it.removePrefix("tox:"))
} ?: super.onActivityResult(requestCode, resultCode, data)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode != REQUEST_CODE_SCAN_QR || resultCode != RESULT_OK) return
val toxId = data?.getStringExtra("SCAN_RESULT") ?: return
binding.toxId.setText(toxId.removePrefix("tox:"))
}
}
 
buildSrc/src/main/kotlin/Dependencies.kt added: 25, removed: 24, total 1
@@ -108,11 +108,6 @@ object Google {
}
}
 
object JourneyApps {
// 3.6.0 is the last version before API 24 was required.
const val zxing = "com.journeyapps:zxing-android-embedded:3.6.0"
}
 
object Square {
const val picasso = "com.squareup.picasso:picasso:2.8"
const val leakcanary = "com.squareup.leakcanary:leakcanary-android:2.6"