diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index ff2109764..000000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2291ac6fd..633f2b1eb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ tools:targetApi="34"> @@ -30,6 +30,14 @@ + + { } Log.i("[Contacts Loader] Load finished, found ${cursor.count} entries in cursor") - val core = coreContext.core - if (core.globalState == GlobalState.Shutdown || core.globalState == GlobalState.Off) { + val state = coreContext.core.globalState + if (state == GlobalState.Shutdown || state == GlobalState.Off) { Log.w("[Contacts Loader] Core is being stopped or already destroyed, abort") return } diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.kt b/app/src/main/java/org/linphone/contacts/ContactsManager.kt index ac0e2962b..3684b1be5 100644 --- a/app/src/main/java/org/linphone/contacts/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contacts/ContactsManager.kt @@ -22,7 +22,7 @@ package org.linphone.contacts import androidx.loader.app.LoaderManager import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.core.Friend -import org.linphone.ui.MainActivity +import org.linphone.ui.main.MainActivity class ContactsManager { private val listeners = arrayListOf() diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index d0bdd4c49..9a8c00f5b 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -21,6 +21,7 @@ package org.linphone.core import android.annotation.SuppressLint import android.content.Context +import android.content.Intent import android.os.Handler import android.os.HandlerThread import android.os.Looper @@ -30,6 +31,7 @@ import org.linphone.BuildConfig import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.contacts.ContactsManager import org.linphone.core.tools.Log +import org.linphone.ui.voip.VoipActivity class CoreContext(val context: Context) : HandlerThread("Core Thread") { lateinit var core: Core @@ -47,6 +49,18 @@ class CoreContext(val context: Context) : HandlerThread("Core Thread") { override fun onGlobalStateChanged(core: Core, state: GlobalState, message: String) { Log.i("[Context] Global state changed: $state") } + + override fun onCallStateChanged( + core: Core, + call: Call, + state: Call.State?, + message: String + ) { + Log.i("[Context] Call state changed [$state]") + if (state == Call.State.OutgoingProgress) { + showCallActivity() + } + } } init { @@ -109,6 +123,67 @@ class CoreContext(val context: Context) : HandlerThread("Core Thread") { } } + fun startCall( + address: Address, + callParams: CallParams? = null, + forceZRTP: Boolean = false, + localAddress: Address? = null + ) { + if (!core.isNetworkReachable) { + Log.e("[Context] Network unreachable, abort outgoing call") + return + } + + val params = callParams ?: core.createCallParams(null) + if (params == null) { + val call = core.inviteAddress(address) + Log.w("[Context] Starting call $call without params") + return + } + + if (forceZRTP) { + params.mediaEncryption = MediaEncryption.ZRTP + } + /*if (LinphoneUtils.checkIfNetworkHasLowBandwidth(context)) { + Log.w("[Context] Enabling low bandwidth mode!") + params.isLowBandwidthEnabled = true + } + params.recordFile = LinphoneUtils.getRecordingFilePathForAddress(address)*/ + + if (localAddress != null) { + val account = core.accountList.find { account -> + account.params.identityAddress?.weakEqual(localAddress) ?: false + } + if (account != null) { + params.account = account + Log.i( + "[Context] Using account matching address ${localAddress.asStringUriOnly()} as From" + ) + } else { + Log.e( + "[Context] Failed to find account matching address ${localAddress.asStringUriOnly()}" + ) + } + } + + /*if (corePreferences.sendEarlyMedia) { + params.isEarlyMediaSendingEnabled = true + }*/ + + val call = core.inviteAddressWithParams(address, params) + Log.i("[Context] Starting call $call") + } + + private fun showCallActivity() { + Log.i("[Context] Starting VoIP activity") + val intent = Intent(context, VoipActivity::class.java) + // This flag is required to start an Activity from a Service context + intent.addFlags( + Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_REORDER_TO_FRONT + ) + context.startActivity(intent) + } + private fun computeUserAgent() { // TODO FIXME val deviceName: String = "Linphone6" diff --git a/app/src/main/java/org/linphone/ui/MainActivity.kt b/app/src/main/java/org/linphone/ui/main/MainActivity.kt similarity index 99% rename from app/src/main/java/org/linphone/ui/MainActivity.kt rename to app/src/main/java/org/linphone/ui/main/MainActivity.kt index dec864a65..31c4e3cbc 100644 --- a/app/src/main/java/org/linphone/ui/MainActivity.kt +++ b/app/src/main/java/org/linphone/ui/main/MainActivity.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui +package org.linphone.ui.main import android.Manifest import android.content.pm.PackageManager diff --git a/app/src/main/java/org/linphone/ui/calls/fragment/CallsFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsFragment.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/calls/fragment/CallsFragment.kt rename to app/src/main/java/org/linphone/ui/main/calls/fragment/CallsFragment.kt index fb87ad467..7a27e00d3 100644 --- a/app/src/main/java/org/linphone/ui/calls/fragment/CallsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.calls.fragment +package org.linphone.ui.main.calls.fragment import android.os.Bundle import android.view.LayoutInflater @@ -29,7 +29,7 @@ import androidx.navigation.fragment.findNavController import androidx.slidingpanelayout.widget.SlidingPaneLayout import org.linphone.R import org.linphone.databinding.CallsFragmentBinding -import org.linphone.ui.fragment.GenericFragment +import org.linphone.ui.main.fragment.GenericFragment import org.linphone.utils.SlidingPaneBackPressedCallback class CallsFragment : GenericFragment() { diff --git a/app/src/main/java/org/linphone/ui/calls/fragment/CallsListFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt similarity index 93% rename from app/src/main/java/org/linphone/ui/calls/fragment/CallsListFragment.kt rename to app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt index 3887359ef..0a7c50544 100644 --- a/app/src/main/java/org/linphone/ui/calls/fragment/CallsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.calls.fragment +package org.linphone.ui.main.calls.fragment import android.content.res.Configuration import android.os.Bundle @@ -30,9 +30,9 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.navGraphViewModels import org.linphone.R import org.linphone.databinding.CallsListFragmentBinding -import org.linphone.ui.MainActivity -import org.linphone.ui.calls.viewmodel.CallsListViewModel -import org.linphone.ui.fragment.GenericFragment +import org.linphone.ui.main.MainActivity +import org.linphone.ui.main.calls.viewmodel.CallsListViewModel +import org.linphone.ui.main.fragment.GenericFragment import org.linphone.utils.setKeyboardInsetListener class CallsListFragment : GenericFragment() { diff --git a/app/src/main/java/org/linphone/ui/calls/fragment/CallsListMenuDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListMenuDialogFragment.kt similarity index 95% rename from app/src/main/java/org/linphone/ui/calls/fragment/CallsListMenuDialogFragment.kt rename to app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListMenuDialogFragment.kt index dcfdcbabb..58dd4a650 100644 --- a/app/src/main/java/org/linphone/ui/calls/fragment/CallsListMenuDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListMenuDialogFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.calls.fragment +package org.linphone.ui.main.calls.fragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment diff --git a/app/src/main/java/org/linphone/ui/calls/fragment/StartCallFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt similarity index 95% rename from app/src/main/java/org/linphone/ui/calls/fragment/StartCallFragment.kt rename to app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt index 8ec709bc8..7d84063a5 100644 --- a/app/src/main/java/org/linphone/ui/calls/fragment/StartCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.calls.fragment +package org.linphone.ui.main.calls.fragment import androidx.fragment.app.Fragment diff --git a/app/src/main/java/org/linphone/ui/calls/viewmodel/CallsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/calls/viewmodel/CallsListViewModel.kt similarity index 90% rename from app/src/main/java/org/linphone/ui/calls/viewmodel/CallsListViewModel.kt rename to app/src/main/java/org/linphone/ui/main/calls/viewmodel/CallsListViewModel.kt index aef8b3a2b..cb43d1c6f 100644 --- a/app/src/main/java/org/linphone/ui/calls/viewmodel/CallsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/viewmodel/CallsListViewModel.kt @@ -17,9 +17,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.calls.viewmodel +package org.linphone.ui.main.calls.viewmodel -import org.linphone.ui.viewmodel.TopBarViewModel +import org.linphone.ui.main.viewmodel.TopBarViewModel class CallsListViewModel : TopBarViewModel() { init { diff --git a/app/src/main/java/org/linphone/ui/contacts/adapter/ContactsListAdapter.kt b/app/src/main/java/org/linphone/ui/main/contacts/adapter/ContactsListAdapter.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/contacts/adapter/ContactsListAdapter.kt rename to app/src/main/java/org/linphone/ui/main/contacts/adapter/ContactsListAdapter.kt index fda58cb80..e0fc2f9fd 100644 --- a/app/src/main/java/org/linphone/ui/contacts/adapter/ContactsListAdapter.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/adapter/ContactsListAdapter.kt @@ -1,4 +1,4 @@ -package org.linphone.ui.contacts.adapter +package org.linphone.ui.main.contacts.adapter import android.view.LayoutInflater import android.view.ViewGroup @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView import org.linphone.R import org.linphone.databinding.ContactFavouriteListCellBinding import org.linphone.databinding.ContactListCellBinding -import org.linphone.ui.contacts.model.ContactModel +import org.linphone.ui.main.contacts.model.ContactModel import org.linphone.utils.Event class ContactsListAdapter( diff --git a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt similarity index 94% rename from app/src/main/java/org/linphone/ui/contacts/fragment/ContactFragment.kt rename to app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt index b53b5af59..7c6b1edd1 100644 --- a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.fragment +package org.linphone.ui.main.contacts.fragment import android.os.Bundle import android.view.LayoutInflater @@ -29,9 +29,9 @@ import androidx.navigation.fragment.navArgs import androidx.transition.ChangeBounds import org.linphone.core.tools.Log import org.linphone.databinding.ContactFragmentBinding -import org.linphone.ui.contacts.model.NumberOrAddressPickerDialogModel -import org.linphone.ui.contacts.viewmodel.ContactViewModel -import org.linphone.ui.fragment.GenericFragment +import org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel +import org.linphone.ui.main.contacts.viewmodel.ContactViewModel +import org.linphone.ui.main.fragment.GenericFragment import org.linphone.utils.DialogUtils import org.linphone.utils.Event diff --git a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactNumberOrAddressMenuDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactNumberOrAddressMenuDialogFragment.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/contacts/fragment/ContactNumberOrAddressMenuDialogFragment.kt rename to app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactNumberOrAddressMenuDialogFragment.kt index b9209ce48..12614b380 100644 --- a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactNumberOrAddressMenuDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactNumberOrAddressMenuDialogFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.fragment +package org.linphone.ui.main.contacts.fragment import android.content.DialogInterface import android.os.Bundle diff --git a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactsFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/contacts/fragment/ContactsFragment.kt rename to app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt index 5abc74d78..25352d70d 100644 --- a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.fragment +package org.linphone.ui.main.contacts.fragment import android.os.Bundle import android.view.LayoutInflater @@ -30,7 +30,7 @@ import androidx.slidingpanelayout.widget.SlidingPaneLayout import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.ContactsFragmentBinding -import org.linphone.ui.fragment.GenericFragment +import org.linphone.ui.main.fragment.GenericFragment import org.linphone.utils.SlidingPaneBackPressedCallback class ContactsFragment : GenericFragment() { diff --git a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactsListFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt similarity index 95% rename from app/src/main/java/org/linphone/ui/contacts/fragment/ContactsListFragment.kt rename to app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt index 238dbd6dd..de2f89190 100644 --- a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.fragment +package org.linphone.ui.main.contacts.fragment import android.content.res.Configuration import android.os.Bundle @@ -32,10 +32,10 @@ import androidx.navigation.navGraphViewModels import androidx.recyclerview.widget.LinearLayoutManager import org.linphone.R import org.linphone.databinding.ContactsListFragmentBinding -import org.linphone.ui.MainActivity -import org.linphone.ui.contacts.adapter.ContactsListAdapter -import org.linphone.ui.contacts.viewmodel.ContactsListViewModel -import org.linphone.ui.fragment.GenericFragment +import org.linphone.ui.main.MainActivity +import org.linphone.ui.main.contacts.adapter.ContactsListAdapter +import org.linphone.ui.main.contacts.viewmodel.ContactsListViewModel +import org.linphone.ui.main.fragment.GenericFragment import org.linphone.utils.Event import org.linphone.utils.hideKeyboard import org.linphone.utils.setKeyboardInsetListener diff --git a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactsListMenuDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListMenuDialogFragment.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/contacts/fragment/ContactsListMenuDialogFragment.kt rename to app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListMenuDialogFragment.kt index 3b305eda2..8660784d5 100644 --- a/app/src/main/java/org/linphone/ui/contacts/fragment/ContactsListMenuDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListMenuDialogFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.fragment +package org.linphone.ui.main.contacts.fragment import android.content.DialogInterface import android.os.Bundle diff --git a/app/src/main/java/org/linphone/ui/contacts/fragment/NewContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt similarity index 94% rename from app/src/main/java/org/linphone/ui/contacts/fragment/NewContactFragment.kt rename to app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt index 932855b83..a91124713 100644 --- a/app/src/main/java/org/linphone/ui/contacts/fragment/NewContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.fragment +package org.linphone.ui.main.contacts.fragment import android.os.Bundle import android.view.LayoutInflater @@ -25,7 +25,7 @@ import android.view.View import android.view.ViewGroup import androidx.navigation.fragment.findNavController import org.linphone.databinding.NewContactFragmentBinding -import org.linphone.ui.fragment.GenericFragment +import org.linphone.ui.main.fragment.GenericFragment class NewContactFragment : GenericFragment() { private lateinit var binding: NewContactFragmentBinding diff --git a/app/src/main/java/org/linphone/ui/contacts/model/ContactDeviceModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactDeviceModel.kt similarity index 95% rename from app/src/main/java/org/linphone/ui/contacts/model/ContactDeviceModel.kt rename to app/src/main/java/org/linphone/ui/main/contacts/model/ContactDeviceModel.kt index 59cab2ca5..0e0b53047 100644 --- a/app/src/main/java/org/linphone/ui/contacts/model/ContactDeviceModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactDeviceModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.model +package org.linphone.ui.main.contacts.model class ContactDeviceModel( val name: String, diff --git a/app/src/main/java/org/linphone/ui/contacts/model/ContactModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactModel.kt similarity index 98% rename from app/src/main/java/org/linphone/ui/contacts/model/ContactModel.kt rename to app/src/main/java/org/linphone/ui/main/contacts/model/ContactModel.kt index 836882c16..08c144d8a 100644 --- a/app/src/main/java/org/linphone/ui/contacts/model/ContactModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.model +package org.linphone.ui.main.contacts.model import android.content.ContentUris import android.net.Uri diff --git a/app/src/main/java/org/linphone/ui/contacts/model/ContactNumberOrAddressModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactNumberOrAddressModel.kt similarity index 76% rename from app/src/main/java/org/linphone/ui/contacts/model/ContactNumberOrAddressModel.kt rename to app/src/main/java/org/linphone/ui/main/contacts/model/ContactNumberOrAddressModel.kt index bfe5c2778..a24471ede 100644 --- a/app/src/main/java/org/linphone/ui/contacts/model/ContactNumberOrAddressModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactNumberOrAddressModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.model +package org.linphone.ui.main.contacts.model import androidx.lifecycle.MutableLiveData import org.linphone.core.Address @@ -31,19 +31,8 @@ class ContactNumberOrAddressModel( ) { val selected = MutableLiveData() - fun startCall() { - address ?: return - listener.onCall(address) - } - - fun startVideoCall() { - address ?: return - listener.onVideoCall(address) - } - - fun startChat(secured: Boolean) { - address ?: return - listener.onChat(address) + fun onClicked() { + listener.onClicked(address) } fun onLongPress(): Boolean { @@ -54,11 +43,7 @@ class ContactNumberOrAddressModel( } interface ContactNumberOrAddressClickListener { - fun onCall(address: Address) - - fun onVideoCall(address: Address) - - fun onChat(address: Address) + fun onClicked(address: Address?) fun onLongPress(model: ContactNumberOrAddressModel) } diff --git a/app/src/main/java/org/linphone/ui/contacts/model/NumberOrAddressPickerDialogModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/model/NumberOrAddressPickerDialogModel.kt similarity index 90% rename from app/src/main/java/org/linphone/ui/contacts/model/NumberOrAddressPickerDialogModel.kt rename to app/src/main/java/org/linphone/ui/main/contacts/model/NumberOrAddressPickerDialogModel.kt index c5f747d5b..46e129a14 100644 --- a/app/src/main/java/org/linphone/ui/contacts/model/NumberOrAddressPickerDialogModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/model/NumberOrAddressPickerDialogModel.kt @@ -17,11 +17,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.model +package org.linphone.ui.main.contacts.model import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import org.linphone.ui.contacts.viewmodel.ContactViewModel +import org.linphone.ui.main.contacts.viewmodel.ContactViewModel import org.linphone.utils.Event class NumberOrAddressPickerDialogModel(viewModel: ContactViewModel) : ViewModel() { @@ -31,6 +31,7 @@ class NumberOrAddressPickerDialogModel(viewModel: ContactViewModel) : ViewModel( init { sipAddressesAndPhoneNumbers.value = viewModel.sipAddressesAndPhoneNumbers.value + // TODO: set listener } fun dismiss() { diff --git a/app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt similarity index 77% rename from app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactViewModel.kt rename to app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt index 100dead49..a274cdcee 100644 --- a/app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt @@ -17,16 +17,16 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.viewmodel +package org.linphone.ui.main.contacts.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.core.Address -import org.linphone.ui.contacts.model.ContactDeviceModel -import org.linphone.ui.contacts.model.ContactModel -import org.linphone.ui.contacts.model.ContactNumberOrAddressClickListener -import org.linphone.ui.contacts.model.ContactNumberOrAddressModel +import org.linphone.ui.main.contacts.model.ContactDeviceModel +import org.linphone.ui.main.contacts.model.ContactModel +import org.linphone.ui.main.contacts.model.ContactNumberOrAddressClickListener +import org.linphone.ui.main.contacts.model.ContactNumberOrAddressModel import org.linphone.utils.Event class ContactViewModel : ViewModel() { @@ -57,16 +57,13 @@ class ContactViewModel : ViewModel() { } val listener = object : ContactNumberOrAddressClickListener { - override fun onCall(address: Address) { - // UI thread - } - - override fun onVideoCall(address: Address) { - // UI thread - } - - override fun onChat(address: Address) { + override fun onClicked(address: Address?) { // UI thread + if (address != null) { + coreContext.postOnCoreThread { + coreContext.startCall(address) + } + } } override fun onLongPress(model: ContactNumberOrAddressModel) { @@ -138,16 +135,32 @@ class ContactViewModel : ViewModel() { } fun startAudioCall() { - if (sipAddressesAndPhoneNumbers.value.orEmpty().size == 1) { - // TODO + val numbersAndAddresses = sipAddressesAndPhoneNumbers.value.orEmpty() + if (numbersAndAddresses.size == 1) { + val address = numbersAndAddresses.first().address + if (address != null) { + coreContext.postOnCoreThread { core -> + val params = core.createCallParams(null) + params?.isVideoEnabled = false + coreContext.startCall(address, params) + } + } } else { showNumberOrAddressPickerDialogEvent.value = Event(true) } } fun startVideoCall() { - if (sipAddressesAndPhoneNumbers.value.orEmpty().size == 1) { - // TODO + val numbersAndAddresses = sipAddressesAndPhoneNumbers.value.orEmpty() + if (numbersAndAddresses.size == 1) { + val address = numbersAndAddresses.first().address + if (address != null) { + coreContext.postOnCoreThread { core -> + val params = core.createCallParams(null) + params?.isVideoEnabled = true + coreContext.startCall(address, params) + } + } } else { showNumberOrAddressPickerDialogEvent.value = Event(true) } diff --git a/app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactsListViewModel.kt rename to app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt index 987068daa..ae70de333 100644 --- a/app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.contacts.viewmodel +package org.linphone.ui.main.contacts.viewmodel import androidx.lifecycle.MutableLiveData import java.util.ArrayList @@ -28,8 +28,8 @@ import org.linphone.core.MagicSearch import org.linphone.core.MagicSearchListenerStub import org.linphone.core.SearchResult import org.linphone.core.tools.Log -import org.linphone.ui.contacts.model.ContactModel -import org.linphone.ui.viewmodel.TopBarViewModel +import org.linphone.ui.main.contacts.model.ContactModel +import org.linphone.ui.main.viewmodel.TopBarViewModel class ContactsListViewModel : TopBarViewModel() { val contactsList = MutableLiveData>() diff --git a/app/src/main/java/org/linphone/ui/conversations/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/conversations/ConversationFragment.kt similarity index 94% rename from app/src/main/java/org/linphone/ui/conversations/ConversationFragment.kt rename to app/src/main/java/org/linphone/ui/main/conversations/ConversationFragment.kt index 62d069231..a779a8402 100644 --- a/app/src/main/java/org/linphone/ui/conversations/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/ConversationFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations +package org.linphone.ui.main.conversations import android.os.Bundle import android.view.LayoutInflater @@ -29,8 +29,8 @@ import androidx.navigation.navGraphViewModels import androidx.recyclerview.widget.LinearLayoutManager import org.linphone.R import org.linphone.databinding.ConversationFragmentBinding -import org.linphone.ui.conversations.adapter.ChatEventLogsListAdapter -import org.linphone.ui.conversations.viewmodel.ConversationViewModel +import org.linphone.ui.main.conversations.adapter.ChatEventLogsListAdapter +import org.linphone.ui.main.conversations.viewmodel.ConversationViewModel class ConversationFragment : Fragment() { private lateinit var binding: ConversationFragmentBinding diff --git a/app/src/main/java/org/linphone/ui/conversations/ConversationMenuDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/conversations/ConversationMenuDialogFragment.kt similarity index 98% rename from app/src/main/java/org/linphone/ui/conversations/ConversationMenuDialogFragment.kt rename to app/src/main/java/org/linphone/ui/main/conversations/ConversationMenuDialogFragment.kt index e49111241..99748e03c 100644 --- a/app/src/main/java/org/linphone/ui/conversations/ConversationMenuDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/ConversationMenuDialogFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations +package org.linphone.ui.main.conversations import android.content.DialogInterface import android.os.Bundle diff --git a/app/src/main/java/org/linphone/ui/conversations/ConversationsFragment.kt b/app/src/main/java/org/linphone/ui/main/conversations/ConversationsFragment.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/conversations/ConversationsFragment.kt rename to app/src/main/java/org/linphone/ui/main/conversations/ConversationsFragment.kt index d78ce4be4..1a8cbaf67 100644 --- a/app/src/main/java/org/linphone/ui/conversations/ConversationsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/ConversationsFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations +package org.linphone.ui.main.conversations import android.os.Bundle import android.view.LayoutInflater @@ -35,8 +35,8 @@ import androidx.recyclerview.widget.RecyclerView import androidx.transition.AutoTransition import org.linphone.R import org.linphone.databinding.ConversationsFragmentBinding -import org.linphone.ui.conversations.adapter.ConversationsListAdapter -import org.linphone.ui.conversations.viewmodel.ConversationsListViewModel +import org.linphone.ui.main.conversations.adapter.ConversationsListAdapter +import org.linphone.ui.main.conversations.viewmodel.ConversationsListViewModel import org.linphone.utils.hideKeyboard import org.linphone.utils.showKeyboard diff --git a/app/src/main/java/org/linphone/ui/conversations/NewConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/conversations/NewConversationFragment.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/conversations/NewConversationFragment.kt rename to app/src/main/java/org/linphone/ui/main/conversations/NewConversationFragment.kt index b7f0e5aaa..ff8dc25a4 100644 --- a/app/src/main/java/org/linphone/ui/conversations/NewConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/NewConversationFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations +package org.linphone.ui.main.conversations import android.os.Bundle import android.view.LayoutInflater @@ -34,7 +34,7 @@ import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.contacts.ContactsSelectionAdapter import org.linphone.databinding.NewConversationFragmentBinding -import org.linphone.ui.conversations.viewmodel.NewConversationViewModel +import org.linphone.ui.main.conversations.viewmodel.NewConversationViewModel class NewConversationFragment : Fragment() { private lateinit var binding: NewConversationFragmentBinding diff --git a/app/src/main/java/org/linphone/ui/conversations/adapter/ChatEventLogsListAdapter.kt b/app/src/main/java/org/linphone/ui/main/conversations/adapter/ChatEventLogsListAdapter.kt similarity index 95% rename from app/src/main/java/org/linphone/ui/conversations/adapter/ChatEventLogsListAdapter.kt rename to app/src/main/java/org/linphone/ui/main/conversations/adapter/ChatEventLogsListAdapter.kt index 7af5e2b0b..a963ad1bd 100644 --- a/app/src/main/java/org/linphone/ui/conversations/adapter/ChatEventLogsListAdapter.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/adapter/ChatEventLogsListAdapter.kt @@ -1,4 +1,4 @@ -package org.linphone.ui.conversations.adapter +package org.linphone.ui.main.conversations.adapter import android.view.LayoutInflater import android.view.ViewGroup @@ -12,9 +12,9 @@ import org.linphone.core.ChatMessage import org.linphone.databinding.ChatBubbleIncomingBinding import org.linphone.databinding.ChatBubbleOutgoingBinding import org.linphone.databinding.ChatEventBinding -import org.linphone.ui.conversations.data.ChatMessageData -import org.linphone.ui.conversations.data.EventData -import org.linphone.ui.conversations.data.EventLogData +import org.linphone.ui.main.conversations.data.ChatMessageData +import org.linphone.ui.main.conversations.data.EventData +import org.linphone.ui.main.conversations.data.EventLogData class ChatEventLogsListAdapter( private val viewLifecycleOwner: LifecycleOwner diff --git a/app/src/main/java/org/linphone/ui/conversations/adapter/ConversationsListAdapter.kt b/app/src/main/java/org/linphone/ui/main/conversations/adapter/ConversationsListAdapter.kt similarity index 94% rename from app/src/main/java/org/linphone/ui/conversations/adapter/ConversationsListAdapter.kt rename to app/src/main/java/org/linphone/ui/main/conversations/adapter/ConversationsListAdapter.kt index 125307092..497e37b81 100644 --- a/app/src/main/java/org/linphone/ui/conversations/adapter/ConversationsListAdapter.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/adapter/ConversationsListAdapter.kt @@ -1,4 +1,4 @@ -package org.linphone.ui.conversations.adapter +package org.linphone.ui.main.conversations.adapter import android.view.LayoutInflater import android.view.ViewGroup @@ -10,8 +10,8 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import org.linphone.R import org.linphone.databinding.ChatRoomListCellBinding -import org.linphone.ui.conversations.data.ChatRoomData -import org.linphone.ui.conversations.data.ChatRoomDataListener +import org.linphone.ui.main.conversations.data.ChatRoomData +import org.linphone.ui.main.conversations.data.ChatRoomDataListener import org.linphone.utils.Event class ConversationsListAdapter( diff --git a/app/src/main/java/org/linphone/ui/conversations/data/ChatMessageData.kt b/app/src/main/java/org/linphone/ui/main/conversations/data/ChatMessageData.kt similarity index 98% rename from app/src/main/java/org/linphone/ui/conversations/data/ChatMessageData.kt rename to app/src/main/java/org/linphone/ui/main/conversations/data/ChatMessageData.kt index 37d046108..119f3b2ef 100644 --- a/app/src/main/java/org/linphone/ui/conversations/data/ChatMessageData.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/data/ChatMessageData.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations.data +package org.linphone.ui.main.conversations.data import androidx.lifecycle.MutableLiveData import org.linphone.R diff --git a/app/src/main/java/org/linphone/ui/conversations/data/ChatRoomData.kt b/app/src/main/java/org/linphone/ui/main/conversations/data/ChatRoomData.kt similarity index 99% rename from app/src/main/java/org/linphone/ui/conversations/data/ChatRoomData.kt rename to app/src/main/java/org/linphone/ui/main/conversations/data/ChatRoomData.kt index 855e8c876..40782d3b4 100644 --- a/app/src/main/java/org/linphone/ui/conversations/data/ChatRoomData.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/data/ChatRoomData.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations.data +package org.linphone.ui.main.conversations.data import androidx.lifecycle.MutableLiveData import java.lang.StringBuilder diff --git a/app/src/main/java/org/linphone/ui/conversations/data/EventData.kt b/app/src/main/java/org/linphone/ui/main/conversations/data/EventData.kt similarity index 95% rename from app/src/main/java/org/linphone/ui/conversations/data/EventData.kt rename to app/src/main/java/org/linphone/ui/main/conversations/data/EventData.kt index e7a9ff641..164928b17 100644 --- a/app/src/main/java/org/linphone/ui/conversations/data/EventData.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/data/EventData.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations.data +package org.linphone.ui.main.conversations.data import org.linphone.core.EventLog diff --git a/app/src/main/java/org/linphone/ui/conversations/data/EventLogData.kt b/app/src/main/java/org/linphone/ui/main/conversations/data/EventLogData.kt similarity index 96% rename from app/src/main/java/org/linphone/ui/conversations/data/EventLogData.kt rename to app/src/main/java/org/linphone/ui/main/conversations/data/EventLogData.kt index 736f9549c..8c52799da 100644 --- a/app/src/main/java/org/linphone/ui/conversations/data/EventLogData.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/data/EventLogData.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations.data +package org.linphone.ui.main.conversations.data import org.linphone.core.EventLog diff --git a/app/src/main/java/org/linphone/ui/conversations/view/MultiLineWrapContentWidthTextView.kt b/app/src/main/java/org/linphone/ui/main/conversations/view/MultiLineWrapContentWidthTextView.kt similarity index 98% rename from app/src/main/java/org/linphone/ui/conversations/view/MultiLineWrapContentWidthTextView.kt rename to app/src/main/java/org/linphone/ui/main/conversations/view/MultiLineWrapContentWidthTextView.kt index de5bcb632..f91068ccf 100644 --- a/app/src/main/java/org/linphone/ui/conversations/view/MultiLineWrapContentWidthTextView.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/view/MultiLineWrapContentWidthTextView.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations.view +package org.linphone.ui.main.conversations.view import android.content.Context import android.text.Layout diff --git a/app/src/main/java/org/linphone/ui/conversations/viewmodel/ConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationViewModel.kt similarity index 98% rename from app/src/main/java/org/linphone/ui/conversations/viewmodel/ConversationViewModel.kt rename to app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationViewModel.kt index 13a0b11e1..d01b5bfcc 100644 --- a/app/src/main/java/org/linphone/ui/conversations/viewmodel/ConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationViewModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations.viewmodel +package org.linphone.ui.main.conversations.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -30,7 +30,7 @@ import org.linphone.core.ChatRoomListenerStub import org.linphone.core.EventLog import org.linphone.core.Factory import org.linphone.core.tools.Log -import org.linphone.ui.conversations.data.EventLogData +import org.linphone.ui.main.conversations.data.EventLogData import org.linphone.utils.LinphoneUtils class ConversationViewModel : ViewModel() { diff --git a/app/src/main/java/org/linphone/ui/conversations/viewmodel/ConversationsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationsListViewModel.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/conversations/viewmodel/ConversationsListViewModel.kt rename to app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationsListViewModel.kt index 6ec39c850..35a94d914 100644 --- a/app/src/main/java/org/linphone/ui/conversations/viewmodel/ConversationsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationsListViewModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations.viewmodel +package org.linphone.ui.main.conversations.viewmodel import androidx.lifecycle.MutableLiveData import java.util.ArrayList @@ -28,8 +28,8 @@ import org.linphone.core.ChatRoom import org.linphone.core.Core import org.linphone.core.CoreListenerStub import org.linphone.core.tools.Log -import org.linphone.ui.conversations.data.ChatRoomData -import org.linphone.ui.viewmodel.TopBarViewModel +import org.linphone.ui.main.conversations.data.ChatRoomData +import org.linphone.ui.main.viewmodel.TopBarViewModel import org.linphone.utils.Event import org.linphone.utils.LinphoneUtils diff --git a/app/src/main/java/org/linphone/ui/conversations/viewmodel/NewConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/NewConversationViewModel.kt similarity index 98% rename from app/src/main/java/org/linphone/ui/conversations/viewmodel/NewConversationViewModel.kt rename to app/src/main/java/org/linphone/ui/main/conversations/viewmodel/NewConversationViewModel.kt index ecc0cfde0..39633445d 100644 --- a/app/src/main/java/org/linphone/ui/conversations/viewmodel/NewConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/NewConversationViewModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.conversations.viewmodel +package org.linphone.ui.main.conversations.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel diff --git a/app/src/main/java/org/linphone/ui/fragment/BottomNavBarFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/BottomNavBarFragment.kt similarity index 96% rename from app/src/main/java/org/linphone/ui/fragment/BottomNavBarFragment.kt rename to app/src/main/java/org/linphone/ui/main/fragment/BottomNavBarFragment.kt index 9194dfe33..7fa8016e2 100644 --- a/app/src/main/java/org/linphone/ui/fragment/BottomNavBarFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/BottomNavBarFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.fragment +package org.linphone.ui.main.fragment import android.os.Bundle import android.view.LayoutInflater @@ -27,7 +27,7 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import org.linphone.R import org.linphone.databinding.BottomNavBarBinding -import org.linphone.ui.viewmodel.SharedMainViewModel +import org.linphone.ui.main.viewmodel.SharedMainViewModel import org.linphone.utils.Event class BottomNavBarFragment : Fragment() { diff --git a/app/src/main/java/org/linphone/ui/fragment/EmptyFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/EmptyFragment.kt similarity index 98% rename from app/src/main/java/org/linphone/ui/fragment/EmptyFragment.kt rename to app/src/main/java/org/linphone/ui/main/fragment/EmptyFragment.kt index cca37be49..fc3416187 100644 --- a/app/src/main/java/org/linphone/ui/fragment/EmptyFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/EmptyFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.fragment +package org.linphone.ui.main.fragment import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/org/linphone/ui/fragment/GenericFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/GenericFragment.kt similarity index 98% rename from app/src/main/java/org/linphone/ui/fragment/GenericFragment.kt rename to app/src/main/java/org/linphone/ui/main/fragment/GenericFragment.kt index 66bf5b530..ec85eec59 100644 --- a/app/src/main/java/org/linphone/ui/fragment/GenericFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/GenericFragment.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.fragment +package org.linphone.ui.main.fragment import android.os.Bundle import android.view.View @@ -28,7 +28,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R import org.linphone.core.tools.Log -import org.linphone.ui.viewmodel.SharedMainViewModel +import org.linphone.ui.main.viewmodel.SharedMainViewModel abstract class GenericFragment : Fragment() { protected lateinit var sharedViewModel: SharedMainViewModel diff --git a/app/src/main/java/org/linphone/ui/viewmodel/SharedMainViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/viewmodel/SharedMainViewModel.kt rename to app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt index f8ba0bbfc..043b6cd58 100644 --- a/app/src/main/java/org/linphone/ui/viewmodel/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.viewmodel +package org.linphone.ui.main.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel diff --git a/app/src/main/java/org/linphone/ui/viewmodel/TopBarViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/TopBarViewModel.kt similarity index 97% rename from app/src/main/java/org/linphone/ui/viewmodel/TopBarViewModel.kt rename to app/src/main/java/org/linphone/ui/main/viewmodel/TopBarViewModel.kt index a81323763..c343a4d11 100644 --- a/app/src/main/java/org/linphone/ui/viewmodel/TopBarViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/TopBarViewModel.kt @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.linphone.ui.viewmodel +package org.linphone.ui.main.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel diff --git a/app/src/main/java/org/linphone/ui/voip/VoipActivity.kt b/app/src/main/java/org/linphone/ui/voip/VoipActivity.kt new file mode 100644 index 000000000..42e670081 --- /dev/null +++ b/app/src/main/java/org/linphone/ui/voip/VoipActivity.kt @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2010-2023 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.linphone.ui.voip + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.core.view.WindowCompat +import androidx.databinding.DataBindingUtil +import androidx.lifecycle.ViewModelProvider +import org.linphone.LinphoneApplication +import org.linphone.R +import org.linphone.databinding.VoipActivityBinding +import org.linphone.ui.voip.viewmodel.CallsViewModel + +class VoipActivity : AppCompatActivity() { + private lateinit var binding: VoipActivityBinding + + private lateinit var callViewModel: CallsViewModel + + override fun onCreate(savedInstanceState: Bundle?) { + WindowCompat.setDecorFitsSystemWindows(window, true) + super.onCreate(savedInstanceState) + + val inCallBlackColor = ContextCompat.getColor( + this, + R.color.in_call_black + ) + window.statusBarColor = inCallBlackColor + window.navigationBarColor = inCallBlackColor + + while (!LinphoneApplication.coreContext.isReady()) { + Thread.sleep(20) + } + + binding = DataBindingUtil.setContentView(this, R.layout.voip_activity) + binding.lifecycleOwner = this + + callViewModel = run { + ViewModelProvider(this)[CallsViewModel::class.java] + } + + callViewModel.noMoreCallEvent.observe(this) { + it.consume { + finish() + } + } + } +} diff --git a/app/src/main/java/org/linphone/ui/voip/fragment/OutgoingCallFragment.kt b/app/src/main/java/org/linphone/ui/voip/fragment/OutgoingCallFragment.kt new file mode 100644 index 000000000..5f4fd8713 --- /dev/null +++ b/app/src/main/java/org/linphone/ui/voip/fragment/OutgoingCallFragment.kt @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2010-2023 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.linphone.ui.voip.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.lifecycle.ViewModelProvider +import org.linphone.databinding.VoipOutgoingCallFragmentBinding +import org.linphone.ui.main.fragment.GenericFragment +import org.linphone.ui.voip.viewmodel.CallViewModel + +class OutgoingCallFragment : GenericFragment() { + private lateinit var binding: VoipOutgoingCallFragmentBinding + + private lateinit var callViewModel: CallViewModel + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = VoipOutgoingCallFragmentBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + callViewModel = requireActivity().run { + ViewModelProvider(this)[CallViewModel::class.java] + } + + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = callViewModel + + binding.chronometer.start() + } +} diff --git a/app/src/main/java/org/linphone/ui/voip/viewmodel/CallViewModel.kt b/app/src/main/java/org/linphone/ui/voip/viewmodel/CallViewModel.kt new file mode 100644 index 000000000..eba3ed160 --- /dev/null +++ b/app/src/main/java/org/linphone/ui/voip/viewmodel/CallViewModel.kt @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010-2023 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.linphone.ui.voip.viewmodel + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import org.linphone.LinphoneApplication.Companion.coreContext +import org.linphone.core.Call +import org.linphone.core.tools.Log + +class CallViewModel() : ViewModel() { + companion object { + const val TAG = "[Call ViewModel]" + } + + val videoEnabled = MutableLiveData() + + private lateinit var call: Call + + init { + videoEnabled.value = false + + coreContext.postOnCoreThread { core -> + val currentCall = core.currentCall ?: core.calls.firstOrNull() + + if (currentCall != null) { + call = currentCall + Log.i("$TAG Found call [$call]") + + if (call.state == Call.State.StreamsRunning) { + videoEnabled.postValue(call.currentParams.isVideoEnabled) + } else { + videoEnabled.postValue(call.params.isVideoEnabled) + } + } else { + Log.e("$TAG Failed to find outgoing call!") + } + } + } + + fun hangUp() { + // UI thread + coreContext.postOnCoreThread { + Log.i("$TAG Terminating call [$call]") + call.terminate() + } + } +} 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 new file mode 100644 index 000000000..075dffec8 --- /dev/null +++ b/app/src/main/java/org/linphone/ui/voip/viewmodel/CallsViewModel.kt @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2010-2023 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.linphone.ui.voip.viewmodel + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import org.linphone.LinphoneApplication.Companion.coreContext +import org.linphone.core.Core +import org.linphone.core.CoreListenerStub +import org.linphone.core.tools.Log +import org.linphone.utils.Event + +class CallsViewModel : ViewModel() { + val noMoreCallEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + + private val coreListener = object : CoreListenerStub() { + override fun onLastCallEnded(core: Core) { + // Core thread + Log.i("[Calls ViewModel] No more call, leaving VoIP activity") + noMoreCallEvent.postValue(Event(true)) + } + } + + init { + coreContext.postOnCoreThread { core -> + core.addListener(coreListener) + } + } + + override fun onCleared() { + super.onCleared() + + coreContext.postOnCoreThread { core -> + core.removeListener(coreListener) + } + } +} diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index badf43472..65720cbe8 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -42,8 +42,8 @@ import org.linphone.BR import org.linphone.R import org.linphone.contacts.ContactData import org.linphone.core.ConsolidatedPresence -import org.linphone.ui.MainActivity -import org.linphone.ui.contacts.model.ContactModel +import org.linphone.ui.main.MainActivity +import org.linphone.ui.main.contacts.model.ContactModel /** * This file contains all the data binding necessary for the app diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index 997623a8c..4ed77c9e4 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -30,7 +30,7 @@ import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import org.linphone.R import org.linphone.databinding.DialogPickNumberOrAddressBinding -import org.linphone.ui.contacts.model.NumberOrAddressPickerDialogModel +import org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel class DialogUtils { companion object { diff --git a/app/src/main/res/drawable/camera_disabled.xml b/app/src/main/res/drawable/camera_disabled.xml new file mode 100644 index 000000000..103ae4fac --- /dev/null +++ b/app/src/main/res/drawable/camera_disabled.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/camera_enabled.xml b/app/src/main/res/drawable/camera_enabled.xml new file mode 100644 index 000000000..d88e947d4 --- /dev/null +++ b/app/src/main/res/drawable/camera_enabled.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/hang_up.xml b/app/src/main/res/drawable/hang_up.xml new file mode 100644 index 000000000..d3843b2c2 --- /dev/null +++ b/app/src/main/res/drawable/hang_up.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/in_call_button_background.xml b/app/src/main/res/drawable/in_call_button_background.xml new file mode 100644 index 000000000..9db05d647 --- /dev/null +++ b/app/src/main/res/drawable/in_call_button_background.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/in_call_camera_button.xml b/app/src/main/res/drawable/in_call_camera_button.xml new file mode 100644 index 000000000..664b13771 --- /dev/null +++ b/app/src/main/res/drawable/in_call_camera_button.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/microphone.xml b/app/src/main/res/drawable/microphone.xml new file mode 100644 index 000000000..b7f6a5398 --- /dev/null +++ b/app/src/main/res/drawable/microphone.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/outgoing_call.xml b/app/src/main/res/drawable/outgoing_call.xml new file mode 100644 index 000000000..5f9b587a3 --- /dev/null +++ b/app/src/main/res/drawable/outgoing_call.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/shape_hang_up_button_background.xml b/app/src/main/res/drawable/shape_hang_up_button_background.xml new file mode 100644 index 000000000..126936545 --- /dev/null +++ b/app/src/main/res/drawable/shape_hang_up_button_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_round_in_call_button_background.xml b/app/src/main/res/drawable/shape_round_in_call_button_background.xml new file mode 100644 index 000000000..30b2406c1 --- /dev/null +++ b/app/src/main/res/drawable/shape_round_in_call_button_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_round_in_call_disabled_button_background.xml b/app/src/main/res/drawable/shape_round_in_call_disabled_button_background.xml new file mode 100644 index 000000000..1076b3193 --- /dev/null +++ b/app/src/main/res/drawable/shape_round_in_call_disabled_button_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_round_in_call_gray_background.xml b/app/src/main/res/drawable/shape_round_in_call_gray_background.xml new file mode 100644 index 000000000..d4c1aa060 --- /dev/null +++ b/app/src/main/res/drawable/shape_round_in_call_gray_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/speaker.xml b/app/src/main/res/drawable/speaker.xml new file mode 100644 index 000000000..1101a5c00 --- /dev/null +++ b/app/src/main/res/drawable/speaker.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/switch_camera.xml b/app/src/main/res/drawable/switch_camera.xml new file mode 100644 index 000000000..b58ba194f --- /dev/null +++ b/app/src/main/res/drawable/switch_camera.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/layout-land/calls_list_fragment.xml b/app/src/main/res/layout-land/calls_list_fragment.xml index a6f3e3dbd..eaf904c59 100644 --- a/app/src/main/res/layout-land/calls_list_fragment.xml +++ b/app/src/main/res/layout-land/calls_list_fragment.xml @@ -16,7 +16,7 @@ type="View.OnClickListener" /> + type="org.linphone.ui.main.calls.viewmodel.CallsListViewModel" /> + type="org.linphone.ui.main.contacts.viewmodel.ContactsListViewModel" /> + type="org.linphone.ui.main.calls.viewmodel.CallsListViewModel" /> + type="org.linphone.ui.main.conversations.data.ChatMessageData" /> - + type="org.linphone.ui.main.conversations.data.ChatMessageData" /> - + type="org.linphone.ui.main.conversations.data.EventData" /> + type="org.linphone.ui.main.conversations.data.ChatRoomData" /> + type="org.linphone.ui.main.contacts.model.ContactDeviceModel" /> + type="org.linphone.ui.main.contacts.model.ContactModel" /> diff --git a/app/src/main/res/layout/contact_fragment.xml b/app/src/main/res/layout/contact_fragment.xml index 8896933d2..e413ce968 100644 --- a/app/src/main/res/layout/contact_fragment.xml +++ b/app/src/main/res/layout/contact_fragment.xml @@ -11,7 +11,7 @@ type="View.OnClickListener" /> + type="org.linphone.ui.main.contacts.viewmodel.ContactViewModel" /> + type="org.linphone.ui.main.contacts.model.ContactModel" /> diff --git a/app/src/main/res/layout/contact_number_address_list_cell.xml b/app/src/main/res/layout/contact_number_address_list_cell.xml index daf4c18dc..ccd169aaa 100644 --- a/app/src/main/res/layout/contact_number_address_list_cell.xml +++ b/app/src/main/res/layout/contact_number_address_list_cell.xml @@ -8,10 +8,11 @@ + type="org.linphone.ui.main.contacts.model.ContactNumberOrAddressModel" /> + type="org.linphone.ui.main.contacts.viewmodel.ContactsListViewModel" /> + type="org.linphone.ui.main.conversations.viewmodel.ConversationViewModel" /> + type="org.linphone.ui.main.conversations.viewmodel.ConversationsListViewModel" /> + type="org.linphone.ui.main.contacts.model.ContactNumberOrAddressModel" /> + type="org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel" /> - - - - + tools:context=".ui.main.MainActivity"> + android:layout_gravity="start"> diff --git a/app/src/main/res/layout/new_contact_fragment.xml b/app/src/main/res/layout/new_contact_fragment.xml index 77e9711d6..6037033bb 100644 --- a/app/src/main/res/layout/new_contact_fragment.xml +++ b/app/src/main/res/layout/new_contact_fragment.xml @@ -47,13 +47,12 @@ diff --git a/app/src/main/res/layout/new_conversation_fragment.xml b/app/src/main/res/layout/new_conversation_fragment.xml index cb515d262..2497d7768 100644 --- a/app/src/main/res/layout/new_conversation_fragment.xml +++ b/app/src/main/res/layout/new_conversation_fragment.xml @@ -10,7 +10,7 @@ type="View.OnClickListener" /> + type="org.linphone.ui.main.conversations.viewmodel.NewConversationViewModel" /> + type="org.linphone.ui.main.viewmodel.TopBarViewModel" /> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/voip_call_bottom_bar.xml b/app/src/main/res/layout/voip_call_bottom_bar.xml new file mode 100644 index 000000000..125017e42 --- /dev/null +++ b/app/src/main/res/layout/voip_call_bottom_bar.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/voip_outgoing_call_fragment.xml b/app/src/main/res/layout/voip_outgoing_call_fragment.xml new file mode 100644 index 000000000..bea8fc4d0 --- /dev/null +++ b/app/src/main/res/layout/voip_outgoing_call_fragment.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/calls_left_nav_graph.xml b/app/src/main/res/navigation/calls_left_nav_graph.xml index b14239118..25fa88e09 100644 --- a/app/src/main/res/navigation/calls_left_nav_graph.xml +++ b/app/src/main/res/navigation/calls_left_nav_graph.xml @@ -7,7 +7,7 @@ diff --git a/app/src/main/res/navigation/calls_right_nav_graph.xml b/app/src/main/res/navigation/calls_right_nav_graph.xml index ff131a814..3f8799ac5 100644 --- a/app/src/main/res/navigation/calls_right_nav_graph.xml +++ b/app/src/main/res/navigation/calls_right_nav_graph.xml @@ -7,7 +7,7 @@ diff --git a/app/src/main/res/navigation/contact_left_nav_graph.xml b/app/src/main/res/navigation/contact_left_nav_graph.xml index 8104de5d8..b1f02d8ea 100644 --- a/app/src/main/res/navigation/contact_left_nav_graph.xml +++ b/app/src/main/res/navigation/contact_left_nav_graph.xml @@ -8,14 +8,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 53d47839f..83ab811e1 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,6 +1,6 @@ -