Skip to content

Commit 5abc9db

Browse files
Avoid dismissing the modal after the desktop browser link is shared and update the layouts to matcth the design (duckduckgo#7782)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1211724162604201/task/1213374841796679?focus=true ### Description Removed the logic that would dismiss the “Get Desktop Browser” modal after the link is shared. Updated the desktop browser promotion screen layout with improved spacing and responsive design. Also updated the sync "Get on Other Devices" screen layout with similar responsive design improvements, including maximum width constraints and updated spacing for better visual consistency. ### Steps to test this PR _Desktop Browser Promotion_ - [ ] Verify the “Get Destkop Browser” matches the design - [ ] Verify the share functionality doesn’t dismiss the screen _Sync Get on Other Devices_ - [ ] Navigate to the sync "Get on Other Devices" screen - [ ] Verify the layout matches the design ### UI changes Get on other devices: | Before | After | | ------ | ----- | | ![Screenshot 2026-02-20 at 13.00.41.png](https://app.graphite.com/user-attachments/assets/6f864d30-940b-433e-a597-5eba13ca2087.png) | ![Screenshot 2026-02-20 at 13.01.09.png](https://app.graphite.com/user-attachments/assets/cd8a4cfa-1b15-4eda-9759-e51e41cc8f39.png) | <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Mostly UI/layout adjustments plus removal of a share-event side effect; low risk aside from potential UX regressions on different screen sizes. > > **Overview** > Stops the "Get Desktop Browser" promo from auto-dismissing after a share by removing the share-event flow/handler plumbing (including `GetDesktopBrowserShareEventHandler`, its test, and result-code usage) while still marking the promo dismissed in `GetDesktopBrowserShareBroadcastReceiver`. > > Updates the "Get Desktop Browser" and Sync "Get on Other Devices" screens to match updated designs: wraps content in scroll views with `fillViewport`, adjusts spacing, and adds max-width constraints via new `600dp` dimens (`getDesktopBrowserMaxItemWidth`, `syncOtherDevicesMaxItemWidth`) for better responsiveness. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f1641b8. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent 66f5f11 commit 5abc9db

8 files changed

Lines changed: 149 additions & 275 deletions

File tree

app/src/main/java/com/duckduckgo/app/desktopbrowser/GetDesktopBrowserActivity.kt

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,6 @@ class GetDesktopBrowserActivity : DuckDuckGoActivity() {
5050
@Inject
5151
lateinit var getDesktopBrowserViewModelFactory: GetDesktopBrowserViewModel.Factory
5252

53-
@Inject
54-
lateinit var shareEventHandler: GetDesktopBrowserShareEventHandler
55-
5653
private val binding: ActivityGetDesktopBrowserBinding by viewBinding()
5754

5855
private val viewModel by lazy {
@@ -81,18 +78,6 @@ class GetDesktopBrowserActivity : DuckDuckGoActivity() {
8178
.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED)
8279
.onEach { processCommand(it) }
8380
.launchIn(lifecycleScope)
84-
85-
// Observe share events and close activity when link is shared
86-
shareEventHandler.linkShared
87-
.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED)
88-
.onEach { shared ->
89-
if (shared) {
90-
shareEventHandler.consumeEvent()
91-
setResult(RESULT_DISMISSED_OR_SHARED)
92-
finish()
93-
}
94-
}
95-
.launchIn(lifecycleScope)
9681
}
9782

9883
private fun render(viewState: GetDesktopBrowserViewModel.ViewState) {
@@ -106,7 +91,6 @@ class GetDesktopBrowserActivity : DuckDuckGoActivity() {
10691
}
10792

10893
is GetDesktopBrowserViewModel.Command.Dismissed -> {
109-
setResult(RESULT_DISMISSED_OR_SHARED)
11094
finish()
11195
}
11296

@@ -177,10 +161,6 @@ class GetDesktopBrowserActivity : DuckDuckGoActivity() {
177161
},
178162
extras = this.defaultViewModelCreationExtras,
179163
)[GetDesktopBrowserViewModel::class.java]
180-
181-
companion object {
182-
const val RESULT_DISMISSED_OR_SHARED = 100
183-
}
184164
}
185165

186166
data class GetDesktopBrowserActivityParams(

app/src/main/java/com/duckduckgo/app/desktopbrowser/GetDesktopBrowserShareBroadcastReceiver.kt

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,9 @@ import android.content.BroadcastReceiver
2020
import android.content.Context
2121
import android.content.Intent
2222
import com.duckduckgo.anvil.annotations.InjectWith
23-
import com.duckduckgo.app.di.AppCoroutineScope
2423
import com.duckduckgo.app.settings.db.SettingsDataStore
25-
import com.duckduckgo.common.utils.DispatcherProvider
2624
import com.duckduckgo.di.scopes.ReceiverScope
2725
import dagger.android.AndroidInjection
28-
import kotlinx.coroutines.CoroutineScope
29-
import kotlinx.coroutines.launch
3026
import javax.inject.Inject
3127

3228
@InjectWith(ReceiverScope::class)
@@ -35,27 +31,11 @@ class GetDesktopBrowserShareBroadcastReceiver : BroadcastReceiver() {
3531
@Inject
3632
lateinit var settingsDataStore: SettingsDataStore
3733

38-
@Inject
39-
lateinit var sharedEvent: GetDesktopBrowserShareEventHandler
40-
41-
@Inject
42-
lateinit var dispatcherProvider: DispatcherProvider
43-
44-
@Inject
45-
@AppCoroutineScope
46-
lateinit var coroutineScope: CoroutineScope
47-
4834
override fun onReceive(
4935
context: Context,
5036
intent: Intent,
5137
) {
5238
AndroidInjection.inject(this, context)
53-
54-
val pendingResult = goAsync()
55-
coroutineScope.launch(dispatcherProvider.io()) {
56-
settingsDataStore.getDesktopBrowserSettingDismissed = true
57-
sharedEvent.onLinkShared()
58-
pendingResult.finish()
59-
}
39+
settingsDataStore.getDesktopBrowserSettingDismissed = true
6040
}
6141
}

app/src/main/java/com/duckduckgo/app/desktopbrowser/GetDesktopBrowserShareEventHandler.kt

Lines changed: 0 additions & 46 deletions
This file was deleted.

app/src/main/res/layout/activity_get_desktop_browser.xml

Lines changed: 98 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -23,90 +23,110 @@
2323
android:id="@+id/includeToolbar"
2424
layout="@layout/include_default_toolbar" />
2525

26-
<ImageView
27-
android:id="@+id/desktopBrowserIcon"
28-
android:layout_width="wrap_content"
29-
android:layout_height="wrap_content"
30-
android:layout_marginTop="@dimen/keyline_6"
31-
android:importantForAccessibility="no"
32-
android:src="@drawable/image_get_desktop_browser"
33-
app:layout_constraintEnd_toEndOf="parent"
34-
app:layout_constraintStart_toStartOf="parent"
35-
app:layout_constraintTop_toBottomOf="@id/includeToolbar" />
36-
37-
<com.duckduckgo.common.ui.view.text.DaxTextView
38-
android:id="@+id/titleText"
26+
<ScrollView
3927
android:layout_width="0dp"
40-
android:layout_height="wrap_content"
41-
android:layout_marginStart="@dimen/keyline_5"
42-
android:layout_marginTop="40dp"
43-
android:layout_marginEnd="@dimen/keyline_5"
44-
android:gravity="center"
45-
android:text="@string/getDesktopBrowserTitle"
28+
android:layout_height="0dp"
29+
android:fillViewport="true"
30+
app:layout_constraintBottom_toBottomOf="parent"
4631
app:layout_constraintEnd_toEndOf="parent"
4732
app:layout_constraintStart_toStartOf="parent"
48-
app:layout_constraintTop_toBottomOf="@id/desktopBrowserIcon"
49-
app:typography="title" />
33+
app:layout_constraintTop_toBottomOf="@id/includeToolbar">
5034

51-
<com.duckduckgo.common.ui.view.text.DaxTextView
52-
android:id="@+id/bodyText"
53-
android:layout_width="0dp"
54-
android:layout_height="wrap_content"
55-
android:layout_marginStart="@dimen/keyline_5"
56-
android:layout_marginTop="@dimen/keyline_5"
57-
android:layout_marginEnd="@dimen/keyline_5"
58-
android:gravity="center"
59-
android:paddingStart="@dimen/keyline_6"
60-
android:paddingEnd="@dimen/keyline_6"
61-
android:text="@string/getDesktopBrowserBody"
62-
app:layout_constraintEnd_toEndOf="parent"
63-
app:layout_constraintStart_toStartOf="parent"
64-
app:layout_constraintTop_toBottomOf="@id/titleText"
65-
app:textType="secondary"
66-
app:typography="body1" />
35+
<androidx.constraintlayout.widget.ConstraintLayout
36+
android:layout_width="match_parent"
37+
android:layout_height="wrap_content"
38+
android:paddingStart="@dimen/keyline_5"
39+
android:paddingEnd="@dimen/keyline_5">
6740

68-
<com.duckduckgo.common.ui.view.text.DaxTextView
69-
android:id="@+id/browserUrl"
70-
android:layout_width="0dp"
71-
android:layout_height="wrap_content"
72-
android:layout_marginStart="@dimen/keyline_5"
73-
android:layout_marginEnd="@dimen/keyline_5"
74-
android:gravity="center"
75-
android:paddingStart="@dimen/keyline_6"
76-
android:paddingEnd="@dimen/keyline_6"
77-
android:text="@string/getDesktopBrowserUrl"
78-
android:textColor="?daxColorAccentBlue"
79-
app:layout_constraintEnd_toEndOf="parent"
80-
app:layout_constraintStart_toStartOf="parent"
81-
app:layout_constraintTop_toBottomOf="@id/bodyText"
82-
app:typography="body1_bold" />
41+
<ImageView
42+
android:id="@+id/desktopBrowserIcon"
43+
android:layout_width="96dp"
44+
android:layout_height="96dp"
45+
android:layout_marginTop="@dimen/keyline_5"
46+
android:importantForAccessibility="no"
47+
android:src="@drawable/image_get_desktop_browser"
48+
app:layout_constraintEnd_toEndOf="parent"
49+
app:layout_constraintStart_toStartOf="parent"
50+
app:layout_constraintTop_toTopOf="parent" />
8351

84-
<com.duckduckgo.common.ui.view.button.DaxButtonPrimary
85-
android:id="@+id/shareDownloadLinkButton"
86-
android:layout_width="0dp"
87-
android:layout_height="wrap_content"
88-
android:layout_marginStart="@dimen/keyline_5"
89-
android:layout_marginEnd="@dimen/keyline_5"
90-
android:text="@string/getDesktopBrowserShareDownloadLink"
91-
app:daxButtonSize="large"
92-
app:layout_constraintBottom_toTopOf="@id/noThanksButton"
93-
app:layout_constraintEnd_toEndOf="parent"
94-
app:layout_constraintStart_toStartOf="parent" />
52+
<com.duckduckgo.common.ui.view.text.DaxTextView
53+
android:id="@+id/titleText"
54+
android:layout_width="0dp"
55+
android:layout_height="wrap_content"
56+
android:layout_marginTop="@dimen/keyline_5"
57+
android:gravity="center"
58+
android:text="@string/getDesktopBrowserTitle"
59+
app:layout_constraintBottom_toTopOf="@id/bodyText"
60+
app:layout_constraintEnd_toEndOf="parent"
61+
app:layout_constraintStart_toStartOf="parent"
62+
app:layout_constraintTop_toBottomOf="@id/desktopBrowserIcon"
63+
app:layout_constraintVertical_bias="0"
64+
app:layout_constraintVertical_chainStyle="packed"
65+
app:layout_constraintWidth_max="@dimen/getDesktopBrowserMaxItemWidth"
66+
app:typography="title" />
9567

96-
<com.duckduckgo.common.ui.view.button.DaxButtonGhost
97-
android:id="@+id/noThanksButton"
98-
android:layout_width="0dp"
99-
android:layout_height="wrap_content"
100-
android:layout_marginStart="@dimen/keyline_5"
101-
android:layout_marginTop="@dimen/keyline_3"
102-
android:layout_marginEnd="@dimen/keyline_5"
103-
android:layout_marginBottom="@dimen/keyline_5"
104-
android:text="@string/getDesktopBrowserNoThanks"
105-
android:visibility="gone"
106-
app:daxButtonSize="large"
107-
app:layout_constraintBottom_toBottomOf="parent"
108-
app:layout_constraintEnd_toEndOf="parent"
109-
app:layout_constraintStart_toStartOf="parent"
110-
tools:visibility="visible" />
68+
<com.duckduckgo.common.ui.view.text.DaxTextView
69+
android:id="@+id/bodyText"
70+
android:layout_width="0dp"
71+
android:layout_height="wrap_content"
72+
android:layout_marginTop="@dimen/keyline_5"
73+
android:gravity="center"
74+
android:paddingStart="@dimen/keyline_6"
75+
android:paddingEnd="@dimen/keyline_6"
76+
android:text="@string/getDesktopBrowserBody"
77+
app:layout_constraintBottom_toTopOf="@id/browserUrl"
78+
app:layout_constraintEnd_toEndOf="parent"
79+
app:layout_constraintStart_toStartOf="parent"
80+
app:layout_constraintTop_toBottomOf="@id/titleText"
81+
app:layout_constraintWidth_max="@dimen/getDesktopBrowserMaxItemWidth"
82+
app:textType="secondary"
83+
app:typography="body1" />
84+
85+
<com.duckduckgo.common.ui.view.text.DaxTextView
86+
android:id="@+id/browserUrl"
87+
android:layout_width="0dp"
88+
android:layout_height="wrap_content"
89+
android:gravity="center"
90+
android:paddingStart="@dimen/keyline_6"
91+
android:paddingEnd="@dimen/keyline_6"
92+
android:text="@string/getDesktopBrowserUrl"
93+
android:textColor="?daxColorAccentBlue"
94+
app:layout_constraintBottom_toTopOf="@id/shareDownloadLinkButton"
95+
app:layout_constraintEnd_toEndOf="parent"
96+
app:layout_constraintStart_toStartOf="parent"
97+
app:layout_constraintTop_toBottomOf="@id/bodyText"
98+
app:layout_constraintWidth_max="@dimen/getDesktopBrowserMaxItemWidth"
99+
app:typography="body1_bold" />
100+
101+
<com.duckduckgo.common.ui.view.button.DaxButtonPrimary
102+
android:id="@+id/shareDownloadLinkButton"
103+
android:layout_width="0dp"
104+
android:layout_height="wrap_content"
105+
android:text="@string/getDesktopBrowserShareDownloadLink"
106+
app:daxButtonSize="large"
107+
app:layout_constraintBottom_toTopOf="@id/noThanksButton"
108+
app:layout_constraintEnd_toEndOf="parent"
109+
app:layout_constraintStart_toStartOf="parent"
110+
app:layout_constraintWidth_max="@dimen/getDesktopBrowserMaxItemWidth"
111+
app:layout_goneMarginBottom="@dimen/keyline_4" />
112+
113+
<com.duckduckgo.common.ui.view.button.DaxButtonGhost
114+
android:id="@+id/noThanksButton"
115+
android:layout_width="0dp"
116+
android:layout_height="wrap_content"
117+
android:layout_marginTop="@dimen/keyline_3"
118+
android:layout_marginBottom="@dimen/keyline_4"
119+
android:text="@string/getDesktopBrowserNoThanks"
120+
android:visibility="gone"
121+
app:daxButtonSize="large"
122+
app:layout_constraintBottom_toBottomOf="parent"
123+
app:layout_constraintEnd_toEndOf="parent"
124+
app:layout_constraintStart_toStartOf="parent"
125+
app:layout_constraintWidth_max="@dimen/getDesktopBrowserMaxItemWidth"
126+
tools:visibility="visible" />
127+
128+
</androidx.constraintlayout.widget.ConstraintLayout>
129+
130+
</ScrollView>
111131

112132
</androidx.constraintlayout.widget.ConstraintLayout>

app/src/main/res/values/dimens.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@
2020
<dimen name="recyclerViewOneFabBottomPadding">76dp</dimen>
2121
<dimen name="recyclerViewTwoFabsBottomPadding">136dp</dimen>
2222
<dimen name="extraLargeShapeCornerRadius">24dp</dimen>
23+
<dimen name="getDesktopBrowserMaxItemWidth">600dp</dimen>
2324
<bool name="show_wing_animation">false</bool>
2425
</resources>

app/src/test/java/com/duckduckgo/app/desktopbrowser/GetDesktopBrowserShareEventHandlerTest.kt

Lines changed: 0 additions & 57 deletions
This file was deleted.

0 commit comments

Comments
 (0)