Updated numpad to show letters

This commit is contained in:
Sylvain Berfini 2025-01-11 14:15:12 +01:00
parent 099350244a
commit fbe5885d08
7 changed files with 280 additions and 162 deletions

View file

@ -280,6 +280,10 @@ class CorePreferences
val automaticallyShowDialpad: Boolean
get() = config.getBool("ui", "automatically_show_dialpad", false)
@get:WorkerThread
val showLettersOnDialpad: Boolean
get() = config.getBool("ui", "show_letters_on_dialpad", true)
// Paths
@get:WorkerThread

View file

@ -22,7 +22,9 @@ package org.linphone.ui.main.history.model
import androidx.annotation.UiThread
import androidx.lifecycle.MutableLiveData
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.core.tools.Log
import org.linphone.utils.LinphoneUtils
open class NumpadModel
@UiThread
@ -40,6 +42,20 @@ open class NumpadModel
val digits = MutableLiveData<String>()
val voicemailAvailable = MutableLiveData<Boolean>()
val showLetters = MutableLiveData<Boolean>()
init {
coreContext.postOnCoreThread {
showLetters.postValue(corePreferences.showLettersOnDialpad)
val account = LinphoneUtils.getDefaultAccount()
val voicemailAddress = account?.params?.voicemailAddress
voicemailAvailable.postValue(voicemailAddress != null)
}
}
@UiThread
fun onDigitClicked(value: String) {
Log.i("$TAG Clicked on digit [$value]")
@ -54,16 +70,22 @@ open class NumpadModel
@UiThread
fun onDigitLongClicked(value: String): Boolean {
Log.i("$TAG Long clicked on digit [$value]")
onDigitClicked.invoke(value)
return true
if (value == "0") { // Special case
Log.i("$TAG Long clicked on digit [$value]")
onDigitClicked.invoke("+")
return true
}
return false
}
@UiThread
fun onVoicemailLongClicked(): Boolean {
Log.i("$TAG Long clicked on voicemail icon")
onVoicemailClicked.invoke()
return true
if (voicemailAvailable.value == true) {
Log.i("$TAG Long clicked on voicemail icon")
onVoicemailClicked.invoke()
return true
}
return false
}
@UiThread

View file

@ -19,7 +19,7 @@
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:text="@{digit}"
android:text="@{digit, default=`#`}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"

View file

@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="digit"
type="String" />
@ -16,6 +17,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:onClick="@{() -> model.onDigitClicked(digit)}"
android:onLongClick="@{() -> model.onDigitLongClicked(digit)}"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
android:background="@drawable/in_call_button_background_red">
@ -44,6 +46,7 @@
android:textSize="14sp"
android:includeFontPadding="false"
android:textColor="@color/bc_white"
android:visibility="@{model.showLetters ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toBottomOf="@id/digit_label"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="digit"
type="String" />
<variable
name="model"
type="org.linphone.ui.main.history.model.NumpadModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:onClick="@{() -> model.onDigitClicked(digit)}"
android:onLongClick="@{() -> model.onDigitLongClicked(digit)}"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
android:background="@drawable/in_call_button_background_red">
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/digit_label"
android:text="@{digit, default=`0`}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:includeFontPadding="false"
android:textColor="@color/bc_white"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/letters_label"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/letters_label"
android:text="+"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:includeFontPadding="false"
android:textColor="@color/bc_white"
app:layout_constraintTop_toBottomOf="@id/digit_label"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="digit"
type="String" />
<variable
name="letters"
type="String" />
<variable
name="model"
type="org.linphone.ui.main.history.model.NumpadModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:onClick="@{() -> model.onDigitClicked(digit)}"
android:onLongClick="@{() -> model.onVoicemailLongClicked()}"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
android:background="@drawable/in_call_button_background_red">
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/digit_label"
android:text="@{digit, default=`1`}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:includeFontPadding="false"
android:textColor="@color/bc_white"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/letters_drawable"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/letters_drawable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/voicemail"
android:visibility="@{model.voicemailAvailable ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toBottomOf="@id/digit_label"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:tint="@color/bc_white" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
xmlns:bind="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
@ -21,8 +21,7 @@
android:focusable="true"
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
tools:ignore="HardcodedText">
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<com.google.android.material.bottomsheet.BottomSheetDragHandleView
android:id="@+id/handle"
@ -36,163 +35,147 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`1`)}"
android:onLongClick="@{() -> model.onVoicemailLongClicked()}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_1"
android:layout_width="wrap_content"
<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/flow"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="1"
android:textSize="24sp"
android:drawableBottom="@drawable/voicemail"
android:drawableTint="@color/gray_main2_600"
app:layout_constraintTop_toTopOf="@id/digit_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/digit_2"
app:layout_constraintBottom_toBottomOf="@id/digit_2"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`2`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_2"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="14dp"
android:text="2"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toEndOf="@id/digit_1"
app:layout_constraintEnd_toStartOf="@id/digit_3"
app:layout_constraintBottom_toTopOf="@id/digit_5"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`3`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_3"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="3"
app:layout_constraintTop_toTopOf="@id/digit_2"
app:layout_constraintStart_toEndOf="@id/digit_2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/digit_2"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`4`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_4"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="4"
app:layout_constraintTop_toTopOf="@id/digit_5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/digit_5"
app:layout_constraintBottom_toBottomOf="@id/digit_5"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`5`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_5"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:text="5"
app:layout_constraintTop_toBottomOf="@id/digit_2"
app:layout_constraintStart_toEndOf="@id/digit_4"
app:layout_constraintEnd_toStartOf="@id/digit_6"
app:layout_constraintBottom_toTopOf="@id/digit_8"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`6`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_6"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="6"
app:layout_constraintTop_toTopOf="@id/digit_5"
app:layout_constraintStart_toEndOf="@id/digit_5"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/digit_5"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`7`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_7"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="7"
app:layout_constraintTop_toTopOf="@id/digit_8"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/digit_8"
app:layout_constraintBottom_toBottomOf="@id/digit_8"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`8`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_8"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:text="8"
app:layout_constraintTop_toBottomOf="@id/digit_5"
app:layout_constraintStart_toEndOf="@id/digit_7"
app:layout_constraintEnd_toStartOf="@id/digit_9"
app:layout_constraintBottom_toTopOf="@id/digit_0"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`9`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_9"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="9"
app:layout_constraintTop_toTopOf="@id/digit_8"
app:layout_constraintStart_toEndOf="@id/digit_8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/digit_8"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`*`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_star"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="*"
app:layout_constraintTop_toTopOf="@id/digit_0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/digit_0"
app:layout_constraintBottom_toBottomOf="@id/digit_0"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`0`)}"
android:onLongClick="@{() -> model.onDigitLongClicked(`+`)}"
style="@style/call_start_numpad_digits_style"
android:id="@+id/digit_0"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="10dp"
app:layout_constraintBottom_toTopOf="@id/call"
android:layout_marginBottom="20dp"
android:text="0"
android:textSize="24sp"
android:drawableBottom="@drawable/plus"
android:drawableTint="@color/gray_main2_600"
app:layout_constraintTop_toBottomOf="@id/digit_8"
app:layout_constraintStart_toEndOf="@id/digit_star"
app:layout_constraintEnd_toStartOf="@id/digit_sharp"
app:layout_constraintBottom_toTopOf="@id/call"/>
app:flow_horizontalStyle="spread"
app:flow_wrapMode="aligned"
app:flow_verticalGap="10dp"
app:flow_maxElementsWrap="3"
app:constraint_referenced_ids="digit_1, digit_2, digit_3, digit_4, digit_5, digit_6, digit_7, digit_8, digit_9, digit_star, digit_0, digit_sharp" />
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> model.onDigitClicked(`#`)}"
style="@style/call_start_numpad_digits_style"
<include
android:id="@+id/digit_1"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_voicemail"
bind:digit="@{`1`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_2"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_letters"
bind:digit="@{`2`}"
bind:letters="@{`abc`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_3"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_letters"
bind:digit="@{`3`}"
bind:letters="@{`def`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_4"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_letters"
bind:digit="@{`4`}"
bind:letters="@{`ghi`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_5"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_letters"
bind:digit="@{`5`}"
bind:letters="@{`jkl`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_6"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_letters"
bind:digit="@{`6`}"
bind:letters="@{`mno`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_7"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_letters"
bind:digit="@{`7`}"
bind:letters="@{`pqrs`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_8"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_letters"
bind:digit="@{`8`}"
bind:letters="@{`tuv`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_9"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_letters"
bind:digit="@{`9`}"
bind:letters="@{`wxyz`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_star"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit"
bind:digit="@{`*`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_0"
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit_with_plus"
bind:digit="@{`0`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<include
android:id="@+id/digit_sharp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#"
app:layout_constraintTop_toTopOf="@id/digit_0"
app:layout_constraintStart_toEndOf="@id/digit_0"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/digit_0"/>
android:layout_width="@dimen/call_dtmf_button_size"
android:layout_height="@dimen/call_dtmf_button_size"
layout="@layout/call_numpad_digit"
bind:digit="@{`#`}"
bind:model="@{model}"
app:layout_constraintTop_toBottomOf="@id/handle"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/call"
@ -203,7 +186,6 @@
android:paddingTop="15dp"
android:paddingEnd="30dp"
android:paddingBottom="15dp"
android:layout_marginBottom="20dp"
android:src="@drawable/phone"
android:contentDescription="@string/content_description_call_start"
android:elevation="3dp"