Code cleanup

This commit is contained in:
Sylvain Berfini 2023-09-11 17:09:51 +02:00
parent e3022f42ab
commit 036301e34f
58 changed files with 85 additions and 486 deletions

View file

@ -105,6 +105,7 @@ dependencies {
implementation platform('com.google.firebase:firebase-bom:32.2.3')
implementation 'com.google.firebase:firebase-messaging'
//noinspection GradleDynamicVersion
implementation 'org.linphone:linphone-sdk-android:5.3+'
}

View file

@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
@ -41,8 +46,7 @@
<activity
android:name=".ui.main.MainActivity"
android:windowSoftInputMode="adjustResize"
android:exported="true"
android:label="@string/app_name">
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View file

@ -28,13 +28,13 @@ import org.linphone.core.tools.Log
class NotificationBroadcastReceiver : BroadcastReceiver() {
companion object {
private const val TAG = "[NotificationBroadcastReceiver]"
private const val TAG = "[Notification Broadcast Receiver]"
}
override fun onReceive(context: Context, intent: Intent) {
val notificationId = intent.getIntExtra(NotificationsManager.INTENT_NOTIF_ID, 0)
Log.i(
"[Notification Broadcast Receiver] Got notification broadcast for ID [$notificationId]"
"$TAG Got notification broadcast for ID [$notificationId]"
)
if (intent.action == NotificationsManager.INTENT_ANSWER_CALL_NOTIF_ACTION || intent.action == NotificationsManager.INTENT_HANGUP_CALL_NOTIF_ACTION) {
@ -45,14 +45,14 @@ class NotificationBroadcastReceiver : BroadcastReceiver() {
private fun handleCallIntent(intent: Intent) {
val callId = intent.getStringExtra(NotificationsManager.INTENT_CALL_ID)
if (callId == null) {
Log.e("[Notification Broadcast Receiver] Remote SIP address is null for notification")
Log.e("$TAG Remote SIP address is null for notification")
return
}
coreContext.postOnCoreThread { core ->
val call = core.getCallByCallid(callId)
if (call == null) {
Log.e("[Notification Broadcast Receiver] Couldn't find call from ID [$callId]")
Log.e("$TAG Couldn't find call from ID [$callId]")
} else {
if (intent.action == NotificationsManager.INTENT_ANSWER_CALL_NOTIF_ACTION) {
coreContext.answerCall(call)

View file

@ -22,8 +22,6 @@ class CallLogModel @WorkerThread constructor(private val callLog: CallLog) {
val avatarModel: ContactAvatarModel
val isOutgoing = MutableLiveData<Boolean>()
@IntegerRes
val iconResId = MutableLiveData<Int>()
@ -34,8 +32,6 @@ class CallLogModel @WorkerThread constructor(private val callLog: CallLog) {
var friendExists: Boolean = false
init {
isOutgoing.postValue(callLog.dir == Dir.Outgoing)
val timestamp = timestamp
val displayedDate = if (TimestampUtils.isToday(timestamp)) {
TimestampUtils.timeToString(timestamp)

View file

@ -134,11 +134,11 @@ class ContactViewModel @UiThread constructor() : ViewModel() {
val organization = friend.organization
if (!organization.isNullOrEmpty()) {
company.postValue(organization)
company.postValue(organization!!)
}
val jobTitle = friend.jobTitle
if (!jobTitle.isNullOrEmpty()) {
title.postValue(jobTitle)
title.postValue(jobTitle!!)
}
val addressesAndNumbers = friend.getListOfSipAddressesAndPhoneNumbers(listener)

View file

@ -79,8 +79,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
applyFilter(
currentFilter,
if (limitSearchToLinphoneAccounts) corePreferences.defaultDomain else "",
MagicSearch.Source.Friends.toInt() or MagicSearch.Source.LdapServers.toInt(),
MagicSearch.Aggregation.Friend
MagicSearch.Source.Friends.toInt() or MagicSearch.Source.LdapServers.toInt()
)
}
}
@ -180,8 +179,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
applyFilter(
filter,
if (limitSearchToLinphoneAccounts) corePreferences.defaultDomain else "",
MagicSearch.Source.Friends.toInt() or MagicSearch.Source.LdapServers.toInt(),
MagicSearch.Aggregation.Friend
MagicSearch.Source.Friends.toInt() or MagicSearch.Source.LdapServers.toInt()
)
}
}
@ -217,8 +215,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
private fun applyFilter(
filter: String,
domain: String,
sources: Int,
aggregation: MagicSearch.Aggregation
sources: Int
) {
if (previousFilter.isNotEmpty() && (
previousFilter.length > filter.length ||
@ -237,7 +234,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
filter,
domain,
sources,
aggregation
MagicSearch.Aggregation.Friend
)
}

View file

@ -53,9 +53,6 @@ class DrawerMenuViewModel @UiThread constructor() : ViewModel() {
MutableLiveData<Event<String>>()
}
init {
}
@UiThread
override fun onCleared() {
coreContext.postOnCoreThread {

View file

@ -37,10 +37,6 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() {
MutableLiveData<Event<Boolean>>()
}
val navigateToConversationsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
val navigateToCallsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}

View file

@ -34,7 +34,6 @@ import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowInfoTracker
import androidx.window.layout.WindowLayoutInfo

View file

@ -19,6 +19,7 @@
*/
package org.linphone.ui.voip.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.os.SystemClock
import android.view.LayoutInflater
@ -186,6 +187,7 @@ class ActiveCallFragment : GenericCallFragment() {
})
}
@SuppressLint("ClickableViewAccessibility")
override fun onResume() {
super.onResume()
@ -196,6 +198,7 @@ class ActiveCallFragment : GenericCallFragment() {
}
}
@SuppressLint("ClickableViewAccessibility")
override fun onPause() {
super.onPause()
binding.localPreviewVideoSurface.setOnTouchListener(null)

View file

@ -27,7 +27,7 @@ import org.linphone.core.tools.Log
import org.linphone.utils.Event
class ZrtpSasConfirmationDialogModel @UiThread constructor(
private val authTokenToRead: String,
authTokenToRead: String,
private val authTokenToListen: String
) : ViewModel() {
companion object {

View file

@ -37,6 +37,7 @@ import org.linphone.ui.assistant.AssistantActivity
import org.linphone.ui.welcome.fragment.WelcomePage1Fragment
import org.linphone.ui.welcome.fragment.WelcomePage2Fragment
import org.linphone.ui.welcome.fragment.WelcomePage3Fragment
import org.linphone.utils.AppUtils
class WelcomeActivity : AppCompatActivity() {
companion object {
@ -112,10 +113,10 @@ class WelcomeActivity : AppCompatActivity() {
override fun onPageSelected(position: Int) {
Log.i("$TAG Current page is [$position]")
if (position == PAGES - 1) {
binding.next.text = "Start"
binding.next.text = AppUtils.getString(R.string.start)
binding.skip.visibility = View.INVISIBLE
} else {
binding.next.text = "Next"
binding.next.text = AppUtils.getString(R.string.next)
binding.skip.visibility = View.VISIBLE
}
}

View file

@ -36,7 +36,6 @@ import androidx.annotation.ColorRes
import androidx.annotation.UiThread
import androidx.appcompat.widget.AppCompatEditText
import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
@ -308,14 +307,6 @@ fun AppCompatEditText.editTextSetting(lambda: () -> Unit) {
})
}
@BindingAdapter("android:layout_marginBottom")
fun setConstraintLayoutBottomMargin(view: View, margins: Float) {
val params = view.layoutParams as ConstraintLayout.LayoutParams
val m = margins.toInt()
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, m)
view.layoutParams = params
}
@BindingAdapter("focusNextOnInput")
fun focusNextOnInput(editText: EditText, enabled: Boolean) {
if (!enabled) return

View file

@ -136,14 +136,17 @@ class FileUtils {
try {
withContext(Dispatchers.IO) {
FileOutputStream(to).use { outputStream ->
val inputStream = FileInputStream(
coreContext.context.contentResolver.openFileDescriptor(from, "r")?.fileDescriptor
val fileDescriptor = coreContext.context.contentResolver.openFileDescriptor(
from,
"r"
)
val inputStream = FileInputStream(fileDescriptor?.fileDescriptor)
val buffer = ByteArray(4096)
var bytesRead: Int
while (inputStream.read(buffer).also { bytesRead = it } >= 0) {
outputStream.write(buffer, 0, bytesRead)
}
fileDescriptor?.close()
}
}
return true

View file

@ -19,13 +19,16 @@
*/
package org.linphone.utils
import android.Manifest
import android.bluetooth.BluetoothAdapter
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.provider.Settings
import androidx.annotation.AnyThread
import androidx.annotation.IntegerRes
import androidx.annotation.WorkerThread
import androidx.core.app.ActivityCompat
import androidx.emoji2.text.EmojiCompat
import java.util.Locale
import org.linphone.LinphoneApplication.Companion.coreContext
@ -35,7 +38,6 @@ import org.linphone.core.Address
import org.linphone.core.Call
import org.linphone.core.Call.Dir
import org.linphone.core.Call.Status
import org.linphone.core.ChatRoom
import org.linphone.core.tools.Log
class LinphoneUtils {
@ -145,20 +147,6 @@ class LinphoneUtils {
}
}
@WorkerThread
private fun getChatRoomId(localAddress: Address, remoteAddress: Address): String {
val localSipUri = localAddress.clone()
localSipUri.clean()
val remoteSipUri = remoteAddress.clone()
remoteSipUri.clean()
return "${localSipUri.asStringUriOnly()}~${remoteSipUri.asStringUriOnly()}"
}
@WorkerThread
fun getChatRoomId(chatRoom: ChatRoom): String {
return getChatRoomId(chatRoom.localAddress, chatRoom.peerAddress)
}
@AnyThread
fun getDeviceName(context: Context): String {
var name = Settings.Global.getString(
@ -166,8 +154,14 @@ class LinphoneUtils {
Settings.Global.DEVICE_NAME
)
if (name == null) {
val adapter = BluetoothAdapter.getDefaultAdapter()
name = adapter?.name
if (ActivityCompat.checkSelfPermission(
context,
Manifest.permission.BLUETOOTH_CONNECT
) == PackageManager.PERMISSION_GRANTED
) {
val adapter = BluetoothAdapter.getDefaultAdapter()
name = adapter?.name
}
}
if (name == null) {
name = Settings.Secure.getString(

View file

@ -44,23 +44,6 @@ class TimestampUtils {
return isSameDay(cal, yesterday)
}
@AnyThread
fun isSameDay(timestamp1: Long, timestamp2: Long, timestampInSecs: Boolean = true): Boolean {
val cal1 = Calendar.getInstance()
cal1.timeInMillis = if (timestampInSecs) timestamp1 * 1000 else timestamp1
val cal2 = Calendar.getInstance()
cal2.timeInMillis = if (timestampInSecs) timestamp2 * 1000 else timestamp2
return isSameDay(cal1, cal2)
}
@AnyThread
fun isSameDay(
cal1: Date,
cal2: Date
): Boolean {
return isSameDay(cal1.time, cal2.time, false)
}
@AnyThread
fun dateToString(date: Long, timestampInSecs: Boolean = true): String {
val dateFormat: Format = android.text.format.DateFormat.getDateFormat(
@ -77,22 +60,6 @@ class TimestampUtils {
return dateFormatter.format(calendar.time)
}
@AnyThread
fun timeToString(hour: Int, minutes: Int): String {
val use24hFormat = android.text.format.DateFormat.is24HourFormat(
coreContext.context
)
val calendar = Calendar.getInstance()
calendar.set(Calendar.HOUR_OF_DAY, hour)
calendar.set(Calendar.MINUTE, minutes)
return if (use24hFormat) {
SimpleDateFormat("HH'h'mm", Locale.getDefault()).format(calendar.time)
} else {
SimpleDateFormat("h:mm a", Locale.getDefault()).format(calendar.time)
}
}
@AnyThread
fun timeToString(time: Long, timestampInSecs: Boolean = true): String {
val use24hFormat = android.text.format.DateFormat.is24HourFormat(
@ -119,21 +86,6 @@ class TimestampUtils {
return dateFormat.format(cal.time)
}
@AnyThread
fun durationToString(hours: Int, minutes: Int): String {
val calendar = Calendar.getInstance()
calendar.set(Calendar.HOUR_OF_DAY, hours)
calendar.set(Calendar.MINUTE, minutes)
val pattern = when {
hours == 0 -> "mm'min'"
hours < 10 && minutes == 0 -> "H'h'"
hours < 10 && minutes > 0 -> "H'h'mm"
hours >= 10 && minutes == 0 -> "HH'h'"
else -> "HH'h'mm"
}
return SimpleDateFormat(pattern, Locale.getDefault()).format(calendar.time)
}
@AnyThread
private fun isSameYear(timestamp: Long, timestampInSecs: Boolean = true): Boolean {
val cal = Calendar.getInstance()

View file

@ -1,30 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

View file

@ -1,21 +0,0 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="vector"
android:width="38dp"
android:height="36dp"
android:viewportWidth="38"
android:viewportHeight="36">
<group android:name="group">
<path
android:name="path"
android:pathData="M 25 0 C 21.554 0 18.245 1.371 15.808 3.808 C 13.371 6.245 12 9.554 12 13 C 12 16.446 13.371 19.755 15.808 22.192 C 18.245 24.629 21.554 26 25 26 C 28.446 26 31.755 24.629 34.192 22.192 C 36.629 19.755 38 16.446 38 13 C 38 9.554 36.629 6.245 34.192 3.808 C 31.755 1.371 28.446 0 25 0 Z"
android:fillColor="#6C7A87"
android:strokeWidth="1"/>
<path
android:name="path_1"
android:pathData="M 13 11 C 9.819 11 6.764 12.265 4.515 14.515 C 2.265 16.764 1 19.819 1 23 C 1 26.181 2.265 29.236 4.515 31.485 C 6.764 33.735 9.819 35 13 35 C 16.181 35 19.236 33.735 21.485 31.485 C 23.735 29.236 25 26.181 25 23 C 25 19.819 23.735 16.764 21.485 14.515 C 19.236 12.265 16.181 11 13 11 Z"
android:fillColor="#6C7A87"
android:strokeColor="#fafeff"
android:strokeWidth="2"/>
</group>
</vector>

View file

@ -1,170 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>

View file

@ -1,13 +0,0 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="vector"
android:width="12dp"
android:height="12dp"
android:viewportWidth="12"
android:viewportHeight="12">
<path
android:name="path"
android:pathData="M 5 7.586 L 9.596 2.99 L 10.303 3.696 L 5 9 L 1.818 5.818 L 2.525 5.111 L 5 7.586 Z"
android:fillColor="#fe5e00"
android:strokeWidth="1"/>
</vector>

View file

@ -1,13 +0,0 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="vector"
android:width="12dp"
android:height="12dp"
android:viewportWidth="12"
android:viewportHeight="12">
<path
android:name="path"
android:pathData="M 5.801 6.88 L 6.507 7.586 L 10.74 3.353 L 11.447 4.06 L 6.507 9 L 3.325 5.818 L 4.032 5.111 L 5.095 6.173 L 5.801 6.879 L 5.801 6.88 Z M 5.802 5.466 L 8.278 2.989 L 8.983 3.694 L 6.507 6.171 L 5.802 5.466 Z M 4.388 8.293 L 3.682 9 L 0.5 5.818 L 1.207 5.111 L 1.913 5.817 L 1.913 5.818 L 4.388 8.293 Z"
android:fillColor="#FF5E00"
android:strokeWidth="1"/>
</vector>

View file

@ -1,13 +0,0 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="vector"
android:width="12dp"
android:height="12dp"
android:viewportWidth="12"
android:viewportHeight="12">
<path
android:name="path"
android:pathData="M 10 2 L 2 2 C 1.45 2 1 2.45 1 3 L 1 9 C 1 9.55 1.45 10 2 10 L 6.5 10 L 6.5 9 L 2 9 L 2 4 L 6 6.5 L 10 4 L 10 6.5 L 11 6.5 L 11 3 C 11 2.45 10.55 2 10 2 Z M 6 5.5 L 2 3 L 10 3 L 6 5.5 Z M 9.5 7.5 L 11.5 9.5 L 9.5 11.5 L 9.5 10 L 7.5 10 L 7.5 9 L 9.5 9 L 9.5 7.5 Z"
android:fillColor="#6c7a87"
android:strokeWidth="1"/>
</vector>

View file

@ -1,9 +0,0 @@
<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,24A104,104 0,1 0,232 128,104.11 104.11,0 0,0 128,24ZM128,216a88,88 0,1 1,88 -88A88.1,88.1 0,0 1,128 216ZM144,176a8,8 0,0 1,-8 8,16 16,0 0,1 -16,-16L120,128a8,8 0,0 1,0 -16,16 16,0 0,1 16,16v40A8,8 0,0 1,144 176ZM112,84a12,12 0,1 1,12 12A12,12 0,0 1,112 84Z"
android:fillColor="#4e6074"/>
</vector>

View file

@ -1,9 +0,0 @@
<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="M224,128a8,8 0,0 1,-8 8H40a8,8 0,0 1,0 -16H216A8,8 0,0 1,224 128ZM40,72H216a8,8 0,0 0,0 -16H40a8,8 0,0 0,0 16ZM216,184H40a8,8 0,0 0,0 16H216a8,8 0,0 0,0 -16Z"
android:fillColor="#4e6074"/>
</vector>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid android:color="@color/primary_color"/>
<size android:width="14dp" android:height="14dp"/>
</shape>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:topLeftRadius="30dp" android:topRightRadius="30dp" />
<solid android:color="@color/gray_7"/>
</shape>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:topRightRadius="16dp" android:bottomLeftRadius="16dp" android:bottomRightRadius="16dp" />
<solid android:color="@color/gray_incoming_message"/>
</shape>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:topLeftRadius="16dp" android:topRightRadius="16dp" android:bottomLeftRadius="16dp" />
<solid android:color="@color/blue_outgoing_message"/>
</shape>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="50dp" />
<solid android:color="@color/white"/>
</shape>

View file

@ -1,31 +0,0 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="vector"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<group android:name="group_1">
<path
android:name="path_2"
android:pathData="M 12 22 L 12 18.839"
android:fillColor="#000"
android:fillAlpha="0"
android:strokeColor="#6c7a87"
android:strokeWidth="1"/>
<path
android:name="path_3"
android:pathData="M 12 14.848 C 9.757 14.848 7.938 13.022 7.938 10.768 L 7.938 6.081 C 7.938 3.827 9.757 2 12 2 C 14.244 2 16.062 3.827 16.062 6.081 L 16.062 10.768 C 16.062 13.022 14.244 14.848 12 14.848 Z"
android:fillColor="#000"
android:fillAlpha="0"
android:strokeColor="#6c7a87"
android:strokeWidth="1"/>
<path
android:name="path_4"
android:pathData="M 20 10.801 C 20 15.239 16.419 18.838 11.999 18.838 C 7.581 18.838 4 15.239 4 10.801"
android:fillColor="#000"
android:fillAlpha="0"
android:strokeColor="#6c7a87"
android:strokeWidth="1"/>
</group>
</vector>

View file

@ -63,7 +63,7 @@
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas commodo augue ut dictum. Fusce egestas tellus ut velit pulvinar commodo."
android:textColor="@color/gray_9"
android:textSize="14sp"
android:gravity="left"
android:gravity="start"
app:layout_constraintTop_toBottomOf="@id/page_title"
app:layout_constraintStart_toStartOf="@id/page_title"
app:layout_constraintEnd_toEndOf="parent"/>

View file

@ -63,7 +63,7 @@
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas commodo augue ut dictum. Fusce egestas tellus ut velit pulvinar commodo."
android:textColor="@color/gray_9"
android:textSize="14sp"
android:gravity="left"
android:gravity="start"
app:layout_constraintTop_toBottomOf="@id/page_title"
app:layout_constraintStart_toStartOf="@id/page_title"
app:layout_constraintEnd_toEndOf="parent"/>

View file

@ -63,7 +63,7 @@
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas commodo augue ut dictum. Fusce egestas tellus ut velit pulvinar commodo."
android:textColor="@color/gray_9"
android:textSize="14sp"
android:gravity="left"
android:gravity="start"
app:layout_constraintTop_toBottomOf="@id/page_title"
app:layout_constraintStart_toStartOf="@id/page_title"
app:layout_constraintEnd_toEndOf="parent"/>

View file

@ -17,6 +17,7 @@
android:id="@+id/country_prefix"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="5dp" />
android:paddingStart="5dp"
android:paddingEnd="5dp" />
</LinearLayout>

View file

@ -36,7 +36,7 @@
android:layout_margin="10dp">
<com.google.android.material.textfield.TextInputLayout
android:layout_toLeftOf="@id/clear_field"
android:layout_toStartOf="@id/clear_field"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/assistant_country_picker_hint">
@ -57,7 +57,7 @@
android:onClick="@{() -> searchCountry.setText(``)}"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:paddingLeft="5dp"
android:paddingRight="5dp"
@ -81,7 +81,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cancel"
android:gravity="right" />
android:gravity="end" />
</LinearLayout>

View file

@ -1,7 +1,6 @@
<?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:bind="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />

View file

@ -1,7 +1,6 @@
<?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:bind="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />

View file

@ -171,7 +171,8 @@
android:drawablePadding="10dp"
app:layout_constraintTop_toTopOf="@id/phone_number"
app:layout_constraintBottom_toBottomOf="@id/phone_number"
app:layout_constraintStart_toStartOf="@id/username" />
app:layout_constraintStart_toStartOf="@id/username"
bind:ignore="RtlSymmetry" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style_600"

View file

@ -1,7 +1,6 @@
<?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:bind="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />

View file

@ -1,7 +1,6 @@
<?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:bind="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />

View file

@ -1,7 +1,6 @@
<?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:bind="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />

View file

@ -38,7 +38,7 @@
android:layout_marginTop="20dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:gravity="left|center_vertical"
android:gravity="start|center_vertical"
android:text="@string/menu_add_address_to_contacts"
android:textSize="14sp"
android:textColor="@color/gray_1"
@ -61,7 +61,7 @@
android:layout_marginTop="20dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:gravity="left|center_vertical"
android:gravity="start|center_vertical"
android:text="@string/menu_see_existing_contact"
android:textSize="14sp"
android:textColor="@color/gray_1"
@ -82,7 +82,7 @@
android:layout_marginTop="15dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:gravity="left|center_vertical"
android:gravity="start|center_vertical"
android:text="@string/menu_copy_sip_address"
android:textSize="14sp"
android:textColor="@color/gray_1"
@ -104,7 +104,7 @@
android:layout_marginBottom="20dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:gravity="left|center_vertical"
android:gravity="start|center_vertical"
android:text="@string/menu_delete_history"
android:textSize="14sp"
android:textColor="@color/red_danger"

View file

@ -1,7 +1,6 @@
<?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:bind="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>

View file

@ -1,7 +1,6 @@
<?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:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View" />

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View" />

View file

@ -131,7 +131,7 @@
style="@style/in_call_extra_action_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Transfer"
android:text="@string/voip_action_call_transfer"
app:layout_constraintTop_toBottomOf="@id/transfer"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/new_call_label"/>
@ -141,7 +141,7 @@
style="@style/in_call_extra_action_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="New call"
android:text="@string/voip_action_start_new_call"
app:layout_constraintTop_toBottomOf="@id/new_call"
app:layout_constraintStart_toEndOf="@id/transfer_label"
app:layout_constraintEnd_toStartOf="@id/calls_list_label" />
@ -151,7 +151,7 @@
style="@style/in_call_extra_action_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Call list"
android:text="@string/voip_action_go_to_calls_list"
app:layout_constraintTop_toBottomOf="@id/calls_list"
app:layout_constraintStart_toEndOf="@id/new_call_label"
app:layout_constraintEnd_toStartOf="@id/dialer_label" />
@ -161,7 +161,7 @@
style="@style/in_call_extra_action_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Dialer"
android:text="@string/voip_action_show_dialer"
app:layout_constraintTop_toBottomOf="@id/dialer"
app:layout_constraintStart_toEndOf="@id/calls_list_label"
app:layout_constraintEnd_toEndOf="parent" />
@ -172,7 +172,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="Messages"
android:text="@string/voip_action_show_messages"
app:layout_constraintTop_toBottomOf="@id/chat"
app:layout_constraintStart_toStartOf="@id/transfer_label"
app:layout_constraintEnd_toEndOf="@id/transfer_label" />
@ -183,7 +183,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="Pause call"
android:text="@string/voip_action_pause_call"
app:layout_constraintTop_toBottomOf="@id/pause_call"
app:layout_constraintStart_toStartOf="@id/new_call_label"
app:layout_constraintEnd_toEndOf="@id/new_call_label" />
@ -194,7 +194,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="Record"
android:text="@string/voip_action_record_call"
app:layout_constraintTop_toBottomOf="@id/record_call"
app:layout_constraintStart_toStartOf="@id/calls_list_label"
app:layout_constraintEnd_toEndOf="@id/calls_list_label" />

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!--suppress ALL -->
<navigation 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"

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!--suppress ALL -->
<navigation 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"

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!--suppress ALL -->
<navigation 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"

View file

@ -1,4 +1,4 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<resources>
<!-- Base application theme. -->
<style name="Theme.Linphone" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Primary brand color. -->

View file

@ -10,9 +10,7 @@
<color name="white">#FFFFFF</color>
<color name="red_danger">#DD5F5F</color>
<color name="green_online">#4FAE80</color>
<color name="blue_filter">#09C5F4</color>
<color name="blue_outgoing_message">#DFECF2</color>
<color name="gray_incoming_message">#F4F4F7</color>
<color name="blue_trusted">#4AA8FF</color>
<color name="orange_away">#FFA645</color>
<color name="gray_offline">#E1E1E1</color>

View file

@ -23,14 +23,12 @@
<string name="phone_number">Phone number</string>
<string name="or">or</string>
<string name="next">next</string>
<string name="start">Start</string>
<string name="notification_channel_call_name">&appName; active calls notifications</string>
<string name="notification_channel_incoming_call_name">&appName; incoming calls notifications</string>
<string name="notification_channel_service_name">&appName; service notification</string>
<string name="incoming_call_notification_hangup_action_label">Hangup</string>
<string name="incoming_call_notification_answer_action_label">Answer</string>
<string name="bottom_navigation_contacts_label">Contacts</string>
<string name="bottom_navigation_calls_label">Calls</string>
<string name="bottom_navigation_conversations_label">Conversations</string>
@ -40,7 +38,7 @@
<string name="dialog_accept">Accept</string>
<string name="dialog_cancel">Cancel</string>
<string name="dialog_continue">Continue</string>
<string name="dialog_ok">Ok</string>
<string name="dialog_ok">OK</string>
<string name="dialog_call">Call</string>
<string name="dialog_delete">Delete</string>
<string name="dialog_do_not_show_anymore">Do not show this dialog anymore</string>
@ -163,6 +161,15 @@
<string name="operation_in_progress_overlay">Operation in progress, please wait</string>
<string name="voip_action_call_transfer">Transfer</string>
<string name="voip_action_start_new_call">New call</string>
<string name="voip_action_go_to_calls_list">Calls list</string>
<string name="voip_action_show_dialer">Dialer</string>
<string name="voip_action_show_messages">Messages</string>
<string name="voip_action_pause_call">Pause</string>
<string name="voip_action_resume_call">Pause</string>
<string name="voip_action_record_call">Record</string>
<!-- Keep <u></u> in following strings translations! -->
<string name="welcome_carousel_skip"><u>Skip</u></string>
<string name="assistant_forgotten_password"><u>Forgotten password?</u></string>

View file

@ -1,4 +1,4 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<resources>
<!-- Base application theme. -->
<style name="Theme.Linphone" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Primary brand color. -->