Skip to content

Commit d9a2568

Browse files
Update the get desktop app activity from "Sync Desktop Password" (#7801)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1211724162604201/task/1213372254856621?focus=true ### Description Updated the layout for “Get Desktop App” screen that is opened from “Sync Desktop Passwords”, in order to align the design with the other screens that are promoting our desktop app. Also added copy icons to download URL text fields across desktop browser, desktop app, and sync device activities. The copy icon appears at the end of each URL text field with proper spacing and margins. Also update the link color (use text secondary style and remove accent blue color). ### Steps to test this PR _Copy Icon Display_ - [ ] Got to Settings -> Get Desktop Browser and verify the copy icon appears next to the browser URL - [ ] Go to Settings -> Sync and Backup -> Get Desktop Browser and verify the copy icon appears next to the browser URL - [ ] Go to Settings -> Passwords & Autofill -> Sync Desktop Passwords -> Get Desktop Browser and verify the copy icon appears next to the browser URL. This screen should also have the design similar to the Get Desktop Browser screen opened from the settings - [ ] Verify proper spacing between text and copy icons in all activities ### UI changes | Before | After | | --- | --- | | ![photo_5832637292907007255_y.jpg](https://app.graphite.com/user-attachments/assets/9cf1dea4-afcf-4549-9b11-2ca84f81dc71.jpg) | ![Screenshot 2026-02-24 at 14.46.15.png](https://app.graphite.com/user-attachments/assets/3a9aca40-ecc0-4d58-9948-e70f3aa736a7.png) | --- > [!NOTE] > **Low Risk** > Layout-only XML changes plus a new dimension; no business logic or data handling changes, with main risk being minor UI regressions across different screen sizes. > > **Overview** > Updates the “Get Desktop App” screen (opened from Sync Desktop Passwords) to match the newer desktop-promo layout (padding, constraints, max-width, and button sizing) and introduces a new `getDesktopAppMaxItemWidth` dimension. > > Adds a trailing copy icon to the URL text fields on the Get Desktop Browser, Get Desktop App, and Sync “Get on Other Devices” screens, including spacing/margins and `wrap` width behavior so the URL+icon are laid out correctly. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 684df1d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent cdc2625 commit d9a2568

File tree

4 files changed

+59
-55
lines changed

4 files changed

+59
-55
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,20 @@
8686
android:id="@+id/browserUrl"
8787
android:layout_width="0dp"
8888
android:layout_height="wrap_content"
89+
android:layout_marginTop="@dimen/keyline_2"
90+
android:drawableEnd="@drawable/ic_copy_24"
91+
android:drawablePadding="@dimen/keyline_2"
8992
android:gravity="center"
9093
android:paddingStart="@dimen/keyline_6"
9194
android:paddingEnd="@dimen/keyline_6"
9295
android:text="@string/getDesktopBrowserUrl"
93-
android:textColor="?daxColorAccentBlue"
9496
app:layout_constraintBottom_toTopOf="@id/shareDownloadLinkButton"
9597
app:layout_constraintEnd_toEndOf="parent"
9698
app:layout_constraintStart_toStartOf="parent"
9799
app:layout_constraintTop_toBottomOf="@id/bodyText"
100+
app:layout_constraintWidth_default="wrap"
98101
app:layout_constraintWidth_max="@dimen/getDesktopBrowserMaxItemWidth"
102+
app:textType="secondary"
99103
app:typography="body1_bold" />
100104

101105
<com.duckduckgo.common.ui.view.button.DaxButtonPrimary

autofill/autofill-impl/src/main/res/layout/activity_get_desktop_app.xml

Lines changed: 48 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -28,91 +28,86 @@
2828
<androidx.core.widget.NestedScrollView
2929
android:layout_width="0dp"
3030
android:layout_height="0dp"
31-
app:layout_constraintStart_toStartOf="parent"
32-
app:layout_constraintEnd_toEndOf="parent"
31+
android:fillViewport="true"
3332
app:layout_constraintBottom_toBottomOf="parent"
34-
app:layout_constraintTop_toBottomOf="@id/includeToolbar"
35-
android:fillViewport="true">
33+
app:layout_constraintEnd_toEndOf="parent"
34+
app:layout_constraintStart_toStartOf="parent"
35+
app:layout_constraintTop_toBottomOf="@id/includeToolbar">
3636

3737
<androidx.constraintlayout.widget.ConstraintLayout
3838
android:layout_width="match_parent"
39-
android:layout_height="wrap_content">
40-
41-
<androidx.constraintlayout.widget.Guideline
42-
android:id="@+id/topContentGuidelineStart"
43-
android:layout_width="wrap_content"
44-
android:layout_height="wrap_content"
45-
android:orientation="vertical"
46-
app:layout_constraintGuide_begin="@dimen/keyline_7" />
47-
48-
<androidx.constraintlayout.widget.Guideline
49-
android:id="@+id/topContentGuidelineEnd"
50-
android:layout_width="wrap_content"
51-
android:layout_height="wrap_content"
52-
android:orientation="vertical"
53-
app:layout_constraintGuide_end="@dimen/keyline_7" />
39+
android:layout_height="wrap_content"
40+
android:paddingStart="@dimen/keyline_5"
41+
android:paddingEnd="@dimen/keyline_5">
5442

5543
<ImageView
5644
android:id="@+id/pageIcon"
45+
android:layout_width="wrap_content"
46+
android:layout_height="wrap_content"
47+
android:layout_marginTop="@dimen/keyline_5"
5748
android:importantForAccessibility="no"
58-
app:layout_constraintStart_toStartOf="@id/topContentGuidelineStart"
59-
app:layout_constraintEnd_toEndOf="@id/topContentGuidelineEnd"
60-
app:layout_constraintTop_toTopOf="parent"
6149
android:src="@drawable/ic_app_download_128"
62-
android:layout_marginTop="@dimen/keyline_4"
63-
android:layout_width="wrap_content"
64-
android:layout_height="wrap_content" />
50+
app:layout_constraintEnd_toEndOf="parent"
51+
app:layout_constraintStart_toStartOf="parent"
52+
app:layout_constraintTop_toTopOf="parent" />
6553

6654
<com.duckduckgo.common.ui.view.text.DaxTextView
6755
android:id="@+id/title"
68-
app:layout_constraintTop_toBottomOf="@id/pageIcon"
69-
app:layout_constraintStart_toStartOf="@id/topContentGuidelineStart"
70-
app:layout_constraintEnd_toEndOf="@id/topContentGuidelineEnd"
7156
android:layout_width="0dp"
7257
android:layout_height="wrap_content"
73-
android:layout_marginTop="@dimen/keyline_4"
58+
android:layout_marginTop="@dimen/keyline_5"
7459
android:gravity="center"
75-
app:typography="h2"
76-
android:text="@string/autofillManagementImportPasswordsGetDesktopAppSubtitle" />
60+
android:text="@string/autofillManagementImportPasswordsGetDesktopAppSubtitle"
61+
app:layout_constraintEnd_toEndOf="parent"
62+
app:layout_constraintStart_toStartOf="parent"
63+
app:layout_constraintTop_toBottomOf="@id/pageIcon"
64+
app:layout_constraintWidth_max="@dimen/getDesktopAppMaxItemWidth"
65+
app:typography="title" />
7766

7867
<com.duckduckgo.common.ui.view.text.DaxTextView
7968
android:id="@+id/instructions"
80-
app:layout_constraintTop_toBottomOf="@id/title"
81-
app:layout_constraintStart_toStartOf="@id/topContentGuidelineStart"
82-
app:layout_constraintEnd_toEndOf="@id/topContentGuidelineEnd"
8369
android:layout_width="0dp"
8470
android:layout_height="wrap_content"
71+
android:layout_marginTop="@dimen/keyline_5"
8572
android:gravity="center"
86-
android:layout_marginTop="@dimen/keyline_4"
87-
app:typography="body1"
73+
android:text="@string/autofillManagementImportPasswordsGetDesktopAppInstruction"
74+
app:layout_constraintEnd_toEndOf="parent"
75+
app:layout_constraintStart_toStartOf="parent"
76+
app:layout_constraintTop_toBottomOf="@id/title"
77+
app:layout_constraintWidth_max="@dimen/getDesktopAppMaxItemWidth"
8878
app:textType="secondary"
89-
android:text="@string/autofillManagementImportPasswordsGetDesktopAppInstruction" />
79+
app:typography="body1" />
9080

9181
<com.duckduckgo.common.ui.view.text.DaxTextView
9282
android:id="@+id/downloadLinkText"
93-
app:typography="body1_bold"
94-
android:textColor="?daxColorAccentBlue"
95-
android:layout_width="match_parent"
83+
android:layout_width="0dp"
9684
android:layout_height="wrap_content"
97-
android:text="@string/autofillManagementImportPasswordsGetDesktopAppUrl"
85+
android:layout_marginTop="@dimen/keyline_2"
86+
android:drawableEnd="@drawable/ic_copy_24"
87+
android:drawablePadding="@dimen/keyline_2"
9888
android:gravity="center"
99-
app:layout_constraintStart_toStartOf="@id/topContentGuidelineStart"
100-
app:layout_constraintEnd_toEndOf="@id/topContentGuidelineEnd"
101-
app:layout_constraintTop_toBottomOf="@+id/instructions" />
89+
android:text="@string/autofillManagementImportPasswordsGetDesktopAppUrl"
90+
app:layout_constraintBottom_toTopOf="@id/shareLinkButton"
91+
app:layout_constraintEnd_toEndOf="parent"
92+
app:layout_constraintStart_toStartOf="parent"
93+
app:layout_constraintTop_toBottomOf="@+id/instructions"
94+
app:layout_constraintVertical_bias="0"
95+
app:layout_constraintWidth_default="wrap"
96+
app:layout_constraintWidth_max="@dimen/getDesktopAppMaxItemWidth"
97+
app:textType="secondary"
98+
app:typography="body1_bold" />
10299

103100
<com.duckduckgo.common.ui.view.button.DaxButtonPrimary
104101
android:id="@+id/shareLinkButton"
105-
android:layout_width="wrap_content"
102+
android:layout_width="0dp"
106103
android:layout_height="wrap_content"
107-
android:layout_marginTop="@dimen/keyline_4"
108-
app:layout_constraintTop_toBottomOf="@id/downloadLinkText"
109-
app:layout_constraintStart_toStartOf="@id/topContentGuidelineStart"
110-
app:layout_constraintEnd_toEndOf="@id/topContentGuidelineEnd"
111-
android:layout_marginStart="@dimen/keyline_6"
112-
android:layout_marginEnd="@dimen/keyline_6"
104+
android:layout_marginBottom="@dimen/keyline_4"
105+
android:text="@string/autofillManagementImportPasswordsGetDesktopAppShareDownloadButtonText"
113106
app:daxButtonSize="large"
114-
app:icon="@drawable/ic_share_android_16"
115-
android:text="@string/autofillManagementImportPasswordsGetDesktopAppShareDownloadButtonText" />
107+
app:layout_constraintBottom_toBottomOf="parent"
108+
app:layout_constraintEnd_toEndOf="parent"
109+
app:layout_constraintStart_toStartOf="parent"
110+
app:layout_constraintWidth_max="@dimen/getDesktopAppMaxItemWidth" />
116111

117112

118113
</androidx.constraintlayout.widget.ConstraintLayout>

autofill/autofill-impl/src/main/res/values/autofill-impl-dimensions.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@
1717
<resources>
1818
<dimen name="autofillBottomSheetBottomPadding">30dp</dimen>
1919
<dimen name="autofillBottomSheetContentMaxWidth">480dp</dimen>
20+
<dimen name="getDesktopAppMaxItemWidth">600dp</dimen>
2021
</resources>

sync/sync-impl/src/main/res/layout/activity_sync_get_on_other_devices.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,19 @@
8484
android:id="@+id/downloadLinkText"
8585
android:layout_width="0dp"
8686
android:layout_height="wrap_content"
87+
android:layout_marginTop="@dimen/keyline_2"
88+
android:drawableEnd="@drawable/ic_copy_24"
89+
android:drawablePadding="@dimen/keyline_2"
8790
android:gravity="center"
8891
android:paddingStart="@dimen/keyline_6"
8992
android:paddingEnd="@dimen/keyline_6"
9093
android:text="@string/syncGetAppsOnOtherPlatformInstructionUrl"
91-
android:textColor="?daxColorAccentBlue"
9294
app:layout_constraintEnd_toEndOf="parent"
9395
app:layout_constraintStart_toStartOf="parent"
9496
app:layout_constraintTop_toBottomOf="@+id/instructions"
97+
app:layout_constraintWidth_default="wrap"
9598
app:layout_constraintWidth_max="@dimen/syncOtherDevicesMaxItemWidth"
99+
app:textType="secondary"
96100
app:typography="body1_bold" />
97101

98102
<com.duckduckgo.common.ui.view.button.DaxButtonPrimary

0 commit comments

Comments
 (0)