diff --git a/app/src/main/java/org/linphone/ui/MainActivity.kt b/app/src/main/java/org/linphone/ui/MainActivity.kt
index 61ba36436..a300f5432 100644
--- a/app/src/main/java/org/linphone/ui/MainActivity.kt
+++ b/app/src/main/java/org/linphone/ui/MainActivity.kt
@@ -22,20 +22,25 @@ package org.linphone.ui
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
+import android.view.Gravity
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.Companion.coreContext
import org.linphone.R
-import org.linphone.databinding.ActivityMainBinding
+import org.linphone.databinding.MainActivityBinding
+import org.linphone.utils.hideKeyboard
+import org.linphone.utils.showKeyboard
class MainActivity : AppCompatActivity() {
companion object {
private const val CONTACTS_PERMISSION_REQUEST = 0
}
- private lateinit var binding: ActivityMainBinding
+ private lateinit var viewModel: MainActivityViewModel
+ private lateinit var binding: MainActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, true)
@@ -54,8 +59,30 @@ class MainActivity : AppCompatActivity() {
Thread.sleep(20)
}
- binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
+ binding = DataBindingUtil.setContentView(this, R.layout.main_activity)
binding.lifecycleOwner = this
+
+ viewModel = ViewModelProvider(this)[MainActivityViewModel::class.java]
+ binding.viewModel = viewModel
+
+ binding.setAvatarClickListener {
+ if (binding.sideMenu.isDrawerOpen(Gravity.LEFT)) {
+ binding.sideMenu.closeDrawer(binding.sideMenuContent, true)
+ } else {
+ binding.sideMenu.openDrawer(binding.sideMenuContent, true)
+ }
+ }
+
+ viewModel.focusSearchBarEvent.observe(this) {
+ it.consume { take ->
+ if (take) {
+ // To automatically open keyboard
+ binding.search.showKeyboard(window)
+ } else {
+ binding.search.hideKeyboard()
+ }
+ }
+ }
}
override fun onPostCreate(savedInstanceState: Bundle?) {
diff --git a/app/src/main/java/org/linphone/ui/MainActivityViewModel.kt b/app/src/main/java/org/linphone/ui/MainActivityViewModel.kt
new file mode 100644
index 000000000..0559e4994
--- /dev/null
+++ b/app/src/main/java/org/linphone/ui/MainActivityViewModel.kt
@@ -0,0 +1,52 @@
+/*
+ * 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
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import org.linphone.utils.Event
+
+class MainActivityViewModel : ViewModel() {
+ val searchBarVisible = MutableLiveData()
+
+ val searchFilter = MutableLiveData()
+
+ val focusSearchBarEvent: MutableLiveData> by lazy {
+ MutableLiveData>()
+ }
+
+ init {
+ searchBarVisible.value = false
+ }
+
+ fun openSearchBar() {
+ searchBarVisible.value = true
+ focusSearchBarEvent.value = Event(true)
+ }
+
+ fun closeSearchBar() {
+ searchBarVisible.value = false
+ focusSearchBarEvent.value = Event(false)
+ }
+
+ fun clearFilter() {
+ searchFilter.value = ""
+ }
+}
diff --git a/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt b/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt
index a5131b319..09ad5cd5e 100644
--- a/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt
+++ b/app/src/main/java/org/linphone/ui/contacts/ContactsFragment.kt
@@ -33,8 +33,6 @@ import androidx.transition.AutoTransition
import org.linphone.R
import org.linphone.databinding.ContactsFragmentBinding
import org.linphone.ui.contacts.viewmodel.ContactsListViewModel
-import org.linphone.utils.hideKeyboard
-import org.linphone.utils.showKeyboard
class ContactsFragment : Fragment() {
private lateinit var binding: ContactsFragmentBinding
@@ -86,17 +84,6 @@ class ContactsFragment : Fragment() {
}
}
- listViewModel.focusSearchBarEvent.observe(viewLifecycleOwner) {
- it.consume { take ->
- if (take) {
- // To automatically open keyboard
- binding.search.showKeyboard(requireActivity().window)
- } else {
- binding.search.hideKeyboard()
- }
- }
- }
-
/*(view.parent as? ViewGroup)?.doOnPreDraw {
startPostponedEnterTransition()
}*/
diff --git a/app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactsListViewModel.kt b/app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactsListViewModel.kt
index a9601ea4d..f748cb415 100644
--- a/app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactsListViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/contacts/viewmodel/ContactsListViewModel.kt
@@ -19,34 +19,6 @@
*/
package org.linphone.ui.contacts.viewmodel
-import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
-import org.linphone.utils.Event
-class ContactsListViewModel : ViewModel() {
- val searchBarVisible = MutableLiveData()
-
- val searchFilter = MutableLiveData()
-
- val focusSearchBarEvent: MutableLiveData> by lazy {
- MutableLiveData>()
- }
-
- init {
- searchBarVisible.value = false
- }
-
- fun openSearchBar() {
- searchBarVisible.value = true
- focusSearchBarEvent.value = Event(true)
- }
-
- fun closeSearchBar() {
- searchBarVisible.value = false
- focusSearchBarEvent.value = Event(false)
- }
-
- fun clearFilter() {
- searchFilter.value = ""
- }
-}
+class ContactsListViewModel : ViewModel()
diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
index 95f507fa2..58c0b2ddc 100644
--- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
+++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
@@ -24,12 +24,12 @@ import android.view.Window
import android.view.inputmethod.InputMethodManager
import android.widget.ImageView
import android.widget.TextView
-import androidx.appcompat.widget.AppCompatEditText
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.databinding.BindingAdapter
import coil.load
import coil.transform.CircleCropTransformation
+import com.google.android.material.textfield.TextInputLayout
import org.linphone.R
import org.linphone.contacts.ContactData
@@ -37,14 +37,14 @@ import org.linphone.contacts.ContactData
* This file contains all the data binding necessary for the app
*/
-fun AppCompatEditText.showKeyboard(window: Window) {
+fun TextInputLayout.showKeyboard(window: Window) {
this.requestFocus()
/*val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)*/
WindowCompat.getInsetsController(window, this).show(WindowInsetsCompat.Type.ime())
}
-fun AppCompatEditText.hideKeyboard() {
+fun TextInputLayout.hideKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(this.windowToken, 0)
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index 404ed1bb6..000000000
--- a/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/contacts_fragment.xml b/app/src/main/res/layout/contacts_fragment.xml
index 4fc4407a1..036fb63db 100644
--- a/app/src/main/res/layout/contacts_fragment.xml
+++ b/app/src/main/res/layout/contacts_fragment.xml
@@ -21,121 +21,15 @@
android:layout_height="match_parent"
android:background="@color/primary_color">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 000000000..30f2574f5
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,4 @@
+
+
+
+