Skip to content

Commit

Permalink
- add NFC switch on UI to enable/disable nfc reader; (eu-digital-gree…
Browse files Browse the repository at this point in the history
  • Loading branch information
MykhailoNester committed Oct 15, 2021
1 parent 738b442 commit 093516f
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 7 deletions.
7 changes: 1 addition & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />

<application
android:name=".DgcaApplication"
Expand All @@ -26,12 +27,6 @@

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>

<activity
Expand Down
29 changes: 29 additions & 0 deletions app/src/main/java/dgca/verifier/app/android/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,12 @@

package dgca.verifier.app.android

import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.nfc.NdefMessage
import android.nfc.NfcAdapter
import android.nfc.NfcManager
import android.os.Bundle
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
Expand All @@ -39,6 +42,7 @@ import timber.log.Timber
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

private var adapter: NfcAdapter? = null
private lateinit var navHostFragment: NavHostFragment
private lateinit var navController: NavController

Expand Down Expand Up @@ -69,6 +73,31 @@ class MainActivity : AppCompatActivity() {
window.setBackgroundDrawable(ContextCompat.getDrawable(this, R.color.white))
}

fun enableNfcForegroundDispatch() {
if (adapter == null) {
val nfcManager = getSystemService(Context.NFC_SERVICE) as NfcManager
adapter = nfcManager.defaultAdapter
}

try {
val intent = Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
val nfcPendingIntent = PendingIntent.getActivity(this, 0, intent, 0)
adapter?.enableForegroundDispatch(this, nfcPendingIntent, null, null)

} catch (ex: IllegalStateException) {
Timber.e(ex, "Error enabling NFC foreground dispatch")
}
}


fun disableNfcForegroundDispatch() {
try {
adapter?.disableForegroundDispatch(this)
} catch (ex: IllegalStateException) {
Timber.e(ex, "Error disabling NFC foreground dispatch")
}
}

private fun checkNdefMessage(intent: Intent) {
if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) {
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,18 +160,33 @@ class CodeReaderFragment : BindingFragment<FragmentCodeReaderBinding>(), NavCont
binding.countrySelector.setSelection(position)
}
}

binding.nfcSwitch.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
enableNFC()
} else {
enableCamera()
}
}
}

override fun onResume() {
super.onResume()
findNavController().addOnDestinationChangedListener(this)
lastText = ""

if (binding.nfcSwitch.isChecked) {
enableNFC()
} else {
enableCamera()
}
}

override fun onPause() {
super.onPause()
findNavController().removeOnDestinationChangedListener(this)
binding.barcodeScanner.pause()
(requireActivity() as MainActivity).disableNfcForegroundDispatch()
}

override fun onDestinationChanged(
Expand All @@ -180,11 +195,28 @@ class CodeReaderFragment : BindingFragment<FragmentCodeReaderBinding>(), NavCont
arguments: Bundle?
) {
if (destination.id == R.id.codeReaderFragment) {
binding.barcodeScanner.resume()
if (binding.nfcSwitch.isChecked) {
enableNFC()
} else {
enableCamera()
}

lastText = ""
}
}

private fun enableNFC() {
binding.barcodeScanner.pause()
binding.nfcOverlay.isVisible = true
(requireActivity() as MainActivity).enableNfcForegroundDispatch()
}

private fun enableCamera() {
binding.barcodeScanner.resume()
binding.nfcOverlay.isVisible = false
(requireActivity() as MainActivity).disableNfcForegroundDispatch()
}

private fun showVerificationResult(
standardizedVerificationResult: StandardizedVerificationResult,
certificateModel: CertificateModel?,
Expand Down
26 changes: 26 additions & 0 deletions app/src/main/res/layout/fragment_code_reader.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

Expand All @@ -47,6 +48,17 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.85" />

<TextView
android:id="@+id/nfc_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:gravity="center"
android:text="@string/nfc_enabled"
android:textSize="@dimen/text_size_medium"
android:visibility="gone"
tools:visibility="visible" />

<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/settings"
android:layout_width="48dp"
Expand All @@ -58,6 +70,19 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/nfc_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:checked="false"
android:paddingHorizontal="@dimen/default_margin"
android:text="@string/nfc_scan"
android:textColor="@color/grey_50"
android:textSize="@dimen/text_size_medium"
android:theme="@style/TextAppearance.Dgca.Switch"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/settings" />

<TextView
android:id="@+id/validate_with"
Expand All @@ -80,4 +105,5 @@
app:layout_constraintBottom_toBottomOf="@id/validate_with"
app:layout_constraintStart_toEndOf="@id/validate_with"
app:layout_constraintTop_toTopOf="@id/validate_with" />

</androidx.constraintlayout.widget.ConstraintLayout>
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,6 @@
<string name="certificate_valid_from_title">Certificate valid from</string>
<string name="certificate_valid_until_title">Certificate valid until</string>
<string name="personal_data_title">Personal data:</string>
<string name="nfc_enabled">NFC enabled</string>
<string name="nfc_scan">NFC scan</string>
</resources>

0 comments on commit 093516f

Please sign in to comment.