diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt index 5d3210c8..2eb06559 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt @@ -34,8 +34,6 @@ import de.markusfisch.android.binaryeye.widget.DetectorView import de.markusfisch.android.binaryeye.widget.toast import de.markusfisch.android.binaryeye.zxing.Zxing import de.markusfisch.android.cameraview.widget.CameraView -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch import kotlin.math.max import kotlin.math.min import kotlin.math.roundToInt @@ -679,9 +677,7 @@ fun showResult( } val scan = Scan(result) if (prefs.useHistory) { - GlobalScope.launch { - db.insertScan(scan) - } + scan.id = db.insertScan(scan) } if (!bulkMode) { activity.startActivity( diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/database/Scan.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/database/Scan.kt index 1656ae6e..161e869f 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/database/Scan.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/database/Scan.kt @@ -19,7 +19,7 @@ data class Scan( val suggestedPrice: String?, val upcEanExtension: String?, val timestamp: String = getDateTime(), - val id: Long = 0L + var id: Long = 0L ) : Parcelable { constructor(result: Result) : this( result.text, diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/DecodeFragment.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/DecodeFragment.kt index c0b893b1..90b0d2c5 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/DecodeFragment.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/DecodeFragment.kt @@ -31,13 +31,14 @@ class DecodeFragment : Fragment() { private lateinit var format: String private lateinit var fab: FloatingActionButton - private var action = ActionRegistry.DEFAULT_ACTION - private var isBinary = false + private val parentJob = Job() + private val scope: CoroutineScope = CoroutineScope(Dispatchers.Main + parentJob) private val content: String get() = contentView.text.toString() - private val parentJob = Job() - private val scope: CoroutineScope = CoroutineScope(Dispatchers.Main + parentJob) + private var action = ActionRegistry.DEFAULT_ACTION + private var isBinary = false + private var id = 0L override fun onCreate(state: Bundle?) { super.onCreate(state) @@ -59,6 +60,7 @@ class DecodeFragment : Fragment() { val scan = arguments?.getParcelable(SCAN) as Scan? ?: throw IllegalArgumentException("DecodeFragment needs a Scan") + id = scan.id val inputContent = scan.content isBinary = hasNonPrintableCharacters( @@ -196,6 +198,9 @@ class DecodeFragment : Fragment() { menu.findItem(R.id.copy_to_clipboard).isVisible = false menu.findItem(R.id.create).isVisible = false } + if (id > 0L) { + menu.findItem(R.id.remove).isVisible = true + } } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -215,6 +220,11 @@ class DecodeFragment : Fragment() { ) true } + R.id.remove -> { + db.removeScan(id) + backOrFinish() + true + } else -> super.onOptionsItemSelected(item) } } @@ -226,6 +236,15 @@ class DecodeFragment : Fragment() { } } + private fun backOrFinish() { + val fm = fragmentManager + if (fm != null && fm.backStackEntryCount > 0) { + fm.popBackStack() + } else { + activity?.finish() + } + } + private fun executeAction(content: ByteArray) { val ac = activity ?: return if (content.isNotEmpty()) { diff --git a/app/src/main/res/menu/fragment_decode.xml b/app/src/main/res/menu/fragment_decode.xml index b492b83b..d512c09b 100644 --- a/app/src/main/res/menu/fragment_decode.xml +++ b/app/src/main/res/menu/fragment_decode.xml @@ -1,19 +1,25 @@ + + material:showAsAction="always"/> + material:showAsAction="always"/> + material:showAsAction="always"/>