Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated Scanbot Barcode SDK to v3.7.0 #111

Merged
merged 7 commits into from
Jul 13, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add barcode scan and count
4BooM04 committed Jul 10, 2023
commit 21e2358d3e4947b7d5ca229f769fe45e109e2a35
3 changes: 2 additions & 1 deletion example_app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@
android:name=".BarcodeResultActivity"
android:label="@string/title_activity_barcode_result"
android:theme="@style/AppTheme" />
<activity android:name="io.scanbot.sdk.sdk_integration_barcode_scanner_sdk.MainActivity">
<activity android:name=".ui.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

@@ -32,6 +32,7 @@
<activity android:name=".BatchQRScanActivity" />
<activity android:name=".ui.BarcodeDocumentParserDemoActivity" />
<activity android:name=".ui.BarcodeScannerViewActivity" />
<activity android:name=".ui.BarcodeScanAndCountViewActivity" />
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
package io.scanbot.example.sdk.barcode.ui

import android.Manifest
import android.content.pm.PackageManager
import android.graphics.PointF
import android.graphics.RectF
import android.os.Bundle
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.widget.Button
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.view.WindowCompat
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import com.google.android.material.floatingactionbutton.FloatingActionButton
import io.scanbot.example.sdk.barcode.R
import io.scanbot.example.sdk.barcode.model.BarcodeTypeRepository
import io.scanbot.sdk.barcode.entity.BarcodeItem
import io.scanbot.sdk.barcode.ui.BarcodePolygonsStaticView
import io.scanbot.sdk.barcode.ui.BarcodeScanAndCountView
import io.scanbot.sdk.barcode.ui.IBarcodeScanCountViewCallback
import io.scanbot.sdk.barcode_scanner.ScanbotBarcodeScannerSDK

class BarcodeScanAndCountViewActivity : AppCompatActivity() {
private lateinit var scanCountView: BarcodeScanAndCountView
private lateinit var scanButton: Button
private lateinit var nextButton: Button
private lateinit var snapResult: TextView

private var flashEnabled = false

override fun onCreate(savedInstanceState: Bundle?) {
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_barcode_count_view)

scanCountView = findViewById(R.id.barcode_scanner_view)
scanButton = findViewById(R.id.snapButton)
nextButton = findViewById(R.id.nextButton)
snapResult = findViewById(R.id.snapped_message)

val barcodeDetector = ScanbotBarcodeScannerSDK(this).createBarcodeDetector()
barcodeDetector.modifyConfig {
setBarcodeFormats(BarcodeTypeRepository.selectedTypes.toList())
setSaveCameraPreviewFrame(false)
}
scanButton.setOnClickListener {
scanCountView.viewController.scanAndCount() // call this to run the scan and count
}
nextButton.setOnClickListener {
scanCountView.viewController.continueScanning() // call this after the scan to reset the view state and continue scanning
scanButton.isEnabled = true
nextButton.isEnabled = false
}

scanButton.isEnabled = true
nextButton.isEnabled = false

scanCountView.apply {
initCamera()
initDetectionBehavior(
barcodeDetector,
callback = object : IBarcodeScanCountViewCallback {
override fun onCameraOpen() {
scanCountView.viewController.useFlash(flashEnabled)
}

override fun onLicenseError() {
scanCountView.post {
Toast.makeText(
this@BarcodeScanAndCountViewActivity,
"License has expired!",
Toast.LENGTH_LONG
).show()
}
}

override fun onScanAndCountStarted() {
scanButton.isEnabled = false
}

override fun onScanAndCountFinished(barcodes: List<BarcodeItem>) {
scanButton.isEnabled = false
nextButton.isEnabled = true
// barcodes is the result of the last scanning session, but to ge all counted barcodes, use the following code
handleSnap(scanCountView.countedBarcodes)
}
}
)
}

// Setting the Selection Overlay (AR)
scanCountView.counterOverlayController.setPolygonPolygonEnabled(true)
scanCountView.counterOverlayController.setBarcodeItemViewFactory(object :
BarcodePolygonsStaticView.BarcodeItemViewFactory {
override fun createView(): View {
val inflater = LayoutInflater.from(this@BarcodeScanAndCountViewActivity)
return inflater.inflate(R.layout.custom_view_for_counter, scanCountView, false)
}
})
scanCountView.counterOverlayController.setBarcodeItemViewBinder(object :
BarcodePolygonsStaticView.BarcodeItemViewBinder {
override fun bindView(view: View, barcodeItem: BarcodeItem, shouldHighlight: Boolean) {
val valueTextView = view.findViewById<TextView>(R.id.custom_ar_view_value)
val imageView = view.findViewById<ImageView>(R.id.custom_ar_view)
valueTextView.isVisible = false //uncomment to show barcode value
valueTextView.text = barcodeItem.textWithExtension
valueTextView.maxLines = 2
}
})

scanCountView.counterOverlayController.setBarcodeItemViewPositionHandler(object :
BarcodePolygonsStaticView.BarcodeItemViewPositionHandler {

override fun adjustPosition(view: View, path: List<PointF>, bounds: RectF) {
val valueTextView = view.findViewById<TextView>(R.id.custom_ar_view_value)
valueTextView.translationY = bounds.height() / 2 + 20f
}
})

// TODO to get the result of all scanned barcodes, use the following code
}

override fun onResume() {
super.onResume()
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) != PackageManager.PERMISSION_GRANTED
) {
// Use onActivityResult to handle permission rejection
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.CAMERA),
REQUEST_PERMISSION_CODE
)
}
}

private fun handleSnap(barcodes: Map<BarcodeItem, Int>) {
barcodes.let {
val sb = StringBuilder()
for ((key, value) in it) {
sb.append(key.textWithExtension).append(" - ").append(value).append("\n")
}
snapResult.text = sb.toString()
}
}

companion object {
private const val REQUEST_PERMISSION_CODE = 200
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.scanbot.sdk.sdk_integration_barcode_scanner_sdk
package io.scanbot.example.sdk.barcode.ui

import android.app.Activity
import android.content.Intent
@@ -15,8 +15,6 @@ import io.scanbot.example.sdk.barcode.*
import io.scanbot.example.sdk.barcode.model.BarcodeResultBundle
import io.scanbot.example.sdk.barcode.model.BarcodeResultRepository
import io.scanbot.example.sdk.barcode.model.BarcodeTypeRepository
import io.scanbot.example.sdk.barcode.ui.BarcodeDocumentParserDemoActivity
import io.scanbot.example.sdk.barcode.ui.BarcodeScannerViewActivity
import io.scanbot.example.sdk.barcode.ui.dialog.ErrorFragment
import io.scanbot.sap.Status
import io.scanbot.sdk.barcode.ScanbotBarcodeDetector
@@ -32,7 +30,6 @@ import io.scanbot.sdk.ui.view.barcode.configuration.BarcodeImageGenerationType
import io.scanbot.sdk.ui.view.barcode.configuration.BarcodeScannerConfiguration
import io.scanbot.sdk.ui.view.base.configuration.CameraOrientationMode
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_qr_camera_view.*
import java.io.IOException

class MainActivity : AppCompatActivity() {
@@ -57,6 +54,11 @@ class MainActivity : AppCompatActivity() {
startActivity(intent)
}

findViewById<View>(R.id.classical_scan_count_demo).setOnClickListener {
val intent = Intent(applicationContext, BarcodeScanAndCountViewActivity::class.java)
startActivity(intent)
}

findViewById<View>(R.id.classical_batch).setOnClickListener {
val intent = Intent(applicationContext, BatchQRScanActivity::class.java)
startActivity(intent)
5 changes: 5 additions & 0 deletions example_app/src/main/res/drawable/baseline_cloud_done_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#72E708"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96zM10,17l-3.5,-3.5 1.41,-1.41L10,14.17 15.18,9l1.41,1.41L10,17z"/>
</vector>
60 changes: 60 additions & 0 deletions example_app/src/main/res/layout/activity_barcode_count_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false">

<io.scanbot.sdk.barcode.ui.BarcodeScanAndCountView
android:id="@+id/barcode_scanner_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<TextView
android:id="@+id/snapped_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:background="#000000"
android:contentDescription="snapped_message" />

<Button
android:id="@+id/flash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
android:text="Flash" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:paddingBottom="32dp">

<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />

<Button
android:id="@+id/snapButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scan and Count" />

<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />

<Button
android:id="@+id/nextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next" />

<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</FrameLayout>
Loading