[fenix] Bug 1804377 - Avoid unwanted dismissal of tab history.

pull/600/head
mcarare 1 year ago committed by mergify[bot]
parent 0e795b267b
commit 375ba00181

@ -89,6 +89,7 @@ import org.mozilla.fenix.ext.alreadyOnDestination
import org.mozilla.fenix.ext.areNotificationsEnabledSafe
import org.mozilla.fenix.ext.breadcrumb
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.hasTopDestination
import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.ext.setNavigationIcon
import org.mozilla.fenix.ext.settings
@ -133,6 +134,7 @@ import org.mozilla.fenix.settings.search.EditCustomSearchEngineFragmentDirection
import org.mozilla.fenix.settings.studies.StudiesFragmentDirections
import org.mozilla.fenix.settings.wallpaper.WallpaperSettingsFragmentDirections
import org.mozilla.fenix.share.AddNewDeviceFragmentDirections
import org.mozilla.fenix.tabhistory.TabHistoryDialogFragment
import org.mozilla.fenix.tabstray.TabsTrayFragment
import org.mozilla.fenix.tabstray.TabsTrayFragmentDirections
import org.mozilla.fenix.theme.DefaultThemeManager
@ -715,9 +717,18 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
return super.onKeyDown(keyCode, event)
}
final override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
final override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
if (shouldUseCustomBackLongPress() && keyCode == KeyEvent.KEYCODE_BACK) {
backLongPressJob?.cancel()
// check if the key has been pressed for longer than the time needed for a press to turn into a long press
// and if tab history is already visible we do not want to dismiss it.
if (event.eventTime - event.downTime >= ViewConfiguration.getLongPressTimeout() &&
navHost.navController.hasTopDestination(TabHistoryDialogFragment.NAME)
) {
// returning true avoids further processing of the KeyUp event and avoids dismissing tab history.
return true
}
}
return super.onKeyUp(keyCode, event)
}

@ -4,6 +4,7 @@
package org.mozilla.fenix.ext
import android.annotation.SuppressLint
import androidx.annotation.IdRes
import androidx.navigation.NavController
import androidx.navigation.NavDirections
@ -34,3 +35,14 @@ fun NavController.navigateSafe(
this.navigate(directions)
}
}
/**
* Checks if the Fragment with a [fragmentClassName] is on top of the back queue.
*/
@SuppressLint("RestrictedApi")
fun NavController.hasTopDestination(fragmentClassName: String): Boolean {
return this.backQueue.lastOrNull()?.destination?.displayName?.contains(
fragmentClassName,
true,
) == true
}

@ -67,5 +67,7 @@ class TabHistoryDialogFragment : BottomSheetDialogFragment() {
companion object {
const val EXTRA_SESSION_ID = "activeSessionId"
val NAME: String = TabHistoryDialogFragment::class.java.canonicalName?.substringAfterLast('.')
?: TabHistoryDialogFragment::class.java.simpleName
}
}

Loading…
Cancel
Save