Hiding keyboard when closing slide panel

This commit is contained in:
Sylvain Berfini 2022-07-04 10:38:40 +02:00
parent 0327928bb1
commit 1de4999a65
3 changed files with 16 additions and 16 deletions

View file

@ -19,7 +19,6 @@
*/ */
package org.linphone.activities.main package org.linphone.activities.main
import android.app.Activity
import android.content.ComponentCallbacks2 import android.content.ComponentCallbacks2
import android.content.Intent import android.content.Intent
import android.content.res.Configuration import android.content.res.Configuration
@ -29,7 +28,6 @@ import android.os.Parcelable
import android.view.Gravity import android.view.Gravity
import android.view.MotionEvent import android.view.MotionEvent
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
@ -61,10 +59,7 @@ import org.linphone.contact.ContactsUpdatedListenerStub
import org.linphone.core.CorePreferences import org.linphone.core.CorePreferences
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.MainActivityBinding import org.linphone.databinding.MainActivityBinding
import org.linphone.utils.AppUtils import org.linphone.utils.*
import org.linphone.utils.Event
import org.linphone.utils.FileUtils
import org.linphone.utils.ShortcutsHelper
class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestinationChangedListener { class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestinationChangedListener {
private lateinit var binding: MainActivityBinding private lateinit var binding: MainActivityBinding
@ -108,8 +103,8 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
sharedViewModel.layoutChangedEvent.value = Event(true) sharedViewModel.layoutChangedEvent.value = Event(true)
} }
private var tabsFragmentVisible1 = true private var shouldTabsBeVisibleDependingOnDestination = true
private var tabsFragmentVisible2 = true private var shouldTabsBeVisibleDueToOrientationAndKeyboard = true
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -209,7 +204,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
val keyboardVisible = ViewCompat.getRootWindowInsets(binding.rootCoordinatorLayout) val keyboardVisible = ViewCompat.getRootWindowInsets(binding.rootCoordinatorLayout)
?.isVisible(WindowInsetsCompat.Type.ime()) == true ?.isVisible(WindowInsetsCompat.Type.ime()) == true
Log.d("[Tabs Fragment] Keyboard is ${if (keyboardVisible) "visible" else "invisible"}") Log.d("[Tabs Fragment] Keyboard is ${if (keyboardVisible) "visible" else "invisible"}")
tabsFragmentVisible2 = !portraitOrientation || !keyboardVisible shouldTabsBeVisibleDueToOrientationAndKeyboard = !portraitOrientation || !keyboardVisible
updateTabsFragmentVisibility() updateTabsFragmentVisibility()
} }
@ -234,7 +229,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
statusFragment.visibility = View.VISIBLE statusFragment.visibility = View.VISIBLE
} }
tabsFragmentVisible1 = when (destination.id) { shouldTabsBeVisibleDependingOnDestination = when (destination.id) {
R.id.masterCallLogsFragment, R.id.masterContactsFragment, R.id.dialerFragment, R.id.masterChatRoomsFragment -> R.id.masterCallLogsFragment, R.id.masterContactsFragment, R.id.dialerFragment, R.id.masterChatRoomsFragment ->
true true
else -> false else -> false
@ -251,12 +246,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
} }
private fun updateTabsFragmentVisibility() { private fun updateTabsFragmentVisibility() {
tabsFragment.visibility = if (tabsFragmentVisible1 && tabsFragmentVisible2) View.VISIBLE else View.GONE tabsFragment.visibility = if (shouldTabsBeVisibleDependingOnDestination && shouldTabsBeVisibleDueToOrientationAndKeyboard) View.VISIBLE else View.GONE
}
private fun View.hideKeyboard() {
val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
} }
private fun handleIntentParams(intent: Intent) { private fun handleIntentParams(intent: Intent) {

View file

@ -34,6 +34,7 @@ import org.linphone.activities.main.viewmodels.ListTopBarViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.utils.AppUtils import org.linphone.utils.AppUtils
import org.linphone.utils.DialogUtils import org.linphone.utils.DialogUtils
import org.linphone.utils.hideKeyboard
/** /**
* This fragment can be inherited by all fragments that will display a list * This fragment can be inherited by all fragments that will display a list
@ -148,6 +149,7 @@ abstract class MasterFragment<T : ViewDataBinding, U : SelectionListAdapter<*, *
override fun handleOnBackPressed() { override fun handleOnBackPressed() {
Log.d("[Master Fragment] handleOnBackPressed, closing sliding pane") Log.d("[Master Fragment] handleOnBackPressed, closing sliding pane")
slidingPaneLayout.hideKeyboard()
slidingPaneLayout.closePane() slidingPaneLayout.closePane()
} }

View file

@ -61,6 +61,14 @@ import org.linphone.views.VoiceRecordProgressBar
* This file contains all the data binding necessary for the app * This file contains all the data binding necessary for the app
*/ */
fun View.hideKeyboard() {
try {
val imm =
context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
} catch (e: Exception) {}
}
@BindingAdapter("android:src") @BindingAdapter("android:src")
fun ImageView.setSourceImageResource(resource: Int) { fun ImageView.setSourceImageResource(resource: Int) {
this.setImageResource(resource) this.setImageResource(resource)