Highlight selected call audio route

This commit is contained in:
Naveen
2022-11-11 22:20:54 +05:30
parent 9971a30149
commit 1b4d48ce45
3 changed files with 86 additions and 6 deletions

View File

@ -21,7 +21,6 @@ import android.view.animation.AccelerateDecelerateInterpolator
import android.view.animation.OvershootInterpolator
import android.widget.ImageView
import androidx.core.view.children
import com.simplemobiletools.commons.dialogs.SimpleBottomSheetChooserDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.LOWER_ALPHA
import com.simplemobiletools.commons.helpers.MINUTE_SECONDS
@ -29,6 +28,7 @@ import com.simplemobiletools.commons.helpers.isOreoMr1Plus
import com.simplemobiletools.commons.helpers.isOreoPlus
import com.simplemobiletools.commons.models.SimpleListItem
import com.simplemobiletools.dialer.R
import com.simplemobiletools.dialer.dialogs.DynamicBottomSheetChooserDialog
import com.simplemobiletools.dialer.extensions.*
import com.simplemobiletools.dialer.helpers.*
import com.simplemobiletools.dialer.models.AudioRoute
@ -61,7 +61,7 @@ class CallActivity : SimpleActivity() {
private var viewsUnderDialpad = arrayListOf<Pair<View, Float>>()
private var dialpadHeight = 0f
private var audioRouteChooserDialog: SimpleBottomSheetChooserDialog? = null
private var audioRouteChooserDialog: DynamicBottomSheetChooserDialog? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -399,19 +399,19 @@ class CallActivity : SimpleActivity() {
}
private fun createOrUpdateAudioRouteChooser(routes: Array<AudioRoute>, create: Boolean = true) {
val callAudioRoute = CallManager.getCallAudioRoute()
val items = routes
.sortedByDescending { it.route }
.map { SimpleListItem(it.route, it.iconRes, it.stringRes) }
.map { SimpleListItem(it.route, it.iconRes, it.stringRes, selected = it == callAudioRoute) }
.toTypedArray()
if (audioRouteChooserDialog?.isVisible == true) {
audioRouteChooserDialog?.updateChooserItems(items)
} else if (create) {
audioRouteChooserDialog = SimpleBottomSheetChooserDialog.createChooser(
audioRouteChooserDialog = DynamicBottomSheetChooserDialog.createChooser(
fragmentManager = supportFragmentManager,
title = R.string.choose_audio_route,
subtitle = null,
data = items
items = items
) {
audioRouteChooserDialog = null
CallManager.setAudioRoute(it.id)

View File

@ -0,0 +1,70 @@
package com.simplemobiletools.dialer.dialogs
import android.os.Bundle
import android.view.ViewGroup
import androidx.fragment.app.FragmentManager
import com.simplemobiletools.commons.adapters.SimpleListItemAdapter
import com.simplemobiletools.commons.fragments.BaseBottomSheetDialogFragment
import com.simplemobiletools.commons.models.SimpleListItem
import com.simplemobiletools.dialer.R
import kotlinx.android.synthetic.main.layout_simple_recycler_view.*
// same as BottomSheetChooserDialog but with dynamic updates
class DynamicBottomSheetChooserDialog : BaseBottomSheetDialogFragment() {
var onItemClick: ((SimpleListItem) -> Unit)? = null
override fun setupContentView(parent: ViewGroup) {
val child = layoutInflater.inflate(R.layout.layout_simple_recycler_view, parent, false)
parent.addView(child)
setupRecyclerView()
}
private fun setupRecyclerView() {
@Suppress("UNCHECKED_CAST")
val listItems = arguments?.getParcelableArray(ITEMS) as Array<SimpleListItem>
getRecyclerViewAdapter().submitList(listItems.toList())
}
private fun getRecyclerViewAdapter(): SimpleListItemAdapter {
var adapter = recycler_view.adapter as? SimpleListItemAdapter
if (adapter == null) {
adapter = SimpleListItemAdapter(requireActivity()) {
onItemClick?.invoke(it)
dismissAllowingStateLoss()
}
recycler_view.adapter = adapter
}
return adapter
}
fun updateChooserItems(newItems: Array<SimpleListItem>) {
if (isAdded) {
getRecyclerViewAdapter().submitList(newItems.toList())
}
}
companion object {
private const val TAG = "BottomSheetChooserDialog"
private const val ITEMS = "data"
fun createChooser(
fragmentManager: FragmentManager,
title: Int?,
items: Array<SimpleListItem>,
callback: (SimpleListItem) -> Unit
): DynamicBottomSheetChooserDialog {
val extras = Bundle().apply {
if (title != null) {
putInt(BOTTOM_SHEET_TITLE, title)
}
putParcelableArray(ITEMS, items)
}
return DynamicBottomSheetChooserDialog().apply {
arguments = extras
onItemClick = callback
show(fragmentManager, TAG)
}
}
}
}

View File

@ -0,0 +1,10 @@
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="3"
tools:listitem="@layout/item_simple_list" />