[fenix] For https://github.com/mozilla-mobile/fenix/issues/17917: Use View binding in Share views

pull/600/head
codrut.topliceanu 3 years ago committed by mergify[bot]
parent 179dd793ad
commit a4a1f6ddaf

@ -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
/**
@ -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>) {

@ -16,7 +16,6 @@ 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
@ -24,6 +23,7 @@ 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
@ -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
@ -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?) {

@ -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
@ -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>) {

@ -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
@ -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)
}
}

@ -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
@ -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() }
}
}

Loading…
Cancel
Save