Skip to content

Commit

Permalink
Merge branch 'release/5.210.0' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Dax the Deployer committed Aug 1, 2024
2 parents f02110c + 3a657c4 commit 23f4868
Show file tree
Hide file tree
Showing 194 changed files with 5,592 additions and 425 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/update-content-scope.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
env:
RELEASE_VERSION: ${{ steps.extract-release-version.outputs._1}}
id: create-pr
uses: peter-evans/create-pull-request@v5.0.2
uses: peter-evans/create-pull-request@v6.1.0
with:
base: "develop"
title: Update content scope scripts to version ${{ steps.extract-release-version.outputs._1}}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/update-ref-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
env:
RELEASE_VERSION: ${{ steps.extract-release-version.outputs._1}}
id: create-pr
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v6.1.0
with:
base: "develop"
title: Update reference tests to version ${{ steps.extract-release-version.outputs._1}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,27 +95,29 @@ class ReportBreakageCategorySingleChoiceActivity : DuckDuckGoActivity() {
viewModel.setCategories(brokenApp.breakageCategories)
val categories = brokenApp.breakageCategories.map { it.description }
binding.categoriesSelection.onAction {
RadioListAlertDialogBuilder(this)
.setTitle(getString(R.string.atp_ReportBreakageCategoriesTitle))
.setOptions(categories, viewModel.indexSelected + 1)
.setPositiveButton(android.R.string.ok)
.setNegativeButton(android.R.string.cancel)
.addEventListener(
object : RadioListAlertDialogBuilder.EventListener() {
override fun onRadioItemSelected(selectedItem: Int) {
viewModel.onCategoryIndexChanged(selectedItem - 1)
}

override fun onPositiveButtonClicked(selectedItem: Int) {
viewModel.onCategoryAccepted()
}

override fun onNegativeButtonClicked() {
viewModel.onCategorySelectionCancelled()
}
},
)
.show()
if (!isFinishing && !isDestroyed) {
RadioListAlertDialogBuilder(this)
.setTitle(getString(R.string.atp_ReportBreakageCategoriesTitle))
.setOptions(categories, viewModel.indexSelected + 1)
.setPositiveButton(android.R.string.ok)
.setNegativeButton(android.R.string.cancel)
.addEventListener(
object : RadioListAlertDialogBuilder.EventListener() {
override fun onRadioItemSelected(selectedItem: Int) {
viewModel.onCategoryIndexChanged(selectedItem - 1)
}

override fun onPositiveButtonClicked(selectedItem: Int) {
viewModel.onCategoryAccepted()
}

override fun onNegativeButtonClicked() {
viewModel.onCategorySelectionCancelled()
}
},
)
.show()
}
}
binding.ctaNextFormSubmit.setOnClickListener { viewModel.onSubmitPressed() }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ import com.duckduckgo.app.statistics.api.StatisticsUpdater
import com.duckduckgo.app.statistics.pixels.Pixel
import com.duckduckgo.app.statistics.pixels.Pixel.PixelParameter
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.COUNT
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.DAILY
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.UNIQUE
import com.duckduckgo.app.surrogates.SurrogateResponse
import com.duckduckgo.app.tabs.model.TabEntity
Expand Down Expand Up @@ -452,6 +453,8 @@ class BrowserTabViewModelTest {

private val mockEnabledToggle: Toggle = mock { on { it.isEnabled() } doReturn true }

private val mockDisabledToggle: Toggle = mock { on { it.isEnabled() } doReturn false }

private val mockPrivacyProtectionsPopupManager: PrivacyProtectionsPopupManager = mock()

private val mockPrivacyProtectionsToggleUsageListener: PrivacyProtectionsToggleUsageListener = mock()
Expand Down Expand Up @@ -666,6 +669,7 @@ class BrowserTabViewModelTest {

@Test
fun whenViewBecomesVisibleAndHomeShowingThenKeyboardShown() = runTest {
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockDisabledToggle)
whenever(mockWidgetCapabilities.hasInstalledWidgets).thenReturn(true)

setBrowserShowing(false)
Expand All @@ -687,6 +691,7 @@ class BrowserTabViewModelTest {
fun whenViewBecomesVisibleAndHomeShowingThenRefreshCtaIsCalled() {
runTest {
setBrowserShowing(false)
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockDisabledToggle)
val observer = ValueCaptorObserver<CtaViewState>()
testee.ctaViewState.observeForever(observer)

Expand Down Expand Up @@ -2348,6 +2353,7 @@ class BrowserTabViewModelTest {

@Test
fun whenCtaRefreshedAndOnlyStandardAddSupportedAndWidgetAlreadyInstalledThenCtaIsNull() = runTest {
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockDisabledToggle)
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(false)
whenever(mockWidgetCapabilities.hasInstalledWidgets).thenReturn(true)
testee.refreshCta()
Expand All @@ -2357,6 +2363,7 @@ class BrowserTabViewModelTest {
@Test
fun whenCtaRefreshedAndIsNewTabIsFalseThenReturnNull() = runTest {
setBrowserShowing(true)
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockDisabledToggle)
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(true)
whenever(mockWidgetCapabilities.hasInstalledWidgets).thenReturn(false)
testee.refreshCta()
Expand All @@ -2365,6 +2372,7 @@ class BrowserTabViewModelTest {

@Test
fun whenCtaRefreshedAndOnboardingCompleteThenViewStateUpdated() = runTest {
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockDisabledToggle)
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(false)
whenever(mockWidgetCapabilities.hasInstalledWidgets).thenReturn(true)
whenever(mockDismissedCtaDao.exists(DAX_END)).thenReturn(true)
Expand All @@ -2378,6 +2386,7 @@ class BrowserTabViewModelTest {
@Test
fun whenCtaRefreshedAndBrowserShowingThenViewStateUpdated() = runTest {
setBrowserShowing(true)
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockDisabledToggle)
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(false)
whenever(mockWidgetCapabilities.hasInstalledWidgets).thenReturn(true)
whenever(mockDismissedCtaDao.exists(DAX_END)).thenReturn(true)
Expand Down Expand Up @@ -5311,6 +5320,7 @@ class BrowserTabViewModelTest {

assertCommandIssued<Command.LaunchTabSwitcher>()
verify(mockPixel).fire(AppPixelName.TAB_MANAGER_CLICKED)
verify(mockPixel).fire(AppPixelName.TAB_MANAGER_CLICKED_DAILY, emptyMap(), emptyMap(), DAILY)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.duckduckgo.app.global.db.AppDatabase
import com.duckduckgo.app.global.model.SiteFactoryImpl
import com.duckduckgo.app.privacy.db.UserAllowListRepository
import com.duckduckgo.app.tabs.db.TabsDao
import com.duckduckgo.app.tabs.store.TabSwitcherDataStore
import com.duckduckgo.app.trackerdetection.EntityLookup
import com.duckduckgo.common.test.CoroutineTestRule
import com.duckduckgo.common.test.InstantSchedulersRule
Expand Down Expand Up @@ -409,6 +410,7 @@ class TabDataRepositoryTest {
contentBlocking: ContentBlocking = mock(),
webViewPreviewPersister: WebViewPreviewPersister = mock(),
faviconManager: FaviconManager = mock(),
tabSwitcherDataStore: TabSwitcherDataStore = mock(),
): TabDataRepository {
return TabDataRepository(
dao,
Expand All @@ -422,6 +424,7 @@ class TabDataRepositoryTest {
),
webViewPreviewPersister,
faviconManager,
tabSwitcherDataStore,
coroutinesTestRule.testScope,
coroutinesTestRule.testDispatcherProvider,
)
Expand Down
6 changes: 5 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,6 @@
<activity
android:name="com.duckduckgo.app.dispatchers.IntentDispatcherActivity"
android:theme="@style/Theme.AppCompat.Transparent.NoActionBar"
android:excludeFromRecents="true"
android:exported="true">

<!-- Allows app to become default browser -->
Expand Down Expand Up @@ -411,6 +410,11 @@
android:exported="false"
android:label="@string/privateSearchActivityTitle"
android:parentActivityName="com.duckduckgo.app.settings.SettingsActivity" />
<activity
android:name="com.duckduckgo.app.generalsettings.GeneralSettingsActivity"
android:exported="false"
android:label="@string/generalSettingsActivityTitle"
android:parentActivityName="com.duckduckgo.app.settings.SettingsActivity" />
<activity
android:name="com.duckduckgo.app.webtrackingprotection.WebTrackingProtectionActivity"
android:exported="false"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import androidx.lifecycle.viewModelScope
import com.duckduckgo.anvil.annotations.ContributesViewModel
import com.duckduckgo.app.accessibility.data.AccessibilitySettingsDataStore
import com.duckduckgo.app.statistics.pixels.Pixel
import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.di.scopes.ActivityScope
import com.duckduckgo.voice.api.VoiceSearchAvailability
import com.duckduckgo.voice.impl.VoiceSearchPixelNames.VOICE_SEARCH_OFF
Expand All @@ -30,6 +31,7 @@ import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import timber.log.Timber

@ContributesViewModel(ActivityScope::class)
Expand All @@ -38,6 +40,7 @@ class AccessibilitySettingsViewModel @Inject constructor(
private val voiceSearchAvailability: VoiceSearchAvailability,
private val voiceSearchRepository: VoiceSearchRepository,
private val pixel: Pixel,
private val dispatcherProvider: DispatcherProvider,
) : ViewModel() {

data class ViewState(
Expand Down Expand Up @@ -103,19 +106,21 @@ class AccessibilitySettingsViewModel @Inject constructor(
}

fun onVoiceSearchChanged(checked: Boolean) {
voiceSearchRepository.setVoiceSearchUserEnabled(checked)
if (checked) {
voiceSearchRepository.resetVoiceSearchDismissed()
pixel.fire(VOICE_SEARCH_ON)
} else {
pixel.fire(VOICE_SEARCH_OFF)
}
viewModelScope.launch {
viewState.emit(
currentViewState().copy(
voiceSearchEnabled = voiceSearchAvailability.isVoiceSearchAvailable,
),
)
viewModelScope.launch(dispatcherProvider.io()) {
voiceSearchRepository.setVoiceSearchUserEnabled(checked)
if (checked) {
voiceSearchRepository.resetVoiceSearchDismissed()
pixel.fire(VOICE_SEARCH_ON)
} else {
pixel.fire(VOICE_SEARCH_OFF)
}
withContext(dispatcherProvider.main()) {
viewState.emit(
currentViewState().copy(
voiceSearchEnabled = voiceSearchAvailability.isVoiceSearchAvailable,
),
)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import com.duckduckgo.app.downloads.DownloadsScreens.DownloadsScreenNoParams
import com.duckduckgo.app.feedback.ui.common.FeedbackActivity
import com.duckduckgo.app.fire.DataClearer
import com.duckduckgo.app.fire.DataClearerForegroundAppRestartPixel
import com.duckduckgo.app.firebutton.FireButtonStore
import com.duckduckgo.app.global.*
import com.duckduckgo.app.global.events.db.UserEventsStore
import com.duckduckgo.app.global.rating.PromptCount
Expand Down Expand Up @@ -118,6 +119,9 @@ open class BrowserActivity : DuckDuckGoActivity() {

@Inject lateinit var dispatcherProvider: DispatcherProvider

@Inject
lateinit var fireButtonStore: FireButtonStore

private val lastActiveTabs = TabList()

private var currentTab: BrowserTabFragment? = null
Expand Down Expand Up @@ -440,6 +444,7 @@ open class BrowserActivity : DuckDuckGoActivity() {
userEventsStore = userEventsStore,
appCoroutineScope = appCoroutineScope,
dispatcherProvider = dispatcherProvider,
fireButtonStore = fireButtonStore,
)
dialog.clearStarted = {
removeObservers()
Expand Down Expand Up @@ -676,6 +681,7 @@ open class BrowserActivity : DuckDuckGoActivity() {
override fun onDialogShown() {
viewModel.onGiveFeedbackDialogShown(promptCount)
}

override fun onDialogCancelled() {
viewModel.onUserCancelledGiveFeedbackDialog(promptCount)
}
Expand Down
Loading

0 comments on commit 23f4868

Please sign in to comment.