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 @@ + + + +