mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-25 15:58:12 +00:00
Update cell signal icon & color depending on call current quality
This commit is contained in:
parent
879b6b3b7e
commit
db486360cc
6 changed files with 72 additions and 6 deletions
|
|
@ -21,12 +21,18 @@ package org.linphone.ui.call.viewmodel
|
|||
|
||||
import android.Manifest
|
||||
import android.content.pm.PackageManager
|
||||
import androidx.annotation.AnyThread
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.annotation.WorkerThread
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import java.util.Locale
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.R
|
||||
|
|
@ -100,6 +106,10 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
|
|||
MutableLiveData<String>()
|
||||
}
|
||||
|
||||
val qualityValue = MutableLiveData<Float>()
|
||||
|
||||
val qualityIcon = MutableLiveData<Int>()
|
||||
|
||||
var terminatedByUsed = false
|
||||
|
||||
val isRemoteRecordingEvent: MutableLiveData<Event<Pair<Boolean, String>>> by lazy {
|
||||
|
|
@ -343,6 +353,8 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
|
|||
{ // OnCallClicked
|
||||
}
|
||||
)
|
||||
|
||||
updateCallQualityIcon()
|
||||
}
|
||||
|
||||
@UiThread
|
||||
|
|
@ -858,4 +870,29 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
|
|||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
@AnyThread
|
||||
private fun updateCallQualityIcon() {
|
||||
viewModelScope.launch {
|
||||
withContext(Dispatchers.IO) {
|
||||
delay(1000)
|
||||
coreContext.postOnCoreThread {
|
||||
if (::currentCall.isInitialized) {
|
||||
val quality = currentCall.currentQuality
|
||||
val icon = when {
|
||||
quality >= 4 -> R.drawable.cell_signal_full
|
||||
quality >= 3 -> R.drawable.cell_signal_high
|
||||
quality >= 2 -> R.drawable.cell_signal_medium
|
||||
quality >= 1 -> R.drawable.cell_signal_low
|
||||
else -> R.drawable.cell_signal_none
|
||||
}
|
||||
qualityValue.postValue(quality)
|
||||
qualityIcon.postValue(icon)
|
||||
}
|
||||
|
||||
updateCallQualityIcon()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
9
app/src/main/res/drawable/cell_signal_high.xml
Normal file
9
app/src/main/res/drawable/cell_signal_high.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="256"
|
||||
android:viewportHeight="256">
|
||||
<path
|
||||
android:pathData="M168,72L168,200a8,8 0,0 1,-16 0L152,72a8,8 0,0 1,16 0ZM120,104a8,8 0,0 0,-8 8v88a8,8 0,0 0,16 0L128,112A8,8 0,0 0,120 104ZM80,144a8,8 0,0 0,-8 8v48a8,8 0,0 0,16 0L88,152A8,8 0,0 0,80 144ZM40,184a8,8 0,0 0,-8 8v8a8,8 0,0 0,16 0v-8A8,8 0,0 0,40 184Z"
|
||||
android:fillColor="#4e6074"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/cell_signal_medium.xml
Normal file
9
app/src/main/res/drawable/cell_signal_medium.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="256"
|
||||
android:viewportHeight="256">
|
||||
<path
|
||||
android:pathData="M128,112v88a8,8 0,0 1,-16 0V112a8,8 0,0 1,16 0ZM80,144a8,8 0,0 0,-8 8v48a8,8 0,0 0,16 0V152A8,8 0,0 0,80 144ZM40,184a8,8 0,0 0,-8 8v8a8,8 0,0 0,16 0v-8A8,8 0,0 0,40 184Z"
|
||||
android:fillColor="#4e6074"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/cell_signal_none.xml
Normal file
9
app/src/main/res/drawable/cell_signal_none.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="256"
|
||||
android:viewportHeight="256">
|
||||
<path
|
||||
android:pathData="M48,192v8a8,8 0,0 1,-16 0v-8a8,8 0,0 1,16 0Z"
|
||||
android:fillColor="#4e6074"/>
|
||||
</vector>
|
||||
|
|
@ -139,12 +139,13 @@
|
|||
android:layout_width="@dimen/call_top_bar_info_height"
|
||||
android:layout_height="@dimen/call_top_bar_info_height"
|
||||
android:padding="10dp"
|
||||
android:src="@drawable/cell_signal_full"
|
||||
android:src="@{viewModel.qualityIcon, default=@drawable/cell_signal_full}"
|
||||
android:visibility="@{!viewModel.fullScreenMode && !viewModel.pipMode ? View.VISIBLE : View.GONE}"
|
||||
app:tint="@color/white"
|
||||
android:tint="@{viewModel.qualityValue >= 2 ? @color/white : viewModel.qualityValue >= 1 ? @color/orange_warning_600 : @color/red_danger_500, default=@color/white}"
|
||||
app:layout_constraintTop_toTopOf="@id/conference_subject"
|
||||
app:layout_constraintBottom_toBottomOf="@id/conference_subject"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
bind:ignore="UseAppTint" />
|
||||
|
||||
<ImageView
|
||||
style="@style/default_text_style"
|
||||
|
|
|
|||
|
|
@ -212,12 +212,13 @@
|
|||
android:layout_width="@dimen/call_top_bar_info_height"
|
||||
android:layout_height="@dimen/call_top_bar_info_height"
|
||||
android:padding="10dp"
|
||||
android:src="@drawable/cell_signal_full"
|
||||
android:src="@{viewModel.qualityIcon, default=@drawable/cell_signal_full}"
|
||||
android:visibility="@{!viewModel.fullScreenMode && !viewModel.pipMode ? View.VISIBLE : View.GONE}"
|
||||
app:tint="@color/white"
|
||||
android:tint="@{viewModel.qualityValue >= 2 ? @color/white : viewModel.qualityValue >= 1 ? @color/orange_warning_600 : @color/red_danger_500, default=@color/white}"
|
||||
app:layout_constraintTop_toTopOf="@id/back"
|
||||
app:layout_constraintBottom_toBottomOf="@id/back"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
bind:ignore="UseAppTint" />
|
||||
|
||||
<ImageView
|
||||
style="@style/default_text_style"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue