Skip to content

Commit 82362dc

Browse files
Cta new interfaces (#679)
1 parent 2d2daa7 commit 82362dc

File tree

3 files changed

+28
-43
lines changed

3 files changed

+28
-43
lines changed

app/src/androidTest/java/com/duckduckgo/app/cta/ui/CtaTest.kt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,6 @@ class CtaTest {
7575
assertTrue(testee.pixelShownParameters().isEmpty())
7676
}
7777

78-
@Test
79-
fun whenCtaIsSurveyReturnNullDialogCta() {
80-
val testee = HomePanelCta.Survey(Survey("abc", "http://example.com", 1, Survey.Status.SCHEDULED))
81-
assertNull(testee.createDialogCta(mock(FragmentActivity::class.java)))
82-
}
83-
8478
@Test
8579
fun whenCtaIsAddWidgetAutoReturnEmptyOkParameters() {
8680
val testee = HomePanelCta.AddWidgetAuto
@@ -99,11 +93,6 @@ class CtaTest {
9993
assertTrue(testee.pixelShownParameters().isEmpty())
10094
}
10195

102-
@Test
103-
fun whenCtaIsAddWidgetAutoReturnNullDialogCta() {
104-
val testee = HomePanelCta.AddWidgetAuto
105-
assertNull(testee.createDialogCta(mock(FragmentActivity::class.java)))
106-
}
10796

10897
@Test
10998
fun whenCtaIsAddWidgetInstructionsReturnEmptyOkParameters() {
@@ -123,12 +112,6 @@ class CtaTest {
123112
assertTrue(testee.pixelShownParameters().isEmpty())
124113
}
125114

126-
@Test
127-
fun whenCtaIsAddWidgetInstructionsReturnNullDialogCta() {
128-
val testee = HomePanelCta.AddWidgetInstructions
129-
assertNull(testee.createDialogCta(mock(FragmentActivity::class.java)))
130-
}
131-
132115
@Test
133116
fun whenCtaIsBubbleTypeReturnCorrectCancelParameters() {
134117
val testee = DaxBubbleCta.DaxIntroCta(mockOnboardingStore, mockAppInstallStore)

app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ class BrowserTabFragment : Fragment(), FindListener, CoroutineScope {
235235
private val logoHidingListener by lazy { LogoHidingLayoutChangeLifecycleListener(ddgLogo) }
236236

237237
private var alertDialog: AlertDialog? = null
238+
private var daxDialog: DaxDialog? = null
238239

239240
override fun onAttach(context: Context) {
240241
AndroidSupportInjection.inject(this)
@@ -331,6 +332,7 @@ class BrowserTabFragment : Fragment(), FindListener, CoroutineScope {
331332
}
332333

333334
override fun onPause() {
335+
daxDialog = null
334336
logoHidingListener.onPause()
335337
super.onPause()
336338
}
@@ -1372,7 +1374,8 @@ class BrowserTabFragment : Fragment(), FindListener, CoroutineScope {
13721374
hideDaxCta()
13731375
val container = networksContainer
13741376
activity?.let { activity ->
1375-
val daxDialog = configuration.createDialogCta(activity).apply {
1377+
daxDialog?.dismiss()
1378+
daxDialog = configuration.createCta(activity).apply {
13761379
setHideClickListener {
13771380
dismiss()
13781381
launchHideTipsDialog(activity, configuration)
@@ -1396,8 +1399,8 @@ class BrowserTabFragment : Fragment(), FindListener, CoroutineScope {
13961399
dismiss()
13971400
}
13981401
}
1402+
show(activity.supportFragmentManager, DAX_DIALOG_DIALOG_TAG)
13991403
}
1400-
daxDialog.show(activity.supportFragmentManager, DAX_DIALOG_DIALOG_TAG)
14011404
}
14021405
}
14031406

@@ -1418,20 +1421,18 @@ class BrowserTabFragment : Fragment(), FindListener, CoroutineScope {
14181421
}
14191422

14201423
private fun showDaxCta(configuration: DaxBubbleCta) {
1421-
daxCtaContainer.alpha = 1f
1422-
daxCtaContainer.show()
14231424
ddgLogo.hide()
14241425
hideHomeCta()
1425-
configuration.apply(daxCtaContainer)
1426+
configuration.showCta(daxCtaContainer)
14261427
}
14271428

14281429
private fun showHomeCta(configuration: HomePanelCta) {
14291430
hideDaxCta()
14301431
if (ctaContainer.isEmpty()) {
14311432
renderHomeCta()
1433+
} else {
1434+
configuration.showCta(ctaContainer)
14321435
}
1433-
configuration.apply(ctaContainer)
1434-
ctaContainer.show()
14351436
}
14361437

14371438
private fun hideDaxCta() {
@@ -1453,7 +1454,7 @@ class BrowserTabFragment : Fragment(), FindListener, CoroutineScope {
14531454
inflate(context, R.layout.include_cta, ctaContainer)
14541455
logoHidingListener.callToActionView = ctaContainer
14551456

1456-
configuration.apply(ctaContainer)
1457+
configuration.showCta(ctaContainer)
14571458
ctaContainer.ctaOkButton.setOnClickListener {
14581459
viewModel.onUserClickCtaOkButton()
14591460
}

app/src/main/java/com/duckduckgo/app/cta/ui/Cta.kt

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ import kotlinx.android.synthetic.main.include_dax_dialog_cta.view.dialogTextCta
4141
import kotlinx.android.synthetic.main.include_dax_dialog_cta.view.hiddenTextCta
4242
import kotlinx.android.synthetic.main.include_dax_dialog_cta.view.primaryCta
4343

44+
interface DialogCta {
45+
fun createCta(activity: FragmentActivity): DaxDialog
46+
}
47+
48+
49+
interface ViewCta {
50+
fun showCta(view: View)
51+
}
52+
4453
interface Cta {
4554
val ctaId: CtaId
4655
val shownPixel: Pixel.PixelName?
@@ -50,9 +59,6 @@ interface Cta {
5059
fun pixelShownParameters(): Map<String, String?>
5160
fun pixelCancelParameters(): Map<String, String?>
5261
fun pixelOkParameters(): Map<String, String?>
53-
54-
fun apply(view: View)
55-
fun createDialogCta(activity: FragmentActivity): DaxDialog?
5662
}
5763

5864
sealed class DaxDialogCta(
@@ -65,11 +71,9 @@ sealed class DaxDialogCta(
6571
var ctaPixelParam: String,
6672
val onboardingStore: OnboardingStore,
6773
val appInstallStore: AppInstallStore
68-
) : Cta {
69-
70-
override fun apply(view: View) {}
74+
) : Cta, DialogCta {
7175

72-
override fun createDialogCta(activity: FragmentActivity) = DaxDialog(getDaxText(activity), activity.resources.getString(okButton))
76+
override fun createCta(activity: FragmentActivity) = DaxDialog(getDaxText(activity), activity.resources.getString(okButton))
7377

7478
override fun pixelCancelParameters(): Map<String, String?> = mapOf(Pixel.PixelParameter.CTA_SHOWN to ctaPixelParam)
7579

@@ -120,7 +124,7 @@ sealed class DaxDialogCta(
120124
appInstallStore
121125
) {
122126

123-
override fun createDialogCta(activity: FragmentActivity): DaxDialog =
127+
override fun createCta(activity: FragmentActivity): DaxDialog =
124128
DaxDialog(getDaxText(activity), activity.resources.getString(okButton), false)
125129

126130
override fun getDaxText(context: Context): String {
@@ -164,7 +168,7 @@ sealed class DaxDialogCta(
164168
}
165169
}
166170

167-
override fun createDialogCta(activity: FragmentActivity): DaxDialog {
171+
override fun createCta(activity: FragmentActivity): DaxDialog {
168172
return DaxDialog(getDaxText(activity), activity.resources.getString(okButton)).apply {
169173
val privacyGradeButton = activity.findViewById<View>(R.id.privacyGradeButton)
170174
onAnimationFinishedListener {
@@ -204,7 +208,7 @@ sealed class DaxDialogCta(
204208
appInstallStore
205209
) {
206210

207-
override fun createDialogCta(activity: FragmentActivity): DaxDialog {
211+
override fun createCta(activity: FragmentActivity): DaxDialog {
208212
return DaxDialog(getDaxText(activity), activity.resources.getString(okButton)).apply {
209213
val fireButton = activity.findViewById<View>(R.id.fire)
210214
onAnimationFinishedListener {
@@ -232,9 +236,9 @@ sealed class DaxBubbleCta(
232236
val ctaPixelParam: String,
233237
val onboardingStore: OnboardingStore,
234238
val appInstallStore: AppInstallStore
235-
) : Cta {
239+
) : Cta, ViewCta {
236240

237-
override fun apply(view: View) {
241+
override fun showCta(view: View) {
238242
val daxText = view.context.getString(description)
239243
view.show()
240244
view.alpha = 1f
@@ -243,8 +247,6 @@ sealed class DaxBubbleCta(
243247
view.dialogTextCta.startTypingAnimation(daxText, true)
244248
}
245249

246-
override fun createDialogCta(activity: FragmentActivity): DaxDialog? = null
247-
248250
override fun pixelCancelParameters(): Map<String, String?> = mapOf(Pixel.PixelParameter.CTA_SHOWN to ctaPixelParam)
249251

250252
override fun pixelOkParameters(): Map<String, String?> = mapOf(Pixel.PixelParameter.CTA_SHOWN to ctaPixelParam)
@@ -295,18 +297,17 @@ sealed class HomePanelCta(
295297
override val shownPixel: Pixel.PixelName?,
296298
override val okPixel: Pixel.PixelName?,
297299
override val cancelPixel: Pixel.PixelName?
298-
) : Cta {
300+
) : Cta, ViewCta {
299301

300-
override fun apply(view: View) {
302+
override fun showCta(view: View) {
301303
view.ctaIcon.setImageResource(image)
302304
view.ctaTitle.text = view.context.getString(title)
303305
view.ctaSubtitle.text = view.context.getString(description)
304306
view.ctaOkButton.text = view.context.getString(okButton)
305307
view.ctaDismissButton.text = view.context.getString(dismissButton)
308+
view.show()
306309
}
307310

308-
override fun createDialogCta(activity: FragmentActivity): DaxDialog? = null
309-
310311
override fun pixelCancelParameters(): Map<String, String?> = emptyMap()
311312

312313
override fun pixelOkParameters(): Map<String, String?> = emptyMap()

0 commit comments

Comments
 (0)