@@ -607,7 +607,6 @@ class BrowserTabViewModel @Inject constructor(
607607 private var isProcessingTrackingLink = false
608608 private var isLinkOpenedInNewTab = false
609609 private var allowlistRefreshTriggerJob: Job ? = null
610- private var submitQueryJob: Job ? = null
611610 private var isCustomTabScreen: Boolean = false
612611 private var alreadyShownKeyboard: Boolean = false
613612 private var pendingDuckChatAuthUpdate: Boolean = false
@@ -1038,7 +1037,6 @@ class BrowserTabViewModel @Inject constructor(
10381037 public override fun onCleared () {
10391038 buildingSiteFactoryJob?.cancel()
10401039 autoCompleteJob.cancel()
1041- submitQueryJob?.cancel()
10421040 fireproofWebsiteState.removeObserver(fireproofWebsitesObserver)
10431041 navigationAwareLoginDetector.loginEventLiveData.removeObserver(loginDetectionObserver)
10441042 fireproofDialogsEventHandler.event.removeObserver(fireproofDialogEventObserver)
@@ -1244,104 +1242,86 @@ class BrowserTabViewModel @Inject constructor(
12441242 searchCountDao.incrementSearchCount()
12451243 }
12461244
1247- val currentUrl = url
1248- val shouldCloseTabForPrivacyPro = webNavigationState?.hasNavigationHistory != true
1245+ val verticalParameter = extractVerticalParameter( url)
1246+ var urlToNavigate = queryUrlConverter.convertQueryToUrl(trimmedInput, verticalParameter, queryOrigin)
12491247
1250- submitQueryJob?.cancel()
1251- submitQueryJob =
1252- viewModelScope.launch(dispatchers.main()) {
1253- val verticalParameter = extractVerticalParameter(currentUrl)
1254- var urlToNavigate =
1255- withContext(dispatchers.io()) {
1256- queryUrlConverter.convertQueryToUrl(trimmedInput, verticalParameter, queryOrigin)
1248+ when (val type = specialUrlDetector.determineType(trimmedInput)) {
1249+ is ShouldLaunchDuckChatLink -> {
1250+ runCatching {
1251+ logcat { " Duck.ai: ShouldLaunchDuckChatLink $urlToNavigate " }
1252+ val queryParameter = urlToNavigate.toUri().getQueryParameter(QUERY )
1253+ if (queryParameter != null ) {
1254+ duckChat.openDuckChatWithPrefill(queryParameter)
1255+ } else {
1256+ duckChat.openDuckChat()
12571257 }
1258- if (currentGlobalLayoutState() is Invalidated ) {
1259- recoverTabWithQuery(query)
1260- return @launch
1258+ return
12611259 }
1260+ }
12621261
1263- when (val type = specialUrlDetector.determineType(trimmedInput)) {
1264- is ShouldLaunchDuckChatLink -> {
1265- runCatching {
1266- logcat { " Duck.ai: ShouldLaunchDuckChatLink $urlToNavigate " }
1267- val queryParameter = urlToNavigate.toUri().getQueryParameter(QUERY )
1268- if (queryParameter != null ) {
1269- duckChat.openDuckChatWithPrefill(queryParameter)
1270- } else {
1271- duckChat.openDuckChat()
1272- }
1273- return @launch
1274- }
1275- }
1276-
1277- is ShouldLaunchPrivacyProLink -> {
1278- if (shouldCloseTabForPrivacyPro) {
1279- closeCurrentTab()
1280- }
1281- command.value = LaunchPrivacyPro (urlToNavigate.toUri())
1282- return @launch
1283- }
1262+ is ShouldLaunchPrivacyProLink -> {
1263+ if (webNavigationState == null || webNavigationState?.hasNavigationHistory == false ) {
1264+ closeCurrentTab()
1265+ }
1266+ command.value = LaunchPrivacyPro (urlToNavigate.toUri())
1267+ return
1268+ }
12841269
1285- is NonHttpAppLink -> {
1286- nonHttpAppLinkClicked(type)
1287- }
1270+ is NonHttpAppLink -> {
1271+ nonHttpAppLinkClicked(type)
1272+ }
12881273
1289- is SpecialUrlDetector .UrlType .CloakedAmpLink -> {
1290- handleCloakedAmpLink(type.ampUrl)
1291- }
1274+ is SpecialUrlDetector .UrlType .CloakedAmpLink -> {
1275+ handleCloakedAmpLink(type.ampUrl)
1276+ }
12921277
1293- else -> {
1294- if (type is SpecialUrlDetector .UrlType .ExtractedAmpLink ) {
1295- logcat { " AMP link detection: Using extracted URL: ${type.extractedUrl} " }
1296- urlToNavigate = type.extractedUrl
1297- } else if (type is SpecialUrlDetector .UrlType .TrackingParameterLink ) {
1298- logcat { " Loading parameter cleaned URL: ${type.cleanedUrl} " }
1299- urlToNavigate = type.cleanedUrl
1300- }
1278+ else -> {
1279+ if (type is SpecialUrlDetector .UrlType .ExtractedAmpLink ) {
1280+ logcat { " AMP link detection: Using extracted URL: ${type.extractedUrl} " }
1281+ urlToNavigate = type.extractedUrl
1282+ } else if (type is SpecialUrlDetector .UrlType .TrackingParameterLink ) {
1283+ logcat { " Loading parameter cleaned URL: ${type.cleanedUrl} " }
1284+ urlToNavigate = type.cleanedUrl
1285+ }
13011286
1302- if (shouldClearHistoryOnNewQuery()) {
1303- returnedHomeAfterSiteLoaded = false
1304- command.value = ResetHistory
1305- }
1287+ if (shouldClearHistoryOnNewQuery()) {
1288+ returnedHomeAfterSiteLoaded = false
1289+ command.value = ResetHistory
1290+ }
13061291
1307- fireQueryChangedPixel(trimmedInput)
1292+ fireQueryChangedPixel(trimmedInput)
13081293
1309- if (! appSettingsPreferencesStore.showAppLinksPrompt) {
1310- appLinksHandler.updatePreviousUrl(urlToNavigate)
1311- appLinksHandler.setUserQueryState(true )
1312- } else {
1313- clearPreviousUrl()
1314- }
1315-
1316- site?.nextUrl = urlToNavigate
1317- command.value = NavigationCommand .Navigate (urlToNavigate, getUrlHeaders(urlToNavigate))
1318- }
1294+ if (! appSettingsPreferencesStore.showAppLinksPrompt) {
1295+ appLinksHandler.updatePreviousUrl(urlToNavigate)
1296+ appLinksHandler.setUserQueryState(true )
1297+ } else {
1298+ clearPreviousUrl()
13191299 }
13201300
1321- globalLayoutState.value = Browser (isNewTabState = false )
1322- findInPageViewState.value = FindInPageViewState (visible = false )
1323- omnibarViewState.value =
1324- currentOmnibarViewState().copy(
1325- omnibarText = if (isFullUrlEnabled.value) trimmedInput else addressDisplayFormatter.getShortUrl(trimmedInput),
1326- queryOrFullUrl = trimmedInput,
1327- forceExpand = true ,
1328- )
1329- browserViewState.value =
1330- currentBrowserViewState().copy(
1331- browserShowing = true ,
1332- browserError = OMITTED ,
1333- sslError = NONE ,
1334- maliciousSiteBlocked = false ,
1335- maliciousSiteStatus = null ,
1336- lastQueryOrigin = queryOrigin,
1337- )
1338- autoCompleteViewState.value =
1339- currentAutoCompleteViewState().copy(
1340- showSuggestions = false ,
1341- showFavorites = false ,
1342- searchResults = AutoCompleteResult (" " , emptyList()),
1343- )
1301+ site?.nextUrl = urlToNavigate
1302+ command.value = NavigationCommand .Navigate (urlToNavigate, getUrlHeaders(urlToNavigate))
13441303 }
1304+ }
1305+
1306+ globalLayoutState.value = Browser (isNewTabState = false )
1307+ findInPageViewState.value = FindInPageViewState (visible = false )
1308+ omnibarViewState.value =
1309+ currentOmnibarViewState().copy(
1310+ omnibarText = if (isFullUrlEnabled.value) trimmedInput else addressDisplayFormatter.getShortUrl(trimmedInput),
1311+ queryOrFullUrl = trimmedInput,
1312+ forceExpand = true ,
1313+ )
1314+ browserViewState.value =
1315+ currentBrowserViewState().copy(
1316+ browserShowing = true ,
1317+ browserError = OMITTED ,
1318+ sslError = NONE ,
1319+ maliciousSiteBlocked = false ,
1320+ maliciousSiteStatus = null ,
1321+ lastQueryOrigin = queryOrigin,
1322+ )
1323+ autoCompleteViewState.value =
1324+ currentAutoCompleteViewState().copy(showSuggestions = false , showFavorites = false , searchResults = AutoCompleteResult (" " , emptyList()))
13451325 }
13461326
13471327 private fun getUrlHeaders (url : String? ): Map <String , String > = url?.let { customHeadersProvider.getCustomHeaders(it) } ? : emptyMap()
0 commit comments