Skip to content

Commit

Permalink
Add DuckDuckgoFragment and use it (duckduckgo#2137)
Browse files Browse the repository at this point in the history
Task/Issue URL: https://app.asana.com/0/488551667048375/1202717423070878/f

### Description
`Fragments` currently have an associated dagger component but are not dagger injectors.

Similar to what we did for Activities, create a `DuckDuckGoFragment` and `DaggerFragment` that contains all the logic so that we don't need to repeat it in every single fragment.

### Steps to test this PR
Smoke tests for:
* autofill fragments
* email fragments
* AppTP fragments
* browser fragment
* feedback fragment
  • Loading branch information
aitorvs authored Aug 8, 2022
1 parent 87d3ec2 commit 9b997bf
Show file tree
Hide file tree
Showing 22 changed files with 228 additions and 85 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,6 @@ import com.duckduckgo.app.tabs.ui.TabSwitcherActivity
import com.duckduckgo.mobile.android.ui.DuckDuckGoTheme
import com.duckduckgo.mobile.android.ui.store.ThemingDataStore
import com.google.android.material.snackbar.Snackbar
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.fragment_browser_tab.*
import kotlinx.android.synthetic.main.include_cta_buttons.view.*
import kotlinx.android.synthetic.main.include_dax_dialog_cta.*
Expand Down Expand Up @@ -180,6 +179,7 @@ import com.duckduckgo.app.downloads.DownloadsFileActions
import com.duckduckgo.app.browser.menu.BrowserPopupMenu
import com.duckduckgo.app.browser.print.PrintInjector
import com.duckduckgo.app.browser.remotemessage.asMessage
import com.duckduckgo.app.global.DuckDuckGoFragment
import com.duckduckgo.app.global.FragmentViewModelFactory
import com.duckduckgo.app.global.view.launchDefaultAppActivity
import com.duckduckgo.app.playstore.PlayStoreUtils
Expand Down Expand Up @@ -208,7 +208,7 @@ import javax.inject.Provider

@InjectWith(FragmentScope::class)
class BrowserTabFragment :
Fragment(),
DuckDuckGoFragment(),
FindListener,
CoroutineScope,
DaxDialogListener,
Expand Down Expand Up @@ -466,11 +466,6 @@ class BrowserTabFragment :

private val pulseAnimation: PulseAnimation = PulseAnimation(this)

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
removeDaxDialogFromActivity()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,20 @@

package com.duckduckgo.app.email.ui

import android.content.Context
import android.os.Bundle
import android.view.View
import androidx.annotation.LayoutRes
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.duckduckgo.app.global.DuckDuckGoFragment
import com.duckduckgo.app.global.FragmentViewModelFactory
import dagger.android.support.AndroidSupportInjection
import javax.inject.Inject

abstract class EmailProtectionFragment(@LayoutRes contentLayoutId: Int = 0) : Fragment(contentLayoutId) {
abstract class EmailProtectionFragment(@LayoutRes contentLayoutId: Int = 0) : DuckDuckGoFragment(contentLayoutId) {

@Inject
lateinit var viewModelFactory: FragmentViewModelFactory

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
configureUi()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,19 @@

package com.duckduckgo.app.feedback.ui.common

import android.content.Context
import android.os.Bundle
import androidx.annotation.LayoutRes
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.duckduckgo.app.global.DuckDuckGoFragment
import com.duckduckgo.app.global.FragmentViewModelFactory
import dagger.android.support.AndroidSupportInjection
import javax.inject.Inject

abstract class FeedbackFragment(@LayoutRes contentLayoutId: Int = 0) : Fragment(contentLayoutId) {
abstract class FeedbackFragment(@LayoutRes contentLayoutId: Int = 0) : DuckDuckGoFragment(contentLayoutId) {

@Inject
lateinit var viewModelFactory: FragmentViewModelFactory

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
configureListeners()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package com.duckduckgo.app.onboarding.ui.page

import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.net.Uri
Expand All @@ -40,7 +39,6 @@ import com.duckduckgo.mobile.android.ui.view.show
import com.duckduckgo.app.statistics.VariantManager
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
import com.duckduckgo.di.scopes.FragmentScope
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.content_onboarding_default_browser.*
import kotlinx.android.synthetic.main.include_default_browser_buttons.*
import timber.log.Timber
Expand Down Expand Up @@ -69,11 +67,6 @@ class DefaultBrowserPage : OnboardingPageFragment() {

override fun layoutResource(): Int = R.layout.content_onboarding_default_browser

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.LayoutRes
import androidx.fragment.app.Fragment
import com.duckduckgo.app.global.DuckDuckGoFragment
import com.duckduckgo.app.onboarding.ui.OnboardingActivity

abstract class OnboardingPageFragment : Fragment() {
abstract class OnboardingPageFragment : DuckDuckGoFragment() {

@LayoutRes
abstract fun layoutResource(): Int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package com.duckduckgo.app.onboarding.ui.page

import android.app.Activity.RESULT_OK
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
Expand All @@ -34,7 +33,6 @@ import com.duckduckgo.mobile.android.R as CommonR
import com.duckduckgo.app.global.extensions.html
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
import com.duckduckgo.di.scopes.FragmentScope
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.content_onboarding_welcome.*
import kotlinx.android.synthetic.main.include_dax_dialog_cta.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
Expand Down Expand Up @@ -84,11 +82,6 @@ class WelcomePage : OnboardingPageFragment() {
}
}

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

private fun render(state: WelcomePageView.State) {
when (state) {
WelcomePageView.State.Idle -> {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@

package com.duckduckgo.autofill.ui.credential.management.viewing

import android.content.Context
import android.graphics.drawable.BitmapDrawable
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
Expand All @@ -35,6 +33,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.duckduckgo.anvil.annotations.InjectWith
import com.duckduckgo.app.browser.favicon.FaviconManager
import com.duckduckgo.app.global.DuckDuckGoFragment
import com.duckduckgo.app.global.FragmentViewModelFactory
import com.duckduckgo.autofill.domain.app.LoginCredentials
import com.duckduckgo.autofill.impl.R
Expand All @@ -44,12 +43,11 @@ import com.duckduckgo.autofill.ui.credential.management.AutofillSettingsViewMode
import com.duckduckgo.autofill.ui.credential.management.AutofillSettingsViewModel.CredentialMode.Viewing
import com.duckduckgo.di.scopes.FragmentScope
import com.duckduckgo.mobile.android.ui.view.OutLinedTextInputView
import dagger.android.support.AndroidSupportInjection
import kotlinx.coroutines.launch
import javax.inject.Inject

@InjectWith(FragmentScope::class)
class AutofillManagementCredentialsMode : Fragment(), MenuProvider {
class AutofillManagementCredentialsMode : DuckDuckGoFragment(), MenuProvider {

@Inject
lateinit var faviconManager: FaviconManager
Expand All @@ -69,11 +67,6 @@ class AutofillManagementCredentialsMode : Fragment(), MenuProvider {

private lateinit var binding: FragmentAutofillManagementEditModeBinding

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,34 +17,27 @@
package com.duckduckgo.autofill.ui.credential.management.viewing

import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.duckduckgo.anvil.annotations.InjectWith
import com.duckduckgo.app.global.DuckDuckGoFragment
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
import com.duckduckgo.autofill.impl.databinding.FragmentAutofillManagementDisabledBinding
import com.duckduckgo.di.scopes.FragmentScope
import dagger.android.support.AndroidSupportInjection
import javax.inject.Inject

@InjectWith(FragmentScope::class)
class AutofillManagementDisabledMode : Fragment() {
class AutofillManagementDisabledMode : DuckDuckGoFragment() {

@Inject
lateinit var appBuildConfig: AppBuildConfig

private lateinit var binding: FragmentAutofillManagementDisabledBinding

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@

package com.duckduckgo.autofill.ui.credential.management.viewing

import android.content.Context
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand All @@ -29,6 +27,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.duckduckgo.anvil.annotations.InjectWith
import com.duckduckgo.app.browser.favicon.FaviconManager
import com.duckduckgo.app.global.DuckDuckGoFragment
import com.duckduckgo.app.global.FragmentViewModelFactory
import com.duckduckgo.autofill.domain.app.LoginCredentials
import com.duckduckgo.autofill.impl.databinding.FragmentAutofillManagementListModeBinding
Expand All @@ -38,13 +37,12 @@ import com.duckduckgo.autofill.ui.credential.management.sorting.CredentialGroupe
import com.duckduckgo.autofill.ui.credential.management.LoginCredentialTitleExtractor
import com.duckduckgo.di.scopes.FragmentScope
import com.duckduckgo.mobile.android.ui.view.quietlySetIsChecked
import dagger.android.support.AndroidSupportInjection
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject

@InjectWith(FragmentScope::class)
class AutofillManagementListMode : Fragment() {
class AutofillManagementListMode : DuckDuckGoFragment() {

@Inject
lateinit var faviconManager: FaviconManager
Expand Down Expand Up @@ -72,11 +70,6 @@ class AutofillManagementListMode : Fragment() {
}
}

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = FragmentAutofillManagementListModeBinding.inflate(inflater, container, false)
configureToggle()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@

package com.duckduckgo.autofill.ui.credential.management.viewing

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.duckduckgo.autofill.impl.databinding.FragmentAutofillManagementLockedBinding

@SuppressLint("NoFragment") // we don't use DI here
class AutofillManagementLockedMode : Fragment() {
private lateinit var binding: FragmentAutofillManagementLockedBinding

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 DuckDuckGo
* Copyright (c) 2022 DuckDuckGo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -14,13 +14,17 @@
* limitations under the License.
*/

package com.duckduckgo.mobile.android.themepreview.ui.component.system
package com.duckduckgo.app.global

import com.duckduckgo.mobile.android.themepreview.ui.component.Component
import com.duckduckgo.mobile.android.themepreview.ui.component.ComponentFragment
import android.content.Context
import androidx.annotation.LayoutRes
import dagger.android.DaggerFragment
import dagger.android.support.AndroidSupportInjection

class ComponentCardsFragment : ComponentFragment() {
override fun getComponents(): List<Component> {
return listOf(Component.SNACKBAR)
abstract class DuckDuckGoFragment(@LayoutRes contentLayoutId: Int = 0) : DaggerFragment(contentLayoutId) {

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.duckduckgo.mobile.android.themepreview.ui.component

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
Expand All @@ -25,6 +26,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.duckduckgo.mobile.android.R

@SuppressLint("NoFragment") // we don't use DI here
abstract class ComponentFragment : Fragment() {

override fun onCreateView(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.duckduckgo.mobile.android.themepreview.ui.dialogs

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
Expand All @@ -26,6 +27,7 @@ import com.duckduckgo.mobile.android.R
import com.duckduckgo.mobile.android.ui.view.TypewriterDaxDialog

/** Fragment to display a list of dialogs. */
@SuppressLint("NoFragment") // we don't use DI here
class DialogsFragment : Fragment() {

override fun onCreateView(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.duckduckgo.mobile.android.themepreview.ui.palette

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
Expand All @@ -24,6 +25,7 @@ import androidx.fragment.app.Fragment
import com.duckduckgo.mobile.android.R

/** Fragment to display a list of subsystems that show the values of this app's theme. */
@SuppressLint("NoFragment") // we don't use DI here
class ColorPaletteFragment : Fragment() {

override fun onCreateView(
Expand Down
Loading

0 comments on commit 9b997bf

Please sign in to comment.