diff --git a/.idea/misc.xml b/.idea/misc.xml index 21b4ba2..67135cd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,11 +3,13 @@ diff --git a/app/build.gradle b/app/build.gradle index e6264f9..996e927 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,6 +44,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation "androidx.cardview:cardview:1.0.0" + implementation 'com.journeyapps:zxing-android-embedded:4.3.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e0fdf2..41a7fe6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,6 +26,11 @@ + + \ No newline at end of file diff --git a/app/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt b/app/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt index f3cc663..5db931f 100644 --- a/app/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt +++ b/app/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt @@ -2,17 +2,17 @@ package im.angry.openeuicc.ui import android.app.Dialog import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.Window +import android.view.* +import androidx.appcompat.widget.Toolbar import androidx.fragment.app.DialogFragment +import com.journeyapps.barcodescanner.ScanContract +import com.journeyapps.barcodescanner.ScanOptions import im.angry.openeuicc.R import im.angry.openeuicc.core.EuiccChannel import im.angry.openeuicc.databinding.FragmentProfileDownloadBinding import im.angry.openeuicc.util.setWidthPercent -class ProfileDownloadFragment(val channel: EuiccChannel) : DialogFragment() { +class ProfileDownloadFragment(val channel: EuiccChannel) : DialogFragment(), Toolbar.OnMenuItemClickListener { companion object { const val TAG = "ProfileDownloadFragment" } @@ -20,12 +20,22 @@ class ProfileDownloadFragment(val channel: EuiccChannel) : DialogFragment() { private var _binding: FragmentProfileDownloadBinding? = null private val binding get() = _binding!! + private val barcodeScannerLauncher = registerForActivityResult(ScanContract()) { result -> + result.contents?.let { content -> + val components = content.split("$") + if (components.size != 3 || components[0] != "LPA:1") return@registerForActivityResult + binding.profileDownloadServer.editText?.setText(components[1]) + binding.profileDownloadCode.editText?.setText(components[2]) + } + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentProfileDownloadBinding.inflate(inflater, container, false) + binding.toolbar.inflateMenu(R.menu.fragment_profile_download) return binding.root } @@ -36,9 +46,22 @@ class ProfileDownloadFragment(val channel: EuiccChannel) : DialogFragment() { setNavigationOnClickListener { dismiss() } + setOnMenuItemClickListener(this@ProfileDownloadFragment) } } + override fun onMenuItemClick(item: MenuItem): Boolean = + when (item.itemId) { + R.id.scan -> { + barcodeScannerLauncher.launch(ScanOptions().apply { + setDesiredBarcodeFormats(ScanOptions.QR_CODE) + setOrientationLocked(false) + }) + true + } + else -> false + } + override fun onResume() { super.onResume() setWidthPercent(95) diff --git a/app/src/main/res/drawable/ic_scan_black.xml b/app/src/main/res/drawable/ic_scan_black.xml new file mode 100644 index 0000000..597e8d7 --- /dev/null +++ b/app/src/main/res/drawable/ic_scan_black.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/menu/fragment_profile_download.xml b/app/src/main/res/menu/fragment_profile_download.xml new file mode 100644 index 0000000..6f52963 --- /dev/null +++ b/app/src/main/res/menu/fragment_profile_download.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3d9e417..0c6c866 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,4 +11,5 @@ New eSIM Server (RSP / SM-DP+) Activation Code + Scan QR Code \ No newline at end of file