diff --git a/app/build.gradle b/app/build.gradle
index feb8ce92..93a201ef 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -151,6 +151,10 @@ dependencies {
implementation "androidx.camera:camera-view:${camerax_version}"
implementation "androidx.camera:camera-extensions:${camerax_version}"
+ // Image picking and registerForActivityResult
+ implementation 'androidx.activity:activity-ktx:1.6.1'
+ implementation "androidx.fragment:fragment-ktx:1.4.1"
+
// Instrumented Tests
androidTestImplementation 'androidx.test:core:1.3.0'
androidTestImplementation 'androidx.test:runner:1.3.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e6fedda6..f381a06a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,7 +4,6 @@
package="net.pokeranalytics.android">
-
diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt
index f617d188..c84e7bf7 100644
--- a/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt
+++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Player.kt
@@ -1,7 +1,6 @@
package net.pokeranalytics.android.model.realm
import android.content.Context
-import android.net.Uri
import io.realm.Realm
import io.realm.RealmList
import io.realm.RealmObject
@@ -32,9 +31,6 @@ open class Player : RealmObject(), NameManageable, Savable, Deletable, RowRepres
var picture: String? = null
var comments: RealmList = RealmList()
- @Ignore
- var pictureUri: Uri? = null
-
@Ignore
override val realmObjectClass: Class = Player::class.java
@@ -67,7 +63,7 @@ open class Player : RealmObject(), NameManageable, Savable, Deletable, RowRepres
when (row) {
PlayerPropertiesRow.NAME -> this.name = value as String? ?: ""
PlayerPropertiesRow.SUMMARY -> this.summary = value as String? ?: ""
- PlayerPropertiesRow.IMAGE -> this.pictureUri = value as? Uri
+ PlayerPropertiesRow.IMAGE -> this.picture = value as? String
}
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/CameraActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/CameraActivity.kt
index 29e7d0eb..5a97c8bf 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/CameraActivity.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/CameraActivity.kt
@@ -39,8 +39,7 @@ class CameraActivity : BaseActivity() {
private const val REQUEST_CODE_PERMISSIONS = 10
private val REQUIRED_PERMISSIONS =
mutableListOf (
- Manifest.permission.CAMERA,
- Manifest.permission.RECORD_AUDIO
+ Manifest.permission.CAMERA
).apply {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
@@ -171,9 +170,9 @@ class CameraActivity : BaseActivity() {
override fun onImageSaved(output: ImageCapture.OutputFileResults) {
- val msg = "Photo capture succeeded: ${output.savedUri}"
- Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
- Timber.d(msg)
+// val msg = "Photo capture succeeded: ${output.savedUri}"
+// Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
+// Timber.d(msg)
val intent = Intent()
intent.putExtra(IMAGE_URI, output.savedUri.toString())
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/data/PlayerDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/data/PlayerDataFragment.kt
index 97d40a70..beaf1f39 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/modules/data/PlayerDataFragment.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/data/PlayerDataFragment.kt
@@ -9,6 +9,9 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -33,6 +36,7 @@ import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rows.PlayerPropertiesRow
import net.pokeranalytics.android.ui.viewmodel.DataManagerViewModel
import net.pokeranalytics.android.util.NULL_TEXT
+import timber.log.Timber
import java.io.File
/**
@@ -93,6 +97,8 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
_binding = null
}
+ var pickVisualMediaRequest: ActivityResultLauncher? = null
+
/**
* Init UI
*/
@@ -110,6 +116,16 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
rowRepresentableAdapter.notifyDataSetChanged()
onRowSelected(-1, comment)
}
+
+ this.pickVisualMediaRequest = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
+ this.player.picture = uri.toString()
+ if (uri != null) {
+ Timber.d("Selected URI: $uri")
+ } else {
+ Timber.d("No media selected")
+ }
+ rowRepresentableAdapter.refreshRow(PlayerPropertiesRow.IMAGE)
+ }
}
override fun getPhotos(files: ArrayList) {
@@ -232,7 +248,10 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
// mediaActivity?.takePicture()
} // mediaActivity?.openImageCaptureIntent(false)
- getString(R.string.library) -> mediaActivity?.openImageGalleryIntent(false)
+ getString(R.string.library) -> {
+ pickVisualMediaRequest?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+// mediaActivity?.openImageGalleryIntent(false)
getString(R.string.select_a_color) -> {
ColorPickerActivity.newInstanceForResult(this, REQUEST_CODE_PICK_COLOR)
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt
index fcca1b00..fd2909cb 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt
@@ -15,7 +15,7 @@ import timber.log.Timber
class FilterDetailsViewModelFactory(var filter: Filter, private var categoryRow: FilterCategoryRow): ViewModelProvider.Factory {
- override fun create(modelClass: Class): T {
+ override fun create(modelClass: Class): T {
return FilterDetailsViewModel(categoryRow, filter) as T
}
diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt
index d8981d8c..34888d01 100644
--- a/app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt
+++ b/app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt
@@ -2,10 +2,7 @@ package net.pokeranalytics.android.ui.view
import android.content.Context
import android.graphics.Color
-import android.graphics.ImageDecoder
import android.graphics.drawable.GradientDrawable
-import android.os.Build
-import android.provider.MediaStore
import android.util.AttributeSet
import android.util.TypedValue
import android.view.LayoutInflater
@@ -16,7 +13,6 @@ import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat.getColor
import androidx.core.content.res.ResourcesCompat
-import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory
import androidx.core.net.toUri
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Player
@@ -96,41 +92,13 @@ class PlayerImageView : FrameLayout {
// Picture
player.picture?.let { picture ->
-
Timber.d("picture = $picture")
-
- val uri = picture.toUri()
-
- context?.contentResolver?.let { resolver ->
- val bitmap = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- ImageDecoder.decodeBitmap(ImageDecoder.createSource(resolver, uri))
- } else {
- MediaStore.Images.Media.getBitmap(resolver, uri)
- }
-
- val rDrawable = RoundedBitmapDrawableFactory.create(resources, bitmap)
- rDrawable.isCircular = true
- this.playerImage.setImageDrawable(rDrawable)
-
- }
-
-// player.picture?.let { pic ->
-// pic.toUri().path?.let {
-// val rDrawable = RoundedBitmapDrawableFactory.create(resources, it)
-// rDrawable.isCircular = true
-// this.playerImage.setImageDrawable(rDrawable)
-// }
-//
-// this.playerImage.setImageURI(uri)
-// }
-
- } ?: run {
-
+ this.playerImage.setImageURI(picture.toUri())
+ } ?: run { // no pic
this.playerStroke.background = ResourcesCompat.getDrawable(resources, R.drawable.circle_stroke_kaki, null)
this.playerImage.setImageDrawable(null)
this.playerInitial.text = player.initials
this.playerInitial.setTextSize(TypedValue.COMPLEX_UNIT_SP, size.getFontSize())
-
}
// Player color
diff --git a/app/src/main/res/drawable/circle_border.xml b/app/src/main/res/drawable/circle_border.xml
new file mode 100644
index 00000000..81d6bc85
--- /dev/null
+++ b/app/src/main/res/drawable/circle_border.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_camera.xml b/app/src/main/res/layout/activity_camera.xml
index 71504c4b..c76bada2 100644
--- a/app/src/main/res/layout/activity_camera.xml
+++ b/app/src/main/res/layout/activity_camera.xml
@@ -2,24 +2,27 @@
+ android:layout_height="match_parent"
+ tools:layout_editor_absoluteX="0dp"
+ tools:layout_editor_absoluteY="0dp" />
-
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
-
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5f4e55d1..c2531dbe 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -349,6 +349,13 @@
- 16sp
+
+
+
+