From d85414b242959b3611247a85171e9f4fb93d5f7d Mon Sep 17 00:00:00 2001
From: Piotr Chmielowski <7473920+pchmielowski@users.noreply.github.com>
Date: Fri, 10 Jun 2022 14:23:28 +0200
Subject: [PATCH 01/28] Manifest permissions
---
app/src/main/AndroidManifest.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 75369ba1..deaa3708 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,11 @@
xmlns:tools="http://schemas.android.com/tools"
package="net.chmielowski.randomchoice">
+
+
+
Date: Fri, 10 Jun 2022 14:34:07 +0200
Subject: [PATCH 02/28] Create file
---
.../chmielowski/randomchoice/utils/Camera.kt | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt b/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
index 0719ad6c..bbe2111c 100644
--- a/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
+++ b/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
@@ -5,13 +5,17 @@ import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
+import android.net.Uri
+import android.os.Environment
import android.provider.MediaStore
import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContract
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
+import androidx.core.content.FileProvider
import net.chmielowski.randomchoice.R
+import java.io.File
@Composable
internal fun createLaunchCamera(onResult: (Bitmap?) -> Unit): () -> Unit {
@@ -28,8 +32,18 @@ internal fun createLaunchCamera(onResult: (Bitmap?) -> Unit): () -> Unit {
private class CameraResultContract : ActivityResultContract() {
- override fun createIntent(context: Context, input: Unit) =
- Intent(MediaStore.ACTION_IMAGE_CAPTURE)
+ override fun createIntent(context: Context, input: Unit): Intent {
+ val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
+ val uri = createFile(context) ?: error("") // TODO@
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)
+ return intent
+ }
+
+ private fun createFile(context: Context): Uri? {
+ val directory = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) ?: return null
+ val file = File.createTempFile("Random Choice", ".jpg", directory)
+ return FileProvider.getUriForFile(context, "com.example.android.fileprovider", file)
+ }
override fun parseResult(resultCode: Int, intent: Intent?) =
if (resultCode == Activity.RESULT_OK) {
From 1aacdc1f1e1332b822a919f64e3b36566cd4a07f Mon Sep 17 00:00:00 2001
From: Piotr Chmielowski <7473920+pchmielowski@users.noreply.github.com>
Date: Fri, 10 Jun 2022 14:35:38 +0200
Subject: [PATCH 03/28] Crash fix
---
app/src/main/AndroidManifest.xml | 10 ++++++++++
.../net/chmielowski/randomchoice/utils/Camera.kt | 3 ++-
app/src/main/res/xml/provider_paths.xml | 6 ++++++
3 files changed, 18 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/res/xml/provider_paths.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index deaa3708..bc085f8e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,6 +39,16 @@
+
+
+
+
diff --git a/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt b/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
index bbe2111c..c85a9562 100644
--- a/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
+++ b/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
@@ -14,6 +14,7 @@ import androidx.activity.result.contract.ActivityResultContract
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import androidx.core.content.FileProvider
+import net.chmielowski.randomchoice.BuildConfig
import net.chmielowski.randomchoice.R
import java.io.File
@@ -42,7 +43,7 @@ private class CameraResultContract : ActivityResultContract() {
private fun createFile(context: Context): Uri? {
val directory = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) ?: return null
val file = File.createTempFile("Random Choice", ".jpg", directory)
- return FileProvider.getUriForFile(context, "com.example.android.fileprovider", file)
+ return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file)
}
override fun parseResult(resultCode: Int, intent: Intent?) =
diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml
new file mode 100644
index 00000000..a075ef96
--- /dev/null
+++ b/app/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,6 @@
+
+
+
+
From d23b0c362a930c6d55d94cbea50b36ed852dd6cf Mon Sep 17 00:00:00 2001
From: Piotr Chmielowski <7473920+pchmielowski@users.noreply.github.com>
Date: Fri, 10 Jun 2022 14:41:05 +0200
Subject: [PATCH 04/28] Saving file
---
.../chmielowski/randomchoice/utils/Camera.kt | 22 +++++++++----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt b/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
index c85a9562..e348a269 100644
--- a/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
+++ b/app/src/main/kotlin/net/chmielowski/randomchoice/utils/Camera.kt
@@ -24,28 +24,22 @@ internal fun createLaunchCamera(onResult: (Bitmap?) -> Unit): () -> Unit {
val context = LocalContext.current
return {
@Suppress("SwallowedException") try {
- launcher.launch(Unit)
+ val file = createFile(context)
+ launcher.launch(file)
} catch (e: ActivityNotFoundException) {
context.showError()
}
}
}
-private class CameraResultContract : ActivityResultContract() {
+private class CameraResultContract : ActivityResultContract() {
- override fun createIntent(context: Context, input: Unit): Intent {
+ override fun createIntent(context: Context, input: Uri): Intent {
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
- val uri = createFile(context) ?: error("") // TODO@
- intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, input)
return intent
}
- private fun createFile(context: Context): Uri? {
- val directory = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) ?: return null
- val file = File.createTempFile("Random Choice", ".jpg", directory)
- return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file)
- }
-
override fun parseResult(resultCode: Int, intent: Intent?) =
if (resultCode == Activity.RESULT_OK) {
intent?.extras?.getParcelableCompat("data")
@@ -59,3 +53,9 @@ private fun Context.showError() {
.makeText(this, R.string.error, Toast.LENGTH_LONG)
.show()
}
+
+private fun createFile(context: Context): Uri? {
+ val directory = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) ?: return null
+ val file = File.createTempFile("Random Choice", ".jpg", directory)
+ return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file)
+}
From c1d006d5f0989bfd07ede53ac703452805974de4 Mon Sep 17 00:00:00 2001
From: Piotr Chmielowski <7473920+pchmielowski@users.noreply.github.com>
Date: Fri, 10 Jun 2022 15:32:53 +0200
Subject: [PATCH 05/28] Read file
---
app/build.gradle | 3 +++
.../chmielowski/randomchoice/core/Dilemma.kt | 2 +-
.../chmielowski/randomchoice/core/Option.kt | 12 +++-------
.../ui/screen/component/MarqueeText.kt | 4 ++--
.../ui/screen/input/InputScreen.kt | 15 ++++++++-----
.../chmielowski/randomchoice/utils/Camera.kt | 22 +++++++++----------
6 files changed, 30 insertions(+), 28 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index e26f8e32..1f15447a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -132,6 +132,9 @@ dependencies {
implementation "io.insert-koin:koin-androidx-compose:$koin_version"
testImplementation "io.insert-koin:koin-test:$koin_version"
+ implementation "io.coil-kt:coil:2.1.0"
+ implementation "io.coil-kt:coil-compose:2.1.0"
+
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.robolectric:robolectric:4.9'
testImplementation "org.assertj:assertj-core:3.22.0"
diff --git a/app/src/main/kotlin/net/chmielowski/randomchoice/core/Dilemma.kt b/app/src/main/kotlin/net/chmielowski/randomchoice/core/Dilemma.kt
index 70974990..2cb5f14c 100644
--- a/app/src/main/kotlin/net/chmielowski/randomchoice/core/Dilemma.kt
+++ b/app/src/main/kotlin/net/chmielowski/randomchoice/core/Dilemma.kt
@@ -45,7 +45,7 @@ internal data class Dilemma(private val options: List