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

Feature/#371 silent camera #375

Merged
merged 5 commits into from Jul 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -4,24 +4,32 @@ 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
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.
Expand Down Expand Up @@ -56,6 +64,7 @@ class BarcodeReaderActivity : BaseActivity() {
requestPermissions(arrayOf(Manifest.permission.CAMERA), 1)
return
}

startDecode()
}

Expand Down Expand Up @@ -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.
*/
Expand All @@ -122,7 +159,7 @@ class BarcodeReaderActivity : BaseActivity() {
}
}

public override fun onResume() {
override fun onResume() {
super.onResume()
binding?.barcodeView?.resume()
val colorPair = colorPair()
Expand All @@ -136,7 +173,7 @@ class BarcodeReaderActivity : BaseActivity() {
}
}

public override fun onPause() {
override fun onPause() {
super.onPause()
binding?.barcodeView?.pause()
}
Expand All @@ -163,6 +200,7 @@ class BarcodeReaderActivity : BaseActivity() {
/**
* Layout ID.
*/
@LayoutRes
private const val LAYOUT_ID = R.layout.activity_barcode_reader

/**
Expand Down
@@ -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)
}
}
16 changes: 15 additions & 1 deletion app/src/main/res/layout/activity_barcode_reader.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layout>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable name="activity" type="jp.toastkid.yobidashi.barcode.BarcodeReaderActivity" />
</data>
Expand All @@ -24,6 +24,20 @@
android:layout_gravity="top"
/>

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/camera"
android:layout_width="@dimen/menu_button_size"
android:layout_height="@dimen/menu_button_size"
android:layout_marginBottom="20dp"
android:layout_marginRight="20dp"
android:layout_marginEnd="20dp"
android:layout_gravity="right|bottom"
android:src="@drawable/ic_camera_black"
app:backgroundTint="@color/soft_background"
android:background="@drawable/ripple_transparent"
android:onClick="@{view -> activity.camera()}"
/>

<RelativeLayout
android:id="@+id/result_area"
android:layout_width="match_parent"
Expand Down