diff --git a/app/src/main/java/org/linphone/ui/assistant/AssistantActivity.kt b/app/src/main/java/org/linphone/ui/assistant/AssistantActivity.kt
index f80788bdf..41b6de5f1 100644
--- a/app/src/main/java/org/linphone/ui/assistant/AssistantActivity.kt
+++ b/app/src/main/java/org/linphone/ui/assistant/AssistantActivity.kt
@@ -20,6 +20,8 @@
package org.linphone.ui.assistant
import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
import android.view.ViewGroup
import androidx.annotation.DrawableRes
import androidx.annotation.UiThread
@@ -30,6 +32,8 @@ import androidx.lifecycle.lifecycleScope
import org.linphone.LinphoneApplication
import org.linphone.R
import org.linphone.databinding.AssistantActivityBinding
+import org.linphone.databinding.ToastGreenBinding
+import org.linphone.databinding.ToastRedBinding
import org.linphone.utils.slideInToastFromTopForDuration
@UiThread
@@ -49,18 +53,38 @@ class AssistantActivity : AppCompatActivity() {
}
fun showGreenToast(message: String, @DrawableRes icon: Int) {
- binding.greenToast.message = message
- binding.greenToast.icon = icon
+ val greenToast: ToastGreenBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(this),
+ R.layout.toast_green,
+ binding.toastsArea,
+ false
+ )
+ greenToast.message = message
+ greenToast.icon = icon
+ greenToast.root.visibility = View.GONE
+ binding.toastsArea.addView(greenToast.root)
- val target = binding.greenToast.root
- target.slideInToastFromTopForDuration(binding.root as ViewGroup, lifecycleScope)
+ greenToast.root.slideInToastFromTopForDuration(
+ binding.toastsArea as ViewGroup,
+ lifecycleScope
+ )
}
fun showRedToast(message: String, @DrawableRes icon: Int) {
- binding.redToast.message = message
- binding.redToast.icon = icon
+ val redToast: ToastRedBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(this),
+ R.layout.toast_red,
+ binding.toastsArea,
+ false
+ )
+ redToast.message = message
+ redToast.icon = icon
+ redToast.root.visibility = View.GONE
+ binding.toastsArea.addView(redToast.root)
- val target = binding.redToast.root
- target.slideInToastFromTopForDuration(binding.root as ViewGroup, lifecycleScope)
+ redToast.root.slideInToastFromTopForDuration(
+ binding.toastsArea as ViewGroup,
+ lifecycleScope
+ )
}
}
diff --git a/app/src/main/java/org/linphone/ui/main/MainActivity.kt b/app/src/main/java/org/linphone/ui/main/MainActivity.kt
index 760cdce82..d73b45384 100644
--- a/app/src/main/java/org/linphone/ui/main/MainActivity.kt
+++ b/app/src/main/java/org/linphone/ui/main/MainActivity.kt
@@ -24,6 +24,8 @@ import android.annotation.SuppressLint
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
import android.view.ViewGroup
import androidx.annotation.DrawableRes
import androidx.annotation.UiThread
@@ -36,6 +38,7 @@ import androidx.navigation.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.databinding.MainActivityBinding
+import org.linphone.databinding.ToastGreenBinding
import org.linphone.utils.slideInToastFromTopForDuration
@UiThread
@@ -136,11 +139,21 @@ class MainActivity : AppCompatActivity() {
}
fun showGreenToast(message: String, @DrawableRes icon: Int) {
- binding.greenToast.message = message
- binding.greenToast.icon = icon
+ val greenToast: ToastGreenBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(this),
+ R.layout.toast_green,
+ binding.toastsArea,
+ false
+ )
+ greenToast.message = message
+ greenToast.icon = icon
+ greenToast.root.visibility = View.GONE
+ binding.toastsArea.addView(greenToast.root)
- val target = binding.greenToast.root
- target.slideInToastFromTopForDuration(binding.root as ViewGroup, lifecycleScope)
+ greenToast.root.slideInToastFromTopForDuration(
+ binding.toastsArea as ViewGroup,
+ lifecycleScope
+ )
}
private fun loadContacts() {
diff --git a/app/src/main/java/org/linphone/ui/voip/VoipActivity.kt b/app/src/main/java/org/linphone/ui/voip/VoipActivity.kt
index 93f9e7d5c..6ba630a76 100644
--- a/app/src/main/java/org/linphone/ui/voip/VoipActivity.kt
+++ b/app/src/main/java/org/linphone/ui/voip/VoipActivity.kt
@@ -20,6 +20,8 @@
package org.linphone.ui.voip
import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
import android.view.ViewGroup
import androidx.annotation.DrawableRes
import androidx.annotation.UiThread
@@ -36,6 +38,9 @@ import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication
import org.linphone.R
import org.linphone.core.tools.Log
+import org.linphone.databinding.ToastBlueBinding
+import org.linphone.databinding.ToastGreenBinding
+import org.linphone.databinding.ToastRedBinding
import org.linphone.databinding.VoipActivityBinding
import org.linphone.ui.voip.fragment.ActiveCallFragmentDirections
import org.linphone.ui.voip.fragment.AudioDevicesMenuDialogFragment
@@ -154,32 +159,63 @@ class VoipActivity : AppCompatActivity() {
}
fun showBlueToast(message: String, @DrawableRes icon: Int) {
- binding.blueToast.message = message
- binding.blueToast.icon = icon
+ val blueToast: ToastBlueBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(this),
+ R.layout.toast_blue,
+ binding.toastsArea,
+ false
+ )
+ blueToast.message = message
+ blueToast.icon = icon
+ blueToast.root.visibility = View.GONE
+ binding.toastsArea.addView(blueToast.root)
- val target = binding.blueToast.root
- target.slideInToastFromTopForDuration(binding.root as ViewGroup, lifecycleScope)
+ blueToast.root.slideInToastFromTopForDuration(
+ binding.toastsArea as ViewGroup,
+ lifecycleScope
+ )
}
private fun showRedToast(message: String, @DrawableRes icon: Int) {
- binding.redToast.message = message
- binding.redToast.icon = icon
+ val redToast: ToastRedBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(this),
+ R.layout.toast_red,
+ binding.toastsArea,
+ false
+ )
+ redToast.message = message
+ redToast.icon = icon
+ redToast.root.visibility = View.GONE
+ binding.toastsArea.addView(redToast.root)
- val target = binding.redToast.root
- target.slideInToastFromTop(binding.root as ViewGroup, true)
+ redToast.root.slideInToastFromTop(
+ binding.toastsArea as ViewGroup,
+ true
+ )
}
private fun hideRedToast() {
- val target = binding.redToast.root
- target.slideInToastFromTop(binding.root as ViewGroup, false)
+ // TODO: improve
+ binding.toastsArea.removeAllViews()
}
private fun showGreenToast(message: String, @DrawableRes icon: Int) {
- binding.greenToast.message = message
- binding.greenToast.icon = icon
+ val greenToast: ToastGreenBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(this),
+ R.layout.toast_green,
+ binding.toastsArea,
+ false
+ )
+ greenToast.message = message
+ greenToast.icon = icon
+ greenToast.root.visibility = View.GONE
+ binding.toastsArea.addView(greenToast.root)
- val target = binding.greenToast.root
- target.slideInToastFromTopForDuration(binding.root as ViewGroup, lifecycleScope, 2000)
+ greenToast.root.slideInToastFromTopForDuration(
+ binding.toastsArea as ViewGroup,
+ lifecycleScope,
+ 2000
+ )
}
private fun hideUI(hide: Boolean) {
diff --git a/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt b/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt
index 400bcea49..85c87c99d 100644
--- a/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt
@@ -91,6 +91,7 @@ class CallsViewModel @UiThread constructor() : ViewModel() {
@WorkerThread
override fun onNewAlertTriggered(core: Core, alert: Alert) {
val remote = alert.call.remoteAddress.asStringUriOnly()
+ // TODO: differentiate WiFi from Cellular
Log.w("$TAG Alert of type [${alert.type}] triggered for call from [$remote]")
alert.addListener(alertListener)
diff --git a/app/src/main/java/org/linphone/utils/AnimationsUtils.kt b/app/src/main/java/org/linphone/utils/AnimationsUtils.kt
index 329c58d10..16a53ad9c 100644
--- a/app/src/main/java/org/linphone/utils/AnimationsUtils.kt
+++ b/app/src/main/java/org/linphone/utils/AnimationsUtils.kt
@@ -38,11 +38,6 @@ fun View.slideInToastFromTop(
visible: Boolean
) {
val view = this
- if (visible && view.visibility == View.VISIBLE) {
- // Toast is already visible, hide existing one first
- view.visibility = View.GONE
- }
-
val transition: Transition = Slide(Gravity.TOP)
transition.duration = 600
transition.addTarget(view)
@@ -58,11 +53,6 @@ fun View.slideInToastFromTopForDuration(
duration: Long = 4000
) {
val view = this
- if (view.visibility == View.VISIBLE) {
- // Toast is already visible, hide existing one first
- view.visibility = View.GONE
- }
-
val transition: Transition = Slide(Gravity.TOP)
transition.duration = 600
transition.addTarget(view)
@@ -74,8 +64,7 @@ fun View.slideInToastFromTopForDuration(
withContext(Dispatchers.IO) {
delay(duration)
withContext(Dispatchers.Main) {
- TransitionManager.beginDelayedTransition(root, transition)
- view.visibility = View.GONE
+ root.removeView(view)
}
}
}
diff --git a/app/src/main/res/layout/assistant_activity.xml b/app/src/main/res/layout/assistant_activity.xml
index 4db7a39ad..e39830871 100644
--- a/app/src/main/res/layout/assistant_activity.xml
+++ b/app/src/main/res/layout/assistant_activity.xml
@@ -27,26 +27,11 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
-
-
-
-
diff --git a/app/src/main/res/layout/toast_green.xml b/app/src/main/res/layout/toast_green.xml
index 7ae16917b..667220996 100644
--- a/app/src/main/res/layout/toast_green.xml
+++ b/app/src/main/res/layout/toast_green.xml
@@ -17,6 +17,7 @@
diff --git a/app/src/main/res/layout/toast_red.xml b/app/src/main/res/layout/toast_red.xml
index 6e25bf3a7..a2bdff942 100644
--- a/app/src/main/res/layout/toast_red.xml
+++ b/app/src/main/res/layout/toast_red.xml
@@ -17,6 +17,7 @@
diff --git a/app/src/main/res/layout/voip_activity.xml b/app/src/main/res/layout/voip_activity.xml
index 549018b70..715ad31a3 100644
--- a/app/src/main/res/layout/voip_activity.xml
+++ b/app/src/main/res/layout/voip_activity.xml
@@ -23,40 +23,11 @@
app:defaultNavHost="true"
app:navGraph="@navigation/voip_nav_graph"/>
-
-
-
-
-