diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareCloseView.kt b/app/src/main/java/org/mozilla/fenix/share/ShareCloseView.kt index 6c70939ec..719035bea 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareCloseView.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareCloseView.kt @@ -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) { diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt b/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt index 892080888..51f9fadf7 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt @@ -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?) { diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareToAccountDevicesView.kt b/app/src/main/java/org/mozilla/fenix/share/ShareToAccountDevicesView.kt index acf2120ee..346417f6c 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareToAccountDevicesView.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareToAccountDevicesView.kt @@ -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) { diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareToAppsView.kt b/app/src/main/java/org/mozilla/fenix/share/ShareToAppsView.kt index 93c7c7bc6..2fc773ed3 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareToAppsView.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareToAppsView.kt @@ -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) { - 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) { 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) } } diff --git a/app/src/test/java/org/mozilla/fenix/share/ShareCloseViewTest.kt b/app/src/test/java/org/mozilla/fenix/share/ShareCloseViewTest.kt index cc36a961f..14df227c7 100644 --- a/app/src/test/java/org/mozilla/fenix/share/ShareCloseViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/share/ShareCloseViewTest.kt @@ -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() } } }