- aligned qr dependency w/ files app

- aligned qr image with files
- Exiting qr directs back to ServerSelectionActivity

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
rapterjet2004 2025-07-15 11:52:38 -05:00
parent 1918349c93
commit 9e019440d4
No known key found for this signature in database
GPG Key ID: 3AA5FDFED7944099
6 changed files with 110 additions and 43 deletions

View File

@ -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}"

View File

@ -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"

View File

@ -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"
}
}

View File

@ -152,15 +152,15 @@
tools:text="@string/nc_server_unsupported" />
</LinearLayout>
<com.google.android.material.button.MaterialButton
<ImageButton
android:id="@+id/scan_Qr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:iconTint="@color/white"
android:textColor="@color/white"
android:theme="@style/Widget.Material3.Button.TextButton.Icon"
app:icon="@drawable/outline_qr_code_24"
android:text="@string/scan_qr_code"/>
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" />
<TextView
android:id="@+id/import_or_choose_provider_text"

View File

@ -2838,6 +2838,34 @@ IQkQ9C6H+WZQFckWIQTzGEvNVfTQFuMNTJv0Lof5ZlAVyX7PAJ9ztvyEP04cy6zP
=dtK1
-----END PGP PUBLIC KEY BLOCK-----
pub F6CE9695C9318406
uid Sean Owen (ZXing) <srowen@gmail.com>
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 <cpovirk@google.com>
@ -5092,6 +5120,34 @@ vzqZL9WH1qfOB26bczhzqYBdpE3HRRqvOaFo2o7Rm9biGIJ/QqTk9C0xcI1/5BNv
=tT4f
-----END PGP PUBLIC KEY BLOCK-----
pub 479D601F3A7B5C1A
uid AJ Alt <ajalt@users.noreply.github.com>
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 <acozzette@google.com>

View File

@ -301,6 +301,7 @@
<trusted-key id="CBD134820A0E04D230AEC5D5D9B2BC72A3754BEA" group="^com[.]github[.]lukaspili($|([.].*))" regex="true"/>
<trusted-key id="CD5464315F0B98C77E6E8ECD9DAADC1C9FCC82D0" group="org.apache.commons" name="commons-lang3"/>
<trusted-key id="CE0E1BC443809579D8718F4FB943F5CB616566CD" group="de.mannodermaus.retrofit2" name="converter-logansquare" version="1.4.1"/>
<trusted-key id="CE3285F320685193D11FEA01F6CE9695C9318406" group="com.google.zxing"/>
<trusted-key id="CE8075A251547BEE249BC151A2115AE15F6B8B72" group="org.apache.commons"/>
<trusted-key id="CFC10B69382CBCF5387E51484ECE492B63E38ACF" group="com.h3xstream.findsecbugs"/>
<trusted-key id="D410F787672BA63BC2DD192B0C907617691418AE" group="org.greenrobot"/>
@ -11963,6 +11964,14 @@
<sha256 value="70693e430f2a7e166690af2eeabf5c94109e68818cc66d453b1a43ee60978ea0" origin="Generated by Gradle" reason="Artifact is not signed"/>
</artifact>
</component>
<component group="com.github.nextcloud-deps" name="qrcodescanner" version="0.1.2.4">
<artifact name="qrcodescanner-0.1.2.4.aar">
<sha256 value="b286128792cc04f59b0defa2c937c86d9e2fc824a8011b9af9eea7fd0ea84303" origin="Generated by Gradle" reason="Artifact is not signed"/>
</artifact>
<artifact name="qrcodescanner-0.1.2.4.module">
<sha256 value="fbdd13cbf3f0288a063602d0eff83572039f8e623612576da3e10a49349c60a9" origin="Generated by Gradle" reason="Artifact is not signed"/>
</artifact>
</component>
<component group="com.github.nextcloud-deps.hwsecurity" name="hwsecurity" version="4.1.0-patch2">
<artifact name="hwsecurity-4.1.0-patch2.aar">
<sha256 value="bf255cf1b0eac13cc7c1a49a02cd07ed133dfcf75b22ad1e0c74efff541937e4" origin="Generated by Gradle" reason="Artifact is not signed"/>