Skip to content

Commit

Permalink
For mozilla-mobile#17917: Use View binding in Share views
Browse files Browse the repository at this point in the history
  • Loading branch information
codrut.topliceanu authored and mergify[bot] committed Aug 18, 2021
1 parent 7acd699 commit c52b661
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 45 deletions.
23 changes: 12 additions & 11 deletions app/src/main/java/org/mozilla/fenix/share/ShareCloseView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ package org.mozilla.fenix.share
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.share_close.*
import mozilla.components.concept.engine.prompt.ShareData
import org.mozilla.fenix.R
import org.mozilla.fenix.databinding.ShareCloseBinding
import org.mozilla.fenix.share.listadapters.ShareTabsAdapter

/**
Expand All @@ -21,20 +19,23 @@ interface ShareCloseInteractor {
}

class ShareCloseView(
override val containerView: ViewGroup,
private val interactor: ShareCloseInteractor
) : LayoutContainer {
val containerView: ViewGroup,
private val interactor: ShareCloseInteractor,
) {

val adapter = ShareTabsAdapter()

init {
LayoutInflater.from(containerView.context)
.inflate(R.layout.share_close, containerView, true)
val binding = ShareCloseBinding.inflate(
LayoutInflater.from(containerView.context),
containerView,
true
)

closeButton.setOnClickListener { interactor.onShareClosed() }
binding.closeButton.setOnClickListener { interactor.onShareClosed() }

shared_site_list.layoutManager = LinearLayoutManager(containerView.context)
shared_site_list.adapter = adapter
binding.sharedSiteList.layoutManager = LinearLayoutManager(containerView.context)
binding.sharedSiteList.adapter = adapter
}

fun setTabs(tabs: List<ShareData>) {
Expand Down
26 changes: 15 additions & 11 deletions app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import kotlinx.android.synthetic.main.fragment_share.view.*
import mozilla.components.browser.state.action.ContentAction
import mozilla.components.browser.state.selector.findTabOrCustomTab
import mozilla.components.concept.engine.prompt.PromptRequest
import mozilla.components.feature.accounts.push.SendTabUseCases
import mozilla.components.feature.share.RecentAppsStorage
import org.mozilla.fenix.R
import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.databinding.FragmentShareBinding
import org.mozilla.fenix.ext.getRootView
import org.mozilla.fenix.ext.requireComponents

Expand Down Expand Up @@ -58,8 +58,12 @@ class ShareFragment : AppCompatDialogFragment() {
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_share, container, false)
): View {
val binding = FragmentShareBinding.inflate(
inflater,
container,
false
)
val shareData = args.data.toList()

val accountManager = requireComponents.backgroundServices.accountManager
Expand Down Expand Up @@ -89,24 +93,24 @@ class ShareFragment : AppCompatDialogFragment() {
}
)

view.shareWrapper.setOnClickListener { shareInteractor.onShareClosed() }
binding.shareWrapper.setOnClickListener { shareInteractor.onShareClosed() }
shareToAccountDevicesView =
ShareToAccountDevicesView(view.devicesShareLayout, shareInteractor)
ShareToAccountDevicesView(binding.devicesShareLayout, shareInteractor)

if (args.showPage) {
// Show the previous fragment underneath the share background scrim
// by making it translucent.
view.closeSharingScrim.alpha = SHOW_PAGE_ALPHA
view.shareWrapper.setOnClickListener { shareInteractor.onShareClosed() }
binding.closeSharingScrim.alpha = SHOW_PAGE_ALPHA
binding.shareWrapper.setOnClickListener { shareInteractor.onShareClosed() }
} else {
// Otherwise, show a list of tabs to share.
view.closeSharingScrim.alpha = 1.0f
shareCloseView = ShareCloseView(view.closeSharingContent, shareInteractor)
binding.closeSharingScrim.alpha = 1.0f
shareCloseView = ShareCloseView(binding.closeSharingContent, shareInteractor)
shareCloseView.setTabs(shareData)
}
shareToAppsView = ShareToAppsView(view.appsShareLayout, shareInteractor)
shareToAppsView = ShareToAppsView(binding.appsShareLayout, shareInteractor)

return view
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ package org.mozilla.fenix.share
import android.view.LayoutInflater
import android.view.ViewGroup
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.share_to_account_devices.*
import mozilla.components.concept.sync.Device
import org.mozilla.fenix.R
import org.mozilla.fenix.databinding.ShareToAccountDevicesBinding
import org.mozilla.fenix.share.listadapters.AccountDevicesShareAdapter
import org.mozilla.fenix.share.listadapters.SyncShareOption

Expand All @@ -32,10 +31,13 @@ class ShareToAccountDevicesView(
private val adapter = AccountDevicesShareAdapter(interactor)

init {
LayoutInflater.from(containerView.context)
.inflate(R.layout.share_to_account_devices, containerView, true)
val binding = ShareToAccountDevicesBinding.inflate(
LayoutInflater.from(containerView.context),
containerView,
true
)

devicesList.adapter = adapter
binding.devicesList.adapter = adapter
}

fun setShareTargets(targets: List<SyncShareOption>) {
Expand Down
25 changes: 13 additions & 12 deletions app/src/main/java/org/mozilla/fenix/share/ShareToAppsView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.share_to_apps.*
import org.mozilla.fenix.R
import org.mozilla.fenix.databinding.ShareToAppsBinding
import org.mozilla.fenix.share.listadapters.AppShareAdapter
import org.mozilla.fenix.share.listadapters.AppShareOption

Expand All @@ -27,30 +26,32 @@ class ShareToAppsView(

private val adapter = AppShareAdapter(interactor)
private val recentAdapter = AppShareAdapter(interactor)
private var binding: ShareToAppsBinding = ShareToAppsBinding.inflate(
LayoutInflater.from(containerView.context),
containerView,
true
)

init {
LayoutInflater.from(containerView.context)
.inflate(R.layout.share_to_apps, containerView, true)

appsList.adapter = adapter
recentAppsList.adapter = recentAdapter
binding.appsList.adapter = adapter
binding.recentAppsList.adapter = recentAdapter
}

fun setShareTargets(targets: List<AppShareOption>) {
progressBar.visibility = View.GONE
binding.progressBar.visibility = View.GONE

appsList.visibility = View.VISIBLE
binding.appsList.visibility = View.VISIBLE
adapter.submitList(targets)
}

fun setRecentShareTargets(recentTargets: List<AppShareOption>) {
if (recentTargets.isEmpty()) {
recentAppsContainer.visibility = View.GONE
binding.recentAppsContainer.visibility = View.GONE
return
}
progressBar.visibility = View.GONE
binding.progressBar.visibility = View.GONE

recentAppsContainer.visibility = View.VISIBLE
binding.recentAppsContainer.visibility = View.VISIBLE
recentAdapter.submitList(recentTargets)
}
}
13 changes: 7 additions & 6 deletions app/src/test/java/org/mozilla/fenix/share/ShareCloseViewTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
package org.mozilla.fenix.share

import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.LinearLayoutManager
import io.mockk.mockk
import io.mockk.verify
import kotlinx.android.synthetic.main.share_close.view.*
import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.databinding.ShareCloseBinding
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.share.listadapters.ShareTabsAdapter

Expand All @@ -26,18 +26,19 @@ class ShareCloseViewTest {

@Before
fun setup() {
container = FrameLayout(testContext)
container = ConstraintLayout(testContext)
interactor = mockk(relaxUnitFun = true)
}

@Test
fun `binds adapter and close button`() {
ShareCloseView(container, interactor)
val binding = ShareCloseBinding.bind(container)

assertTrue(container.shared_site_list.layoutManager is LinearLayoutManager)
assertTrue(container.shared_site_list.adapter is ShareTabsAdapter)
assertTrue(binding.sharedSiteList.layoutManager is LinearLayoutManager)
assertTrue(binding.sharedSiteList.adapter is ShareTabsAdapter)

container.closeButton.performClick()
binding.closeButton.performClick()
verify { interactor.onShareClosed() }
}
}

0 comments on commit c52b661

Please sign in to comment.