diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index 0bbfec41c666..ec749e8493ab 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -895,6 +895,14 @@ class BrowserTabFragment : if (swipingTabsFeature.isEnabled) { disableSwipingOutsideTheOmnibar() } + + binding.includeNewBrowserTab.newTabLayout.apply { + setOnClickListener { + if (omnibar.omnibarTextInput.isFocused) { + binding.focusDummy.requestFocus() + } + } + } } @SuppressLint("ClickableViewAccessibility") @@ -3302,6 +3310,14 @@ class BrowserTabFragment : Timber.v("Keyboard now showing") showKeyboard(omnibar.omnibarTextInput) omnibar.showOutline(true) + omnibar.textInputRootView.post { + val rootView = omnibar.textInputRootView + val keyboardVisibilityUtil = KeyboardVisibilityUtil(rootView) + keyboardVisibilityUtil.addKeyboardHiddenListener { + binding.focusDummy.requestFocus() + omnibar.showOutline(false) + } + } } } diff --git a/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayout.kt b/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayout.kt index fa60b0fccf57..cbc2b6d3b480 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayout.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayout.kt @@ -56,6 +56,7 @@ import com.duckduckgo.app.browser.databinding.IncludeFindInPageBinding import com.duckduckgo.app.browser.omnibar.Omnibar.OmnibarTextState import com.duckduckgo.app.browser.omnibar.Omnibar.ViewMode import com.duckduckgo.app.browser.omnibar.Omnibar.ViewMode.CustomTab +import com.duckduckgo.app.browser.omnibar.Omnibar.ViewMode.NewTab import com.duckduckgo.app.browser.omnibar.OmnibarLayout.Decoration.CancelAnimations import com.duckduckgo.app.browser.omnibar.OmnibarLayout.Decoration.ChangeCustomTabTitle import com.duckduckgo.app.browser.omnibar.OmnibarLayout.Decoration.DisableVoiceSearch @@ -67,7 +68,6 @@ import com.duckduckgo.app.browser.omnibar.OmnibarLayout.Decoration.Outline import com.duckduckgo.app.browser.omnibar.OmnibarLayout.Decoration.PrivacyShieldChanged import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command.CancelTrackersAnimation import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command.StartTrackersAnimation -import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.LeadingIconState import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.LeadingIconState.PRIVACY_SHIELD import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.ViewState import com.duckduckgo.app.browser.omnibar.animations.BrowserTrackersAnimatorHelper @@ -198,7 +198,7 @@ open class OmnibarLayout @JvmOverloads constructor( ChangeBounds().apply { duration = 400 interpolator = OvershootInterpolator(1.3f) - } + }, ) addTransition( Fade().apply { @@ -208,7 +208,7 @@ open class OmnibarLayout @JvmOverloads constructor( addTarget(fireIconMenu) addTarget(tabsMenu) addTarget(browserMenu) - } + }, ) } } @@ -522,7 +522,6 @@ open class OmnibarLayout @JvmOverloads constructor( val showBrowserMenu: Boolean, val showBrowserMenuHighlight: Boolean, val showChatMenu: Boolean, - val experimentalIconsEnabled: Boolean ) private var previousButtonState: ButtonState? = null @@ -536,7 +535,6 @@ open class OmnibarLayout @JvmOverloads constructor( showBrowserMenu = viewState.showBrowserMenu, showBrowserMenuHighlight = viewState.showBrowserMenuHighlight, showChatMenu = viewState.showChatMenu, - experimentalIconsEnabled = viewState.experimentalIconsEnabled ) if (!isInitialRender && newButtonState != previousButtonState) { @@ -550,7 +548,7 @@ open class OmnibarLayout @JvmOverloads constructor( browserMenu.isVisible = viewState.showBrowserMenu browserMenuHighlight.isVisible = viewState.showBrowserMenuHighlight spacer.isVisible = viewState.showVoiceSearch || viewState.showClearButton - aiChatMenu.isVisible = viewState.showChatMenu + aiChatMenu.isVisible = viewState.viewMode is NewTab || viewState.showChatMenu toolbarContainer.requestLayout() isInitialRender = false diff --git a/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt index 9c34395d7ad0..e5b303fcddd3 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt @@ -117,10 +117,10 @@ class OmnibarLayoutViewModel @Inject constructor( val hasUnreadTabs: Boolean = false, val shouldUpdateTabsCount: Boolean = false, val showVoiceSearch: Boolean = false, - val showClearButton: Boolean = true, - val showTabsMenu: Boolean = false, - val showFireIcon: Boolean = false, - val showBrowserMenu: Boolean = false, + val showClearButton: Boolean = false, + val showTabsMenu: Boolean = true, + val showFireIcon: Boolean = true, + val showBrowserMenu: Boolean = true, val showChatMenu: Boolean = true, val showBrowserMenuHighlight: Boolean = false, val scrollingEnabled: Boolean = true, @@ -149,41 +149,13 @@ class OmnibarLayoutViewModel @Inject constructor( logVoiceSearchAvailability() } - private fun onOmnibarClicked() { - Timber.d("Omnibar: onOmnibarClicked") - - viewModelScope.launch { - command.send(Command.CancelTrackersAnimation) - } - - _viewState.update { - it.copy( - hasFocus = true, - expanded = true, - leadingIconState = SEARCH, - highlightPrivacyShield = HighlightableButton.Gone, - showClearButton = true, - showTabsMenu = false, - showFireIcon = false, - showBrowserMenu = false, - showChatMenu = true, - showVoiceSearch = shouldShowVoiceSearch( - hasFocus = true, - query = _viewState.value.omnibarText, - hasQueryChanged = false, - urlLoaded = _viewState.value.url, - ), - ) - } - } - fun onOmnibarFocusChanged( hasFocus: Boolean, query: String, ) { Timber.d("Omnibar: onOmnibarFocusChanged") - val showClearButton = hasFocus - val showControls = !hasFocus + val showClearButton = hasFocus && query.isNotBlank() + val showControls = query.isBlank() if (hasFocus) { viewModelScope.launch { @@ -398,7 +370,7 @@ class OmnibarLayoutViewModel @Inject constructor( showBrowserMenu = showControls, showTabsMenu = showControls, showFireIcon = showControls, - showChatMenu = !showControls, + showChatMenu = false, ) } } @@ -568,7 +540,6 @@ class OmnibarLayoutViewModel @Inject constructor( fun onUserTouchedOmnibarTextInput(touchAction: Int) { Timber.d("Omnibar: onUserTouchedOmnibarTextInput") - onOmnibarClicked() if (touchAction == ACTION_UP) { firePixelBasedOnCurrentUrl( AppPixelName.ADDRESS_BAR_NEW_TAB_PAGE_CLICKED, diff --git a/app/src/main/res/layout/include_new_browser_tab.xml b/app/src/main/res/layout/include_new_browser_tab.xml index 65fc2249ccfe..72d10bd53185 100644 --- a/app/src/main/res/layout/include_new_browser_tab.xml +++ b/app/src/main/res/layout/include_new_browser_tab.xml @@ -22,6 +22,8 @@ android:layout_height="match_parent" android:clipChildren="false" android:fillViewport="true" + android:clickable="true" + android:focusable="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.duckduckgo.app.browser.BrowserActivity" tools:showIn="@layout/fragment_browser_tab"> diff --git a/app/src/main/res/layout/view_new_omnibar.xml b/app/src/main/res/layout/view_new_omnibar.xml index f480436efea5..6a2e6c06e3ea 100644 --- a/app/src/main/res/layout/view_new_omnibar.xml +++ b/app/src/main/res/layout/view_new_omnibar.xml @@ -260,19 +260,17 @@ android:padding="@dimen/keyline_2" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/fireIconMenu" - app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> - + android:src="@drawable/ic_ai_chat_outline_24" /> - + android:src="@drawable/ic_ai_chat_outline_24" /> Back Forward - Search or type URL + Search Clear search input No compatible app installed Add Bookmark diff --git a/common/common-utils/src/main/java/com/duckduckgo/common/utils/KeyboardVisibilityUtil.kt b/common/common-utils/src/main/java/com/duckduckgo/common/utils/KeyboardVisibilityUtil.kt index 5c1cca0c9271..e7fe291d483e 100644 --- a/common/common-utils/src/main/java/com/duckduckgo/common/utils/KeyboardVisibilityUtil.kt +++ b/common/common-utils/src/main/java/com/duckduckgo/common/utils/KeyboardVisibilityUtil.kt @@ -35,6 +35,17 @@ class KeyboardVisibilityUtil(private val rootView: View) { ) } + fun addKeyboardHiddenListener(onKeyboardHidden: () -> Unit) { + var wasKeyboardVisible = isKeyboardVisible() + rootView.viewTreeObserver.addOnGlobalLayoutListener { + val isVisible = isKeyboardVisible() + if (wasKeyboardVisible && !isVisible) { + onKeyboardHidden() + } + wasKeyboardVisible = isVisible + } + } + private fun isKeyboardVisible(): Boolean { val rect = Rect() rootView.getWindowVisibleDisplayFrame(rect)