From 8fcf3f1baad5e51ba8082bb91961722d5fd7772e Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 17 Aug 2023 12:55:23 +0200 Subject: [PATCH] Added account menu popup --- .../java/org/linphone/ui/main/MainActivity.kt | 33 +++++++++++++++++ .../linphone/ui/main/model/AccountModel.kt | 9 ++++- .../ui/main/viewmodel/DrawerMenuViewModel.kt | 9 ++++- app/src/main/res/drawable/manage_profile.xml | 15 ++++++++ .../shape_round_popup_menu_background.xml | 5 +++ app/src/main/res/layout/account_list_cell.xml | 2 +- .../main/res/layout/account_popup_menu.xml | 37 +++++++++++++++++++ 7 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/drawable/manage_profile.xml create mode 100644 app/src/main/res/drawable/shape_round_popup_menu_background.xml create mode 100644 app/src/main/res/layout/account_popup_menu.xml 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 3f5878096..a1a646d81 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,10 @@ import android.content.Intent 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.LayoutParams.WRAP_CONTENT +import android.widget.PopupWindow import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.view.WindowCompat @@ -31,6 +35,8 @@ import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R +import org.linphone.core.Account +import org.linphone.databinding.AccountPopupMenuBinding import org.linphone.databinding.MainActivityBinding import org.linphone.ui.assistant.AssistantActivity import org.linphone.ui.main.viewmodel.DrawerMenuViewModel @@ -84,6 +90,12 @@ class MainActivity : AppCompatActivity() { binding.drawerMenu.close() } } + + drawerMenuViewModel.showAccountPopupMenuEvent.observe(this) { + it.consume { pair -> + showAccountPopupMenu(pair.first, pair.second) + } + } } override fun onPostCreate(savedInstanceState: Bundle?) { @@ -152,4 +164,25 @@ class MainActivity : AppCompatActivity() { } }*/ } + + private fun showAccountPopupMenu(view: View, account: Account) { + val popupView: AccountPopupMenuBinding = DataBindingUtil.inflate( + LayoutInflater.from(baseContext), + R.layout.account_popup_menu, + null, + false + ) + popupView.setManageProfileClickListener { + // TODO: navigate to profile + } + val popupWindow = PopupWindow( + popupView.root, + WRAP_CONTENT, + WRAP_CONTENT, + true + ) + // Elevation is for showing a shadow around the popup + popupWindow.elevation = 20f + popupWindow.showAsDropDown(view, 0, 0, Gravity.BOTTOM) + } } diff --git a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt index 5eb11b5bc..63d5b954c 100644 --- a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt +++ b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt @@ -19,6 +19,7 @@ */ package org.linphone.ui.main.model +import android.view.View import androidx.lifecycle.MutableLiveData import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.core.Account @@ -27,7 +28,10 @@ import org.linphone.core.Friend import org.linphone.core.RegistrationState import org.linphone.ui.main.contacts.model.ContactAvatarModel -class AccountModel(private val account: Account) { +class AccountModel( + private val account: Account, + private val onMenuClicked: ((view: View, account: Account) -> Unit)? = null +) { val friend: Friend? val contact = MutableLiveData() @@ -81,8 +85,9 @@ class AccountModel(private val account: Account) { } } - fun openMenu() { + fun openMenu(view: View) { // UI thread + onMenuClicked?.invoke(view, account) } fun refreshRegister() { diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt index a3bf1f034..99f76b153 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt @@ -19,6 +19,7 @@ */ package org.linphone.ui.main.viewmodel +import android.view.View import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import org.linphone.LinphoneApplication.Companion.coreContext @@ -40,6 +41,10 @@ class DrawerMenuViewModel : ViewModel() { MutableLiveData>() } + val showAccountPopupMenuEvent: MutableLiveData>> by lazy { + MutableLiveData>>() + } + private val coreListener = object : CoreListenerStub() { override fun onAccountRegistrationStateChanged( core: Core, @@ -83,7 +88,9 @@ class DrawerMenuViewModel : ViewModel() { val list = arrayListOf() for (account in coreContext.core.accountList) { - val model = AccountModel(account) + val model = AccountModel(account) { view, account -> + showAccountPopupMenuEvent.postValue(Event(Pair(view, account))) + } list.add(model) } accounts.postValue(list) diff --git a/app/src/main/res/drawable/manage_profile.xml b/app/src/main/res/drawable/manage_profile.xml new file mode 100644 index 000000000..6697a6859 --- /dev/null +++ b/app/src/main/res/drawable/manage_profile.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_round_popup_menu_background.xml b/app/src/main/res/drawable/shape_round_popup_menu_background.xml new file mode 100644 index 000000000..18bb74022 --- /dev/null +++ b/app/src/main/res/drawable/shape_round_popup_menu_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/account_list_cell.xml b/app/src/main/res/layout/account_list_cell.xml index 6e443d68a..5e2b47e88 100644 --- a/app/src/main/res/layout/account_list_cell.xml +++ b/app/src/main/res/layout/account_list_cell.xml @@ -101,7 +101,7 @@ app:layout_constraintBottom_toBottomOf="parent"/> + + + + + + + + + + + + + + + \ No newline at end of file