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"/> - - - - -