diff --git a/app/src/main/java/jp/toastkid/yobidashi/barcode/BarcodeReaderActivity.kt b/app/src/main/java/jp/toastkid/yobidashi/barcode/BarcodeReaderActivity.kt index 7454020e87..e16701cc8f 100644 --- a/app/src/main/java/jp/toastkid/yobidashi/barcode/BarcodeReaderActivity.kt +++ b/app/src/main/java/jp/toastkid/yobidashi/barcode/BarcodeReaderActivity.kt @@ -4,16 +4,21 @@ import android.Manifest import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.graphics.Rect import android.os.Build import android.os.Bundle import android.text.TextUtils import android.view.View import android.view.animation.AnimationUtils +import androidx.annotation.LayoutRes import androidx.annotation.StringRes import androidx.databinding.DataBindingUtil import com.google.zxing.ResultPoint import com.journeyapps.barcodescanner.BarcodeCallback import com.journeyapps.barcodescanner.BarcodeResult +import com.journeyapps.barcodescanner.SourceData +import com.journeyapps.barcodescanner.camera.PreviewCallback import jp.toastkid.yobidashi.BaseActivity import jp.toastkid.yobidashi.R import jp.toastkid.yobidashi.databinding.ActivityBarcodeReaderBinding @@ -21,7 +26,10 @@ import jp.toastkid.yobidashi.libs.Colors import jp.toastkid.yobidashi.libs.Toaster import jp.toastkid.yobidashi.libs.clip.Clipboard import jp.toastkid.yobidashi.libs.intent.IntentFactory +import jp.toastkid.yobidashi.libs.storage.ExternalFileAssignment import jp.toastkid.yobidashi.search.SearchAction +import timber.log.Timber +import java.io.FileOutputStream /** * Barcode reader activity. @@ -56,6 +64,7 @@ class BarcodeReaderActivity : BaseActivity() { requestPermissions(arrayOf(Manifest.permission.CAMERA), 1) return } + startDecode() } @@ -105,6 +114,34 @@ class BarcodeReaderActivity : BaseActivity() { } } + fun camera() { + val barcodeView = binding?.barcodeView ?: return + + barcodeView.barcodeView?.cameraInstance?.requestPreview(object : PreviewCallback { + override fun onPreview(sourceData: SourceData?) { + val output = ExternalFileAssignment().assignFile( + this@BarcodeReaderActivity, + "shoot_${System.currentTimeMillis()}.png" + ) + + sourceData?.cropRect = getRect() + sourceData?.bitmap?.compress(Bitmap.CompressFormat.PNG, 100, FileOutputStream(output)) + Toaster.snackShort(barcodeView, "Camera saved: ${output.absolutePath}", colorPair()) + } + + private fun getRect(): Rect { + val rect = Rect() + windowManager.defaultDisplay.getRectSize(rect) + return rect + } + + override fun onPreviewError(e: Exception?) { + Timber.e(e) + } + + }) + } + /** * Get result text. */ @@ -122,7 +159,7 @@ class BarcodeReaderActivity : BaseActivity() { } } - public override fun onResume() { + override fun onResume() { super.onResume() binding?.barcodeView?.resume() val colorPair = colorPair() @@ -136,7 +173,7 @@ class BarcodeReaderActivity : BaseActivity() { } } - public override fun onPause() { + override fun onPause() { super.onPause() binding?.barcodeView?.pause() } @@ -163,6 +200,7 @@ class BarcodeReaderActivity : BaseActivity() { /** * Layout ID. */ + @LayoutRes private const val LAYOUT_ID = R.layout.activity_barcode_reader /** diff --git a/app/src/main/java/jp/toastkid/yobidashi/libs/storage/ExternalFileAssignment.kt b/app/src/main/java/jp/toastkid/yobidashi/libs/storage/ExternalFileAssignment.kt new file mode 100644 index 0000000000..3c34ed9c0e --- /dev/null +++ b/app/src/main/java/jp/toastkid/yobidashi/libs/storage/ExternalFileAssignment.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2019 toastkidjp. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompany this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html. + */ +package jp.toastkid.yobidashi.libs.storage + +import android.content.Context +import android.os.Build +import android.os.Environment +import java.io.File + +/** + * @author toastkidjp + */ +class ExternalFileAssignment { + + fun assignFile(context: Context, fileName: String): File { + val externalFilesDir = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + } else { + context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + } + + if (!externalFilesDir.exists()) { + externalFilesDir.mkdirs() + } + return File(externalFilesDir, fileName) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_barcode_reader.xml b/app/src/main/res/layout/activity_barcode_reader.xml index ab9af25e61..c63c57c4d4 100644 --- a/app/src/main/res/layout/activity_barcode_reader.xml +++ b/app/src/main/res/layout/activity_barcode_reader.xml @@ -1,5 +1,5 @@ - + @@ -24,6 +24,20 @@ android:layout_gravity="top" /> + +