diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 69e8615..fdf8d99 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 273ba68..3cb5cfd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,6 +41,7 @@
+
() {
+
+ companion object {
+ const val TYPE_TITLE = 1
+ const val TYPE_DIVIDER = 2
+ const val TYPE_AUDIO = 3
+ const val TYPE_AUDIO_DRAFT = 4
+ const val TYPE_UNKNOWN = -1
+ }
+
+
+ // viewholders
+ inner class AudioViewHolder(val audioListItemBinding: AudioListItemBinding) : RecyclerView.ViewHolder(audioListItemBinding.root)
+ inner class TitleViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
+ inner class DividerViewHolder(val divider: MaterialDivider) : RecyclerView.ViewHolder(divider)
+
+ data object Divider
+ data class TitleItem(val text: String)
+
+ private var list: List = listOf()
+
+ fun setList(item: List) {
+
+ }
+
+ override fun getItemViewType(position: Int): Int {
+ return when(list[position]) {
+ is Divider -> TYPE_DIVIDER
+ is TitleItem -> TYPE_TITLE
+ is Audio -> TYPE_AUDIO
+ is AudioDraft -> TYPE_AUDIO_DRAFT
+ else -> TYPE_UNKNOWN
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+ return when(viewType) {
+ TYPE_TITLE -> {
+ val textView = TextView(parent.context)
+ TitleViewHolder(textView)
+ }
+ TYPE_DIVIDER -> {
+ DividerViewHolder(MaterialDivider(parent.context))
+ }
+ TYPE_AUDIO, TYPE_AUDIO_DRAFT -> {
+ AudioViewHolder(AudioListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
+ }
+ // this should not enter
+ else -> {
+ object: RecyclerView.ViewHolder(LinearLayout(parent.context)){}
+ }
+ }
+ }
+
+ override fun getItemCount(): Int {
+ return list.size
+ }
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ when(holder) {
+ is TitleViewHolder -> {
+ holder.textView.text = (list[position] as TitleItem).text
+ }
+
+ is AudioViewHolder -> {
+
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/audio/audio_selector/ui/AudioSelectorActivity.kt b/app/src/main/java/com/isolaatti/audio/audio_selector/ui/AudioSelectorActivity.kt
new file mode 100644
index 0000000..d9be211
--- /dev/null
+++ b/app/src/main/java/com/isolaatti/audio/audio_selector/ui/AudioSelectorActivity.kt
@@ -0,0 +1,25 @@
+package com.isolaatti.audio.audio_selector.ui
+
+import android.os.Bundle
+import com.isolaatti.common.IsolaattiBaseActivity
+import com.isolaatti.databinding.ActivityAudioSelectorBinding
+
+class AudioSelectorActivity : IsolaattiBaseActivity() {
+ companion object {
+ const val EXTRA_ID = "id"
+ const val EXTRA_FOR_SQUAD = "forSquad"
+ const val OUT_EXTRA_PLAYABLE = "playable"
+ }
+
+ private lateinit var binding: ActivityAudioSelectorBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ binding = ActivityAudioSelectorBinding.inflate(layoutInflater)
+
+ setContentView(binding.root)
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/audio/audio_selector/ui/AudioSelectorContract.kt b/app/src/main/java/com/isolaatti/audio/audio_selector/ui/AudioSelectorContract.kt
new file mode 100644
index 0000000..0da2fda
--- /dev/null
+++ b/app/src/main/java/com/isolaatti/audio/audio_selector/ui/AudioSelectorContract.kt
@@ -0,0 +1,39 @@
+package com.isolaatti.audio.audio_selector.ui
+
+import android.app.Activity
+import android.content.Context
+import android.content.Intent
+import androidx.activity.result.contract.ActivityResultContract
+import com.isolaatti.audio.common.domain.Audio
+import com.isolaatti.audio.common.domain.Playable
+import java.io.Serializable
+
+/**
+ * Contract to select audio. Use SelectorConfig class to specify the context to use to select audio.
+ * Output: if user selected an audio or draft, it will be returned as result. Check type as convenient. Null if user cancelled
+ */
+class AudioSelectorContract : ActivityResultContract() {
+
+ data class SelectorConfig(val forSquad: Boolean, val id: String?): Serializable
+
+ override fun createIntent(context: Context, input: SelectorConfig): Intent {
+ val intent = Intent(context, AudioSelectorActivity::class.java)
+ intent.apply {
+ putExtra(AudioSelectorActivity.EXTRA_FOR_SQUAD, input.forSquad)
+ if(input.forSquad) {
+ putExtra(AudioSelectorActivity.EXTRA_ID, input.id as String)
+ }
+
+ }
+
+ return intent
+ }
+
+ override fun parseResult(resultCode: Int, intent: Intent?): Playable? {
+ if(resultCode == Activity.RESULT_OK) {
+ return intent?.extras?.getSerializable(AudioSelectorActivity.OUT_EXTRA_PLAYABLE) as? Playable
+ }
+
+ return null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownEditingFragment.kt b/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownEditingFragment.kt
index d62d093..c688a66 100644
--- a/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownEditingFragment.kt
+++ b/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownEditingFragment.kt
@@ -15,6 +15,8 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import com.isolaatti.R
+import com.isolaatti.audio.audio_selector.ui.AudioSelectorActivity
+import com.isolaatti.audio.audio_selector.ui.AudioSelectorContract
import com.isolaatti.audio.common.domain.Audio
import com.isolaatti.audio.common.domain.Playable
import com.isolaatti.audio.drafts.domain.AudioDraft
@@ -54,6 +56,10 @@ class MarkdownEditingFragment : Fragment(){
}
+ }
+
+ private val audioSelectorLauncher = registerForActivityResult(AudioSelectorContract()) {
+
}
private val audioListener = object: AudioPlayerConnector.Listener {
@@ -142,6 +148,7 @@ class MarkdownEditingFragment : Fragment(){
true
}
R.id.select_from_audios -> {
+ audioSelectorLauncher.launch(AudioSelectorContract.SelectorConfig(false, null))
true
}
else -> false
diff --git a/app/src/main/res/layout/activity_audio_selector.xml b/app/src/main/res/layout/activity_audio_selector.xml
new file mode 100644
index 0000000..c16d327
--- /dev/null
+++ b/app/src/main/res/layout/activity_audio_selector.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4b61099..355f5a1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -183,4 +183,5 @@
Select from existing
Audio attachment
Remove
+ Select audio
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 584f1f2..99271d1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,7 +15,7 @@ buildscript {
plugins {
id 'com.android.application' version '8.2.2' apply false
id 'com.android.library' version '8.2.2' apply false
- id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
+ id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
id 'com.google.dagger.hilt.android' version '2.47' apply false
id 'com.google.gms.google-services' version '4.4.0' apply false
id 'com.google.firebase.crashlytics' version '2.9.9' apply false