diff --git a/app/src/main/java/com/futo/platformplayer/activities/AddSourceActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/AddSourceActivity.kt index fd12528eb33651d10b94fe935279c5903d2675fe..620df73fcc323f5864a1fe968abdca5d3a438ed2 100644 --- a/app/src/main/java/com/futo/platformplayer/activities/AddSourceActivity.kt +++ b/app/src/main/java/com/futo/platformplayer/activities/AddSourceActivity.kt @@ -75,10 +75,10 @@ class AddSourceActivity : AppCompatActivity() { _buttonInstall = findViewById(R.id.button_install); _buttonBack.setOnClickListener { - onBackPressed(); + finish(); }; _buttonCancel.setOnClickListener { - onBackPressed(); + finish(); } _buttonInstall.setOnClickListener { _config?.let { diff --git a/app/src/main/java/com/futo/platformplayer/activities/AddSourceOptionsActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/AddSourceOptionsActivity.kt index da4a563ba948408ca2ff22522037e45730b95a26..e34916e4ea2727c38ab982ec59d4af91c55fc243 100644 --- a/app/src/main/java/com/futo/platformplayer/activities/AddSourceOptionsActivity.kt +++ b/app/src/main/java/com/futo/platformplayer/activities/AddSourceOptionsActivity.kt @@ -1,7 +1,10 @@ package com.futo.platformplayer.activities +import android.content.Intent +import android.net.Uri import android.os.Bundle import android.widget.* +import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import com.futo.platformplayer.* import com.futo.platformplayer.views.buttons.BigButton @@ -14,6 +17,31 @@ class AddSourceOptionsActivity : AppCompatActivity() { lateinit var _buttonQR: BigButton; lateinit var _buttonURL: BigButton; + private val _qrCodeResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + val scanResult = IntentIntegrator.parseActivityResult(result.resultCode, result.data) + scanResult?.let { + val content = it.contents + if (content == null) { + UIDialogs.toast(this, "Failed to scan QR code") + return@let + } + + val url = if (content.startsWith("https://")) { + content + } else if (content.startsWith("grayjay://plugin/")) { + content.substring("grayjay://plugin/".length) + } else { + UIDialogs.toast(this, "Not a plugin URL") + return@let; + } + + val intent = Intent(this, AddSourceActivity::class.java).apply { + data = Uri.parse(url); + }; + startActivity(intent); + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_source_options); @@ -37,8 +65,9 @@ class AddSourceOptionsActivity : AppCompatActivity() { integrator.setBeepEnabled(false) integrator.setBarcodeImageEnabled(true) integrator.setCaptureActivity(QRCaptureActivity::class.java); - integrator.initiateScan() + _qrCodeResultLauncher.launch(integrator.createScanIntent()) } + _buttonURL.onClick.subscribe { UIDialogs.toast(this, "Not implemented yet.."); } diff --git a/app/src/main/java/com/futo/platformplayer/activities/PolycentricImportProfileActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/PolycentricImportProfileActivity.kt index 2a92cbf13e056d947a5a70db83ea6a21dfb53fa9..68ec760912f3c4e7ba9a8ecec973897033ab2c40 100644 --- a/app/src/main/java/com/futo/platformplayer/activities/PolycentricImportProfileActivity.kt +++ b/app/src/main/java/com/futo/platformplayer/activities/PolycentricImportProfileActivity.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.widget.EditText import android.widget.ImageButton import android.widget.LinearLayout +import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.futo.platformplayer.R @@ -14,6 +15,7 @@ import com.futo.platformplayer.setNavigationBarColorAndIcons import com.futo.platformplayer.states.StatePolycentric import com.futo.polycentric.core.* import com.google.zxing.integration.android.IntentIntegrator +import com.journeyapps.barcodescanner.CaptureActivity import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -27,6 +29,16 @@ class PolycentricImportProfileActivity : AppCompatActivity() { private lateinit var _buttonImportProfile: LinearLayout; private lateinit var _editProfile: EditText; + private val _qrCodeResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + val scanResult = IntentIntegrator.parseActivityResult(result.resultCode, result.data) + scanResult?.let { + if (it.contents != null) { + val scannedUrl = it.contents + import(scannedUrl) + } + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_polycentric_import_profile); @@ -45,10 +57,15 @@ class PolycentricImportProfileActivity : AppCompatActivity() { }; _buttonScanProfile.setOnClickListener { - val integrator = IntentIntegrator(this); - integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE); - integrator.setPrompt("Scan a QR code"); - integrator.initiateScan(); + val integrator = IntentIntegrator(this) + integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE) + integrator.setPrompt("Scan a QR code") + integrator.setOrientationLocked(true); + integrator.setCameraId(0) + integrator.setBeepEnabled(false) + integrator.setBarcodeImageEnabled(true) + integrator.setCaptureActivity(QRCaptureActivity::class.java); + _qrCodeResultLauncher.launch(integrator.createScanIntent()) }; _buttonImportProfile.setOnClickListener { @@ -66,18 +83,6 @@ class PolycentricImportProfileActivity : AppCompatActivity() { } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data) - if (result != null) { - if (result.contents != null) { - val scannedUrl = result.contents; - import(scannedUrl); - } - } else { - super.onActivityResult(requestCode, resultCode, data) - } - } - private fun import(url: String) { if (!url.startsWith("polycentric://")) { UIDialogs.toast(this, "Not a valid URL"); @@ -126,4 +131,8 @@ class PolycentricImportProfileActivity : AppCompatActivity() { companion object { private const val TAG = "PolycentricImportProfileActivity"; } + + class QRCaptureActivity: CaptureActivity() { + + } } \ No newline at end of file