From 9e019440d4523376206ffbc2cca7583c7dcb2205 Mon Sep 17 00:00:00 2001 From: rapterjet2004 Date: Tue, 15 Jul 2025 11:52:38 -0500 Subject: [PATCH] - aligned qr dependency w/ files app - aligned qr image with files - Exiting qr directs back to ServerSelectionActivity Signed-off-by: rapterjet2004 --- app/build.gradle | 2 +- .../talk/account/BrowserLoginActivity.kt | 34 ++--------- .../talk/account/ServerSelectionActivity.kt | 36 ++++++++++-- .../res/layout/activity_server_selection.xml | 16 +++--- gradle/verification-keyring.keys | 56 +++++++++++++++++++ gradle/verification-metadata.xml | 9 +++ 6 files changed, 110 insertions(+), 43 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 91c5cf6ca..4febeaf5e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -210,7 +210,7 @@ dependencies { exclude group: 'org.ogce', module: 'xpp3' // Android comes with its own XmlPullParser }) implementation 'org.conscrypt:conscrypt-android:2.5.3' - implementation 'com.github.blikoon:QRCodeScanner:0.1.2' + implementation "com.github.nextcloud-deps:qrcodescanner:0.1.2.4" // "com.github.blikoon:QRCodeScanner:0.1.2" implementation "androidx.camera:camera-core:${androidxCameraVersion}" implementation "androidx.camera:camera-camera2:${androidxCameraVersion}" diff --git a/app/src/main/java/com/nextcloud/talk/account/BrowserLoginActivity.kt b/app/src/main/java/com/nextcloud/talk/account/BrowserLoginActivity.kt index 297ae0c71..f35607f20 100644 --- a/app/src/main/java/com/nextcloud/talk/account/BrowserLoginActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/account/BrowserLoginActivity.kt @@ -16,7 +16,6 @@ import android.os.Bundle import android.text.TextUtils import android.util.Log import androidx.activity.OnBackPressedCallback -import androidx.activity.result.contract.ActivityResultContracts import androidx.core.net.toUri import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver @@ -24,7 +23,6 @@ import androidx.work.OneTimeWorkRequest import androidx.work.WorkInfo import androidx.work.WorkManager import autodagger.AutoInjector -import com.blikoon.qrcodescanner.QrCodeActivity import com.google.android.material.snackbar.Snackbar import com.google.gson.JsonParser import com.nextcloud.talk.R @@ -133,8 +131,12 @@ class BrowserLoginActivity : BaseActivity() { } if (extras.containsKey(BundleKeys.KEY_FROM_QR)) { - val intent = Intent(this, QrCodeActivity::class.java) - qrScanResultLauncher.launch(intent) + val resultData = extras.getString(BundleKeys.KEY_FROM_QR) + try { + parseLoginDataUrl(resultData!!) + } catch (e: IllegalArgumentException) { + Log.e(TAG, "Error in scanning QR Code: $e") + } } else { anonymouslyPostLoginRequest() } @@ -150,30 +152,6 @@ class BrowserLoginActivity : BaseActivity() { } } - private val qrScanResultLauncher = - registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> - if (result.resultCode == RESULT_OK) { - val data = result.data - - if (data == null) { - return@registerForActivityResult - } - - val resultData = data.getStringExtra("com.blikoon.qrcodescanner.got_qr_scan_relult") - - if (resultData == null || !resultData.startsWith("nc")) { - Snackbar.make(binding.root, getString(R.string.qr_code_error), Snackbar.LENGTH_SHORT).show() - return@registerForActivityResult - } - - try { - parseLoginDataUrl(resultData) - } catch (e: IllegalArgumentException) { - Log.e(TAG, "Error in scanning QR Code: $e") - } - } - } - private fun anonymouslyPostLoginRequest() { CoroutineScope(Dispatchers.IO).launch { val url = "$baseUrl/index.php/login/v2" diff --git a/app/src/main/java/com/nextcloud/talk/account/ServerSelectionActivity.kt b/app/src/main/java/com/nextcloud/talk/account/ServerSelectionActivity.kt index 85006255e..f015b3926 100644 --- a/app/src/main/java/com/nextcloud/talk/account/ServerSelectionActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/account/ServerSelectionActivity.kt @@ -26,7 +26,9 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.core.net.toUri import androidx.core.os.bundleOf import autodagger.AutoInjector +import com.blikoon.qrcodescanner.QrCodeActivity import com.github.dhaval2404.imagepicker.util.PermissionUtil +import com.google.android.material.snackbar.Snackbar import com.nextcloud.talk.R import com.nextcloud.talk.activities.BaseActivity import com.nextcloud.talk.api.NcApi @@ -413,14 +415,35 @@ class ServerSelectionActivity : BaseActivity() { } private fun startQRScanner() { - val intent = Intent(this, BrowserLoginActivity::class.java) - val bundle = bundleOf().apply { - putBoolean(BundleKeys.KEY_FROM_QR, true) - } - intent.putExtras(bundle) - startActivity(intent) + val intent = Intent(this, QrCodeActivity::class.java) + qrScanResultLauncher.launch(intent) } + private val qrScanResultLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == RESULT_OK) { + val data = result.data + + if (data == null) { + return@registerForActivityResult + } + + val resultData = data.getStringExtra(QR_URI) + + if (resultData == null || !resultData.startsWith("nc")) { + Snackbar.make(binding.root, getString(R.string.qr_code_error), Snackbar.LENGTH_SHORT).show() + return@registerForActivityResult + } + + val intent = Intent(this, BrowserLoginActivity::class.java) + val bundle = bundleOf().apply { + putString(BundleKeys.KEY_FROM_QR, resultData) + } + intent.putExtras(bundle) + startActivity(intent) + } + } + public override fun onDestroy() { super.onDestroy() dispose() @@ -439,5 +462,6 @@ class ServerSelectionActivity : BaseActivity() { companion object { private val TAG = ServerSelectionActivity::class.java.simpleName const val MIN_SERVER_MAJOR_VERSION = 13 + private const val QR_URI = "com.blikoon.qrcodescanner.got_qr_scan_relult" } } diff --git a/app/src/main/res/layout/activity_server_selection.xml b/app/src/main/res/layout/activity_server_selection.xml index 41d76fb2c..f32a0c85f 100644 --- a/app/src/main/res/layout/activity_server_selection.xml +++ b/app/src/main/res/layout/activity_server_selection.xml @@ -152,15 +152,15 @@ tools:text="@string/nc_server_unsupported" /> - + android:layout_width="@dimen/avatar_size" + android:layout_height="@dimen/avatar_size" + android:scaleType="fitXY" + android:background="@color/transparent" + android:contentDescription="@string/scan_qr_code" + android:src="@drawable/outline_qr_code_24" + app:tint="@color/white" /> + +sub 811B3B85BC31841F +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFHW7ksBCADGzo3LGVyWpBWqxRQlGhpQ9YNav7jiR5WSLnatr8chZx+ldy5j +KquO7GHO0qaHGXyc/CKeKH9Eey0mH4EcvOvEhBOE27Fnuw2NppxQjxXyhYTfvr6q +CHGN+lTORVC3zD6UkMm2R92zNI+ZGWqK2zND5/RZQMW4JNH/Y4ZA6t+fm+dHm/Q5 +Mn/2XEnMnDiuJGnIwb6+sgH4GHdXkzGl+/grayerAp52HWGmKo3TWWtxdZQcdZe7 +spaLlVJEfw5K7uwpR0JDwSHtak7gfs613n1VuQeT9ZA/CnBk0L1JkkSezPO0NFxL +ONjrQA6zBA6apJsdDQYgg55xtFaAWUfBAV37ABEBAAG0JFNlYW4gT3dlbiAoWlhp +bmcpIDxzcm93ZW5AZ21haWwuY29tPrkBDQRR1u5LAQgArA+334bZKR9IOvArfF6T +Yo1gx1wQjiFrbl3rcNrkADzu9/h5PbvkLma1zTSYUo5VZPIn0HbX+GctInY9AkjG +sc3OrBmPi2FI/KOUXnMCmd1ShyphdB5CJjG2VpR4ejG/I1YyMQ2ABWGes1IQJNPs +Hf1PXkJ2NA1gCxD+oAT9RgdXZBolln+TL3sYV4Z0EWhEL+yPjxInvFpabZErssim +tRRrfSuT/wczrLt46zTgmtEKJ7udp6kzC3Nmut6IozlBr5qcEOTdiH6+BxgvW4hH +uqANx4PzVWCCqwTxuiME/Q5kr45tgawSSoIsMAZaPGqeNluXap9qEsXPd3SsZUfg +IQARAQABiQEfBBgBCgAJBQJR1u5LAhsMAAoJEPbOlpXJMYQGP2AH/jkwFM70jQCz +uyMJNX4uHlmP37TNq8n2WxCNb5rQrXJ7UQ/3FSOiF86PRhOYAJHz0aEKWjQG+gr2 +aXc1HZr9g3AB5dLVxJ27SNgrV7Bvw1fI8NvYp+XyDodbQzyjavuslkf6BrQ9CSer +R3WahwNtscMXYCi08f9dB1hooKmjkqgHGE+WHvs5zxtVnmdQ9Oaeu7IYYkhSAFA1 +Pdb2T90L+0xno4kCXaN7Mlw2ffxV53eLDq3fCoO4wkmVdjHjNc6Cq2qa7ntPo1wS +BEhqoEjsNLqVXYq/cm7h+X5AwuLgkYCqA/TOjClEe8C/rVLVj9++Qw2lgbiUC6ry +lkXgEU5D+DY= +=6M1h +-----END PGP PUBLIC KEY BLOCK----- + pub F6D4A1D411E9D1AE uid Christopher Povirk @@ -5092,6 +5120,34 @@ vzqZL9WH1qfOB26bczhzqYBdpE3HRRqvOaFo2o7Rm9biGIJ/QqTk9C0xcI1/5BNv =tT4f -----END PGP PUBLIC KEY BLOCK----- +pub 479D601F3A7B5C1A +uid AJ Alt + +sub 868FF6CCEF26A83C +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBF5CDMYBCADC1/aWU6ZbGZEphRbmjUPNfqh3N5goSnDCou97mmQ9Uq8iBuKS +UXJnGSOHudXK56f+Drx5lGZdLAzveZdqaqb1o3yLFO3PJxwj3Ulhab3O3uTG2eR0 +2Xo7GKjRW13kEfphJrfVIaQq/TiyIG8IQ1dbm9Vuzc5NLDIeC4jxYD2S3hUqCLGQ +BiZAEH9un2cPax+hiT+9MGzdfQwdVrSQ9aEA9mtMhEGsk80XtxXJnd+hw2va6l5s +lSErmH5nMtyKh/n9uo/ap1CfPl98n5VUI8dDtUfWVrqRrkyHgdX+MII0t0nABV5X +rJLneg4dVy5Yw/+FVbLWB1Ta21reyytcIYQXABEBAAG0J0FKIEFsdCA8YWphbHRA +dXNlcnMubm9yZXBseS5naXRodWIuY29tPrkBDQReQgzGAQgA1oQHEM6wP40xPfpa +YBBRAWVoEj/CbAV6BooApSqQkV0cocM9wK905az2FmlKn4WTZyNwiA2eHjHlevsI +jKuHJWhSDVhulcKDi0cD6wTcjctcDWm7M3tvaICbieZQXPH7lju5Ct80kBo5ojdJ +oXGD72kVhSuiF8vOrAOiLOXP8+bpCpY4+LZ4qt3XjSnrkZq+h/vcy9crwuzuFlSL +wMRltOvfirrK/CSQZZtqG2PbT30CWFQ61DLo4DkXeNG1fKpnOaDAMaCedt+pNCAQ +1Vdzy1vT9b85LtOH/CmhumjM3S6x/VWwWZVBXi2xVLFCkm3LlWioSvVs6Na0Vvaq +0WDsbwARAQABiQE2BBgBCAAgFiEEA8EjA4wgqunihshXR51gHzp7XBoFAl5CDMYC +GwwACgkQR51gHzp7XBpoYQgAjnYuxyXaFSbCc2EFWDrBA8+OnlbSgJ3etaIOoLQH ++Czv6+wLYc9snZDBm+IvbzEi3tXfi1TKcRI5ii9wDkti0KcVFrR2tpuXDLWYIF92 +cSC7VyBiyT/aZpm0zX8qP8tjRZvy7mewbnoit1R6ea5UifSLvO0bHqNoswfgv90s +rnuUYMY8tv1sSo4j0f0zre/k4QT8sCTeMDsLsviMIvy1Wls1IPRo1SW1euGGGvCo +bxgke8Dw5QgumudwPqehOZVOkIbuddgcur55ZFFeitMOqdRoXkrGod9v6hYY1Jz8 +W/Y2tzZmWsedFIc4ahuAeZG6cH6Ac8prHrQEz6lSbZ0flg== +=td3S +-----END PGP PUBLIC KEY BLOCK----- + pub 4B1E11D5A4B91E89 uid Adam Cozzette diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index fbe238c2e..7589cd678 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -301,6 +301,7 @@ + @@ -11963,6 +11964,14 @@ + + + + + + + +