mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-06-05 21:49:23 +02:00
Highlight selected call audio route
This commit is contained in:
@@ -21,7 +21,6 @@ import android.view.animation.AccelerateDecelerateInterpolator
|
|||||||
import android.view.animation.OvershootInterpolator
|
import android.view.animation.OvershootInterpolator
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.core.view.children
|
import androidx.core.view.children
|
||||||
import com.simplemobiletools.commons.dialogs.SimpleBottomSheetChooserDialog
|
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.LOWER_ALPHA
|
import com.simplemobiletools.commons.helpers.LOWER_ALPHA
|
||||||
import com.simplemobiletools.commons.helpers.MINUTE_SECONDS
|
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.helpers.isOreoPlus
|
||||||
import com.simplemobiletools.commons.models.SimpleListItem
|
import com.simplemobiletools.commons.models.SimpleListItem
|
||||||
import com.simplemobiletools.dialer.R
|
import com.simplemobiletools.dialer.R
|
||||||
|
import com.simplemobiletools.dialer.dialogs.DynamicBottomSheetChooserDialog
|
||||||
import com.simplemobiletools.dialer.extensions.*
|
import com.simplemobiletools.dialer.extensions.*
|
||||||
import com.simplemobiletools.dialer.helpers.*
|
import com.simplemobiletools.dialer.helpers.*
|
||||||
import com.simplemobiletools.dialer.models.AudioRoute
|
import com.simplemobiletools.dialer.models.AudioRoute
|
||||||
@@ -61,7 +61,7 @@ class CallActivity : SimpleActivity() {
|
|||||||
private var viewsUnderDialpad = arrayListOf<Pair<View, Float>>()
|
private var viewsUnderDialpad = arrayListOf<Pair<View, Float>>()
|
||||||
private var dialpadHeight = 0f
|
private var dialpadHeight = 0f
|
||||||
|
|
||||||
private var audioRouteChooserDialog: SimpleBottomSheetChooserDialog? = null
|
private var audioRouteChooserDialog: DynamicBottomSheetChooserDialog? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -399,19 +399,19 @@ class CallActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createOrUpdateAudioRouteChooser(routes: Array<AudioRoute>, create: Boolean = true) {
|
private fun createOrUpdateAudioRouteChooser(routes: Array<AudioRoute>, create: Boolean = true) {
|
||||||
|
val callAudioRoute = CallManager.getCallAudioRoute()
|
||||||
val items = routes
|
val items = routes
|
||||||
.sortedByDescending { it.route }
|
.sortedByDescending { it.route }
|
||||||
.map { SimpleListItem(it.route, it.iconRes, it.stringRes) }
|
.map { SimpleListItem(it.route, it.iconRes, it.stringRes, selected = it == callAudioRoute) }
|
||||||
.toTypedArray()
|
.toTypedArray()
|
||||||
|
|
||||||
if (audioRouteChooserDialog?.isVisible == true) {
|
if (audioRouteChooserDialog?.isVisible == true) {
|
||||||
audioRouteChooserDialog?.updateChooserItems(items)
|
audioRouteChooserDialog?.updateChooserItems(items)
|
||||||
} else if (create) {
|
} else if (create) {
|
||||||
audioRouteChooserDialog = SimpleBottomSheetChooserDialog.createChooser(
|
audioRouteChooserDialog = DynamicBottomSheetChooserDialog.createChooser(
|
||||||
fragmentManager = supportFragmentManager,
|
fragmentManager = supportFragmentManager,
|
||||||
title = R.string.choose_audio_route,
|
title = R.string.choose_audio_route,
|
||||||
subtitle = null,
|
items = items
|
||||||
data = items
|
|
||||||
) {
|
) {
|
||||||
audioRouteChooserDialog = null
|
audioRouteChooserDialog = null
|
||||||
CallManager.setAudioRoute(it.id)
|
CallManager.setAudioRoute(it.id)
|
||||||
|
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
app/src/main/res/layout/layout_simple_recycler_view.xml
Normal file
10
app/src/main/res/layout/layout_simple_recycler_view.xml
Normal 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" />
|
Reference in New Issue
Block a user