Skip to content

Commit 51a9ec9

Browse files
Merge branch 'release/5.247.0'
2 parents 1184cda + 64b21d6 commit 51a9ec9

File tree

265 files changed

+10854
-6590
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

265 files changed

+10854
-6590
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Release - Production Release to Play Store and Github
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
ref:
7+
description: 'Ref to build APK from (branch, tag, commit)'
8+
required: true
9+
10+
env:
11+
ASANA_PAT: ${{ secrets.ASANA_ACCESS_TOKEN }}
12+
GH_TOKEN: ${{ secrets.GT_DAXMOBILE }}
13+
GOOGLE_APPLICATION_CREDENTIALS: '#{ENV["HOME"]}/jenkins_static/com.duckduckgo.mobile.android/ddg-upload-firebase.json'
14+
emoji_info: ":information_source:" # ℹ️
15+
emoji_end: ":flight_arrival:" # 🛫
16+
17+
jobs:
18+
release-play-store:
19+
name: Publish Release to Play Store
20+
uses: ./.github/workflows/release_upload_play_store.yml
21+
with:
22+
ref: ${{ github.event.inputs.ref }}
23+
24+
release-internal:
25+
name: Publish Internal Release to Play Store and Firebase
26+
needs: release-play-store
27+
if: needs.release-play-store.result == 'success'
28+
uses: ./.github/workflows/release_upload_internal.yml

.github/workflows/release_nightly.yml renamed to .github/workflows/release_upload_internal.yml

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
name: Release - Nightly Release to Internal and Firebase
1+
name: Release to Internal and Firebase
22

33
on:
44
schedule:
55
- cron: '0 2 * * *' # run at 3 AM UTC
6+
workflow_call:
67
workflow_dispatch:
78

89
env:
@@ -12,7 +13,7 @@ env:
1213

1314
jobs:
1415
create-tag:
15-
name: Generate and upload nightly bundle to Play Store Internal track
16+
name: Generate and upload bundle to Play Store Internal track
1617
runs-on: ubuntu-latest
1718

1819
steps:
@@ -58,8 +59,8 @@ jobs:
5859
- name: Notify if no changes
5960
if: steps.check_for_changes.outputs.has_changes == 'false'
6061
run: |
61-
echo "No new commits since the last tag. Skipping nightly release."
62-
echo "No new commits since the last tag. Skipping nightly release." >> $GITHUB_STEP_SUMMARY
62+
echo "No new commits since the last tag. Skipping internal release."
63+
echo "No new commits since the last tag. Skipping internal release." >> $GITHUB_STEP_SUMMARY
6364
exit 0
6465
6566
- name: Decode upload keys
@@ -104,13 +105,13 @@ jobs:
104105
NETP_DEBUG_SERVER_TOKEN: ${{ secrets.NETP_DEBUG_SERVER_TOKEN }}
105106
MALICIOUS_SITE_PROTECTION_AUTH_TOKEN: ${{ secrets.MALICIOUS_SITE_PROTECTION_AUTH_TOKEN }}
106107
if: steps.check_for_changes.outputs.has_changes == 'true'
107-
run: ./gradlew bundleInternalRelease -PversionNameSuffix=-nightly -PuseUploadSigning -PlatestTag=${{ steps.get_latest_tag.outputs.latest_tag }} -Pbuild-date-time
108+
run: ./gradlew bundleInternalRelease -PversionNameSuffix=-internal -PuseUploadSigning -PlatestTag=${{ steps.get_latest_tag.outputs.latest_tag }} -Pbuild-date-time
108109

109-
- name: Generate nightly version name
110+
- name: Generate internal version name
110111
if: steps.check_for_changes.outputs.has_changes == 'true'
111112
id: generate_version_name
112113
run: |
113-
output=$(./gradlew --no-configuration-cache getBuildVersionName -PversionNameSuffix=-nightly -PlatestTag=${{ steps.get_latest_tag.outputs.latest_tag }} --quiet | tail -n 1)
114+
output=$(./gradlew --no-configuration-cache getBuildVersionName -PversionNameSuffix=-internal -PlatestTag=${{ steps.get_latest_tag.outputs.latest_tag }} --quiet | tail -n 1)
114115
echo "version=$output" >> $GITHUB_OUTPUT
115116
116117
- name: Capture App Bundle Path
@@ -126,12 +127,12 @@ jobs:
126127
run: |
127128
bundle exec fastlane deploy_dogfood aab_path:${{ steps.capture_output.outputs.bundle_path }}
128129
129-
- name: Tag Nightly release
130+
- name: Tag Internal Release
130131
if: steps.check_for_changes.outputs.has_changes == 'true'
131-
id: tag_nightly_release
132+
id: tag_internal_release
132133
run: |
133134
git checkout develop
134-
git tag -a ${{ steps.generate_version_name.outputs.version }} -m "Create tag ${{ steps.generate_version_name.outputs.version }} for nightly release."
135+
git tag -a ${{ steps.generate_version_name.outputs.version }} -m "Create tag ${{ steps.generate_version_name.outputs.version }} for internal release."
135136
git push origin ${{ steps.generate_version_name.outputs.version }}
136137
137138
- name: Upload APK as artifact
@@ -144,14 +145,14 @@ jobs:
144145
- name: Set successful summary
145146
if: steps.check_for_changes.outputs.has_changes == 'true'
146147
run: |
147-
echo "### Nightly release completed! :rocket:" >> $GITHUB_STEP_SUMMARY
148+
echo "### Internal release completed! :rocket:" >> $GITHUB_STEP_SUMMARY
148149
149150
- name: Install dependencies for create-asana-release task
150151
run: |
151152
python -m pip install --upgrade pip
152153
pip install -r scripts/release/requirements.txt
153154
154-
- name: Create Asana nightly release task
155+
- name: Create Asana internal release task
155156
if: steps.check_for_changes.outputs.has_changes == 'true'
156157
env:
157158
ASANA_ACCESS_TOKEN: ${{ secrets.ASANA_ACCESS_TOKEN }}
@@ -174,6 +175,6 @@ jobs:
174175
asana-pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
175176
asana-project: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
176177
asana-section: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
177-
asana-task-name: GH Workflow Failure - Nightly Release
178-
asana-task-description: The Nightly Release Task workflow has failed. See https://github.com/duckduckgo/Android/actions/runs/${{ github.run_id }}
178+
asana-task-name: GH Workflow Failure - Internal Release
179+
asana-task-description: The Internal Release Task workflow has failed. See https://github.com/duckduckgo/Android/actions/runs/${{ github.run_id }}
179180
action: 'create-asana-task'

.github/workflows/release_upload_play_store.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
name: Release - Production Release to Play Store and Github
1+
name: Production Release to Play Store and Github
22

33
on:
4+
workflow_call:
5+
inputs:
6+
ref:
7+
description: 'Ref to build APK from (branch, tag, commit)'
8+
type: string
9+
required: true
10+
411
workflow_dispatch:
512
inputs:
613
ref:

.maestro/input_screen/input_screen_chat_mode.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ tags:
2626
- tapOn:
2727
text: "Duck.ai"
2828
- assertVisible:
29-
text: "Ask Duck.ai"
29+
text: "Ask privately"
3030
- inputText: "hey"
3131
- tapOn:
3232
id: "actionSend"

.maestro/shared/browser_screen/click_on_privacy_shield.yaml

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,14 @@ appId: com.duckduckgo.mobile.android
99
# I tried using the "point" and "leftOf" selector features to click the shield directly, the former is a known issue (https://github.com/mobile-dev-inc/Maestro/issues/1421)
1010
# and trying to click to the left of the input text field didn't work for me either.
1111
#
12-
# To work around this, when view_new_omnibar is used, we tap on the Omnibar icon container
12+
# To work around this, we tap on the Omnibar icon container
1313
# which aligns with the shield and has a non-zero size because of an invisible pulse animation placeholder that's within it.
14-
# That shield animation placeholder is in a different place for the view_fade_omnibar, so we're using a conditional flow to handle both cases.
15-
16-
# flow for view_new_omnibar
17-
- runFlow:
18-
when:
19-
notVisible:
20-
id: "com.duckduckgo.mobile.android:id/shieldIconPulseAnimationContainer"
21-
commands:
22-
- assertVisible:
23-
id: "com.duckduckgo.mobile.android:id/shieldIcon"
24-
- tapOn:
25-
id: "com.duckduckgo.mobile.android:id/omnibarIconContainer"
26-
27-
# flow for view_fade_omnibar
2814
- runFlow:
2915
when:
3016
visible:
3117
id: "com.duckduckgo.mobile.android:id/shieldIconPulseAnimationContainer"
3218
commands:
3319
- assertVisible:
34-
id: "com.duckduckgo.mobile.android:id/shieldIconExperiment"
20+
id: "com.duckduckgo.mobile.android:id/shieldIcon"
3521
- tapOn:
3622
id: "com.duckduckgo.mobile.android:id/shieldIconPulseAnimationContainer"

app-tracking-protection/vpn-impl/src/main/java/com/duckduckgo/mobile/android/vpn/ui/newtab/AppTrackingProtectionStateView.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@
1717
package com.duckduckgo.mobile.android.vpn.ui.newtab
1818

1919
import android.content.Context
20+
import android.os.Build
2021
import android.util.AttributeSet
2122
import android.view.View
2223
import android.widget.FrameLayout
2324
import androidx.core.text.HtmlCompat
2425
import androidx.lifecycle.*
2526
import com.duckduckgo.anvil.annotations.ContributesActivePlugin
2627
import com.duckduckgo.anvil.annotations.InjectWith
28+
import com.duckduckgo.common.ui.view.addBottomShadow
2729
import com.duckduckgo.common.ui.view.gone
2830
import com.duckduckgo.common.ui.view.show
2931
import com.duckduckgo.common.ui.viewbinding.viewBinding
@@ -90,6 +92,10 @@ class AppTrackingProtectionStateView @JvmOverloads constructor(
9092
deviceShieldPixels.didShowNewTabSummary()
9193

9294
configureViewReferences()
95+
96+
if (Build.VERSION.SDK_INT >= 28) {
97+
binding.root.addBottomShadow()
98+
}
9399
}
94100

95101
override fun onDetachedFromWindow() {
Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,49 @@
1-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2-
android:id="@+id/deviceShieldCtaLayout"
1+
<com.google.android.material.card.MaterialCardView
2+
xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
5-
android:layout_width="match_parent"
6-
android:layout_height="wrap_content"
7-
android:orientation="horizontal"
5+
android:id="@+id/deviceShieldCtaLayout"
6+
style="@style/Widget.DuckDuckGo.MessageCta"
7+
android:clipChildren="false"
88
tools:visibility="visible"
9-
android:visibility="gone"
10-
style="@style/Widget.DuckDuckGo.Card">
9+
android:visibility="gone">
1110

12-
<com.duckduckgo.common.ui.view.text.DaxTextView
13-
android:id="@+id/deviceShieldCtaHeader"
14-
android:layout_width="0dp"
11+
<LinearLayout
12+
android:layout_width="match_parent"
1513
android:layout_height="wrap_content"
16-
android:layout_weight="1"
17-
android:layout_marginStart="22dp"
18-
android:layout_marginTop="16dp"
19-
android:layout_marginEnd="16dp"
20-
app:layout_constraintBottom_toBottomOf="parent"
21-
app:layout_constraintEnd_toStartOf="@+id/deviceShieldCtaImage"
22-
app:layout_constraintStart_toStartOf="parent"
23-
app:layout_constraintTop_toTopOf="parent"
24-
app:typography="body2"
25-
tools:text="App Tracking Protection is enabled and blocking tracking attempts across your apps" />
14+
android:orientation="horizontal">
15+
16+
<com.duckduckgo.common.ui.view.text.DaxTextView
17+
android:id="@+id/deviceShieldCtaHeader"
18+
android:layout_width="0dp"
19+
android:layout_height="wrap_content"
20+
android:layout_weight="1"
21+
android:layout_marginStart="22dp"
22+
android:layout_marginTop="16dp"
23+
android:layout_marginEnd="16dp"
24+
android:layout_marginBottom="16dp"
25+
app:layout_constraintBottom_toBottomOf="parent"
26+
app:layout_constraintEnd_toStartOf="@+id/deviceShieldCtaImage"
27+
app:layout_constraintStart_toStartOf="parent"
28+
app:layout_constraintTop_toTopOf="parent"
29+
app:typography="body2"
30+
tools:text="App Tracking Protection is enabled and blocking tracking attempts across your apps" />
31+
32+
<ImageView
33+
android:id="@+id/deviceShieldCtaImage"
34+
android:layout_width="48dp"
35+
android:layout_height="48dp"
36+
android:layout_marginTop="16dp"
37+
android:layout_marginEnd="16dp"
38+
android:layout_marginBottom="16dp"
39+
android:scaleType="centerCrop"
40+
android:src="@drawable/ic_apptp_default"
41+
app:layout_constraintBottom_toBottomOf="parent"
42+
app:layout_constraintEnd_toEndOf="parent"
43+
app:layout_constraintTop_toTopOf="parent"
44+
tools:ignore="ContentDescription" />
2645

27-
<ImageView
28-
android:id="@+id/deviceShieldCtaImage"
29-
android:layout_width="48dp"
30-
android:layout_height="48dp"
31-
android:layout_marginTop="16dp"
32-
android:layout_marginEnd="16dp"
33-
android:scaleType="centerCrop"
34-
android:src="@drawable/ic_apptp_default"
35-
app:layout_constraintBottom_toBottomOf="parent"
36-
app:layout_constraintEnd_toEndOf="parent"
37-
app:layout_constraintTop_toTopOf="parent"
38-
tools:ignore="ContentDescription" />
3946

47+
</LinearLayout>
4048

41-
</LinearLayout>
49+
</com.google.android.material.card.MaterialCardView>

app/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,9 @@ dependencies {
406406
implementation project(':dax-prompts-api')
407407
implementation project(':dax-prompts-impl')
408408

409+
implementation project(':serp-logos-api')
410+
implementation project(':serp-logos-impl')
411+
409412
// Deprecated. TODO: Stop using this artifact.
410413
implementation "androidx.legacy:legacy-support-v4:_"
411414
debugImplementation Square.leakCanary.android

0 commit comments

Comments
 (0)