mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
Added account menu popup
This commit is contained in:
parent
405ab20ab2
commit
8fcf3f1baa
7 changed files with 106 additions and 4 deletions
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ContactAvatarModel>()
|
||||
|
|
@ -81,8 +85,9 @@ class AccountModel(private val account: Account) {
|
|||
}
|
||||
}
|
||||
|
||||
fun openMenu() {
|
||||
fun openMenu(view: View) {
|
||||
// UI thread
|
||||
onMenuClicked?.invoke(view, account)
|
||||
}
|
||||
|
||||
fun refreshRegister() {
|
||||
|
|
|
|||
|
|
@ -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<Event<Boolean>>()
|
||||
}
|
||||
|
||||
val showAccountPopupMenuEvent: MutableLiveData<Event<Pair<View, Account>>> by lazy {
|
||||
MutableLiveData<Event<Pair<View, Account>>>()
|
||||
}
|
||||
|
||||
private val coreListener = object : CoreListenerStub() {
|
||||
override fun onAccountRegistrationStateChanged(
|
||||
core: Core,
|
||||
|
|
@ -83,7 +88,9 @@ class DrawerMenuViewModel : ViewModel() {
|
|||
|
||||
val list = arrayListOf<AccountModel>()
|
||||
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)
|
||||
|
|
|
|||
15
app/src/main/res/drawable/manage_profile.xml
Normal file
15
app/src/main/res/drawable/manage_profile.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:name="vector"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<group android:name="group">
|
||||
<path
|
||||
android:name="path"
|
||||
android:pathData="M 4 18 L 4 17.35 C 4 17.01 4.16 16.69 4.41 16.54 C 6.1 15.53 8.03 15 10 15 C 10.03 15 10.05 15 10.08 15.01 C 10.18 14.31 10.38 13.64 10.67 13.03 C 10.45 13.01 10.23 13 10 13 C 7.58 13 5.32 13.67 3.39 14.82 C 2.51 15.34 2 16.32 2 17.35 L 2 20 L 11.26 20 C 10.84 19.4 10.51 18.72 10.29 18 L 4 18 Z M 10 12 C 12.21 12 14 10.21 14 8 C 14 5.79 12.21 4 10 4 C 7.79 4 6 5.79 6 8 C 6 10.21 7.79 12 10 12 Z M 10 6 C 11.1 6 12 6.9 12 8 C 12 9.1 11.1 10 10 10 C 8.9 10 8 9.1 8 8 C 8 6.9 8.9 6 10 6 Z M 20.75 16 C 20.75 15.78 20.72 15.58 20.69 15.37 L 21.83 14.36 L 20.83 12.63 L 19.38 13.12 C 19.06 12.85 18.7 12.64 18.3 12.49 L 18 11 L 16 11 L 15.7 12.49 C 15.3 12.64 14.94 12.85 14.62 13.12 L 13.17 12.63 L 12.17 14.36 L 13.31 15.37 C 13.28 15.58 13.25 15.78 13.25 16 C 13.25 16.22 13.28 16.42 13.31 16.63 L 12.17 17.64 L 13.17 19.37 L 14.62 18.88 C 14.94 19.15 15.3 19.36 15.7 19.51 L 16 21 L 18 21 L 18.3 19.51 C 18.7 19.36 19.06 19.15 19.38 18.88 L 20.83 19.37 L 21.83 17.64 L 20.69 16.63 C 20.72 16.42 20.75 16.22 20.75 16 Z M 17 18 C 15.9 18 15 17.1 15 16 C 15 14.9 15.9 14 17 14 C 18.1 14 19 14.9 19 16 C 19 17.1 18.1 18 17 18 Z"
|
||||
android:fillColor="#000"
|
||||
android:strokeWidth="1"/>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:radius="16dp" />
|
||||
<solid android:color="@color/white"/>
|
||||
</shape>
|
||||
|
|
@ -101,7 +101,7 @@
|
|||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
<ImageView
|
||||
android:onClick="@{() -> model.openMenu()}"
|
||||
android:onClick="@{() -> model.openMenu(menu)}"
|
||||
android:id="@+id/menu"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
|
|
|
|||
37
app/src/main/res/layout/account_popup_menu.xml
Normal file
37
app/src/main/res/layout/account_popup_menu.xml
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<data>
|
||||
<import type="android.view.View" />
|
||||
<import type="android.graphics.Typeface" />
|
||||
<variable
|
||||
name="manageProfileClickListener"
|
||||
type="View.OnClickListener" />
|
||||
</data>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/shape_round_popup_menu_background">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:onClick="@{manageProfileClickListener}"
|
||||
style="@style/default_text_style"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="20dp"
|
||||
android:text="Manage the profile"
|
||||
android:textSize="14sp"
|
||||
android:textColor="@color/gray_1"
|
||||
android:drawableStart="@drawable/manage_profile"
|
||||
android:drawablePadding="5dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</layout>
|
||||
Loading…
Add table
Reference in a new issue