From 066f9d7f5d8c3e54dd55b77fa855679b79c11367 Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 4 Aug 2021 12:12:33 +0300 Subject: [PATCH] For #20601: Use View binding in quick settings. --- .../QuickSettingsSheetDialogFragment.kt | 17 +++++---- .../settings/quicksettings/WebsiteInfoView.kt | 33 ++++++++--------- .../quicksettings/WebsitePermissionsView.kt | 35 +++++++++---------- .../quicksettings/WebsiteInfoViewTest.kt | 20 +++++------ 4 files changed, 55 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt index 1b28923dc8..eb933655c5 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt @@ -25,8 +25,6 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog -import kotlinx.android.synthetic.main.fragment_quick_settings_dialog_sheet.* -import kotlinx.android.synthetic.main.fragment_quick_settings_dialog_sheet.view.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.plus @@ -35,6 +33,7 @@ import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.IntentReceiverActivity import org.mozilla.fenix.R +import org.mozilla.fenix.databinding.FragmentQuickSettingsDialogSheetBinding import org.mozilla.fenix.ext.components import org.mozilla.fenix.settings.PhoneFeature import com.google.android.material.R as MaterialR @@ -55,6 +54,8 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() { private var tryToRequestPermissions: Boolean = false private val args by navArgs() + private lateinit var binding: FragmentQuickSettingsDialogSheetBinding + @Suppress("DEPRECATION") // https://github.com/mozilla-mobile/fenix/issues/19920 override fun onCreateView( @@ -64,7 +65,10 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() { ): View { val context = requireContext() val components = context.components + val rootView = inflateRootView(container) + binding = FragmentQuickSettingsDialogSheetBinding.bind(rootView) + quickSettingsStore = QuickSettingsFragmentStore.createStore( context = context, websiteUrl = args.url, @@ -98,9 +102,9 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() { interactor = QuickSettingsInteractor(quickSettingsController) - websiteInfoView = WebsiteInfoView(rootView.websiteInfoLayout) + websiteInfoView = WebsiteInfoView(binding.websiteInfoLayout) websitePermissionsView = - WebsitePermissionsView(rootView.websitePermissionsLayout, interactor) + WebsitePermissionsView(binding.websitePermissionsLayout, interactor) return rootView } @@ -152,7 +156,8 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() { quickSettingsController.handleAndroidPermissionGranted(it) } } else { - val shouldShowRequestPermissionRationale = permissions.all { shouldShowRequestPermissionRationale(it) } + val shouldShowRequestPermissionRationale = + permissions.all { shouldShowRequestPermissionRationale(it) } if (!shouldShowRequestPermissionRationale && tryToRequestPermissions) { // The user has permanently blocked these permissions and he/she is trying to enabling them. @@ -187,7 +192,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() { requestCode == REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS && grantResults.all { it == PERMISSION_GRANTED } private fun showPermissionsView() { - websitePermissionsGroup.isVisible = true + binding.websitePermissionsGroup.isVisible = true } private fun launchIntentReceiver() { diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt index 1c2d5098c5..4a50c37830 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt @@ -5,14 +5,12 @@ package org.mozilla.fenix.settings.quicksettings import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat.getColor import androidx.core.view.isVisible -import kotlinx.android.extensions.LayoutContainer -import kotlinx.android.synthetic.main.quicksettings_website_info.* import mozilla.components.support.ktx.android.content.getDrawableWithTint import org.mozilla.fenix.R +import org.mozilla.fenix.databinding.QuicksettingsWebsiteInfoBinding /** * MVI View that knows to display a whether the current website uses a secure connection or not. @@ -23,10 +21,12 @@ import org.mozilla.fenix.R */ class WebsiteInfoView( container: ViewGroup -) : LayoutContainer { - - override val containerView: View = LayoutInflater.from(container.context) - .inflate(R.layout.quicksettings_website_info, container, true) +) { + val binding = QuicksettingsWebsiteInfoBinding.inflate( + LayoutInflater.from(container.context), + container, + true + ) /** * Allows changing what this View displays. @@ -41,24 +41,25 @@ class WebsiteInfoView( } private fun bindUrl(websiteUrl: String) { - url.text = websiteUrl + binding.url.text = websiteUrl } private fun bindTitle(websiteTitle: String) { - title.text = websiteTitle + binding.title.text = websiteTitle } private fun bindCertificateName(cert: String) { - val certificateLabel = containerView.context.getString(R.string.certificate_info_verified_by, cert) - certificateInfo.text = certificateLabel - certificateInfo.isVisible = cert.isNotEmpty() + val certificateLabel = + binding.root.context.getString(R.string.certificate_info_verified_by, cert) + binding.certificateInfo.text = certificateLabel + binding.certificateInfo.isVisible = cert.isNotEmpty() } private fun bindSecurityInfo(uiValues: WebsiteSecurityUiValues) { - val tint = getColor(containerView.context, uiValues.iconTintRes) - securityInfo.setText(uiValues.securityInfoRes) - securityInfoIcon.setImageDrawable( - containerView.context.getDrawableWithTint(uiValues.iconRes, tint) + val tint = getColor(binding.root.context, uiValues.iconTintRes) + binding.securityInfo.setText(uiValues.securityInfoRes) + binding.securityInfoIcon.setImageDrawable( + binding.root.context.getDrawableWithTint(uiValues.iconRes, tint) ) } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsitePermissionsView.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsitePermissionsView.kt index dc1735d337..c49eace32b 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsitePermissionsView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsitePermissionsView.kt @@ -14,9 +14,8 @@ import androidx.annotation.VisibleForTesting import androidx.appcompat.widget.AppCompatSpinner import androidx.core.content.ContextCompat import androidx.core.view.isVisible -import kotlinx.android.extensions.LayoutContainer -import kotlinx.android.synthetic.main.quicksettings_permissions.view.* import org.mozilla.fenix.R +import org.mozilla.fenix.databinding.QuicksettingsPermissionsBinding import org.mozilla.fenix.settings.PhoneFeature import org.mozilla.fenix.settings.PhoneFeature.AUTOPLAY import org.mozilla.fenix.settings.PhoneFeature.CAMERA @@ -65,38 +64,38 @@ interface WebsitePermissionInteractor { * @param interactor [WebsitePermissionInteractor] which will have delegated to all user interactions. */ class WebsitePermissionsView( - override val containerView: ViewGroup, + containerView: ViewGroup, val interactor: WebsitePermissionInteractor -) : LayoutContainer { +) { private val context = containerView.context - val view: View = LayoutInflater.from(context) - .inflate(R.layout.quicksettings_permissions, containerView, true) + val binding = + QuicksettingsPermissionsBinding.inflate(LayoutInflater.from(context), containerView, true) @VisibleForTesting internal var permissionViews: Map = EnumMap( mapOf( - CAMERA to ToggleablePermission(view.cameraLabel, view.cameraStatus), - LOCATION to ToggleablePermission(view.locationLabel, view.locationStatus), + CAMERA to ToggleablePermission(binding.cameraLabel, binding.cameraStatus), + LOCATION to ToggleablePermission(binding.locationLabel, binding.locationStatus), MICROPHONE to ToggleablePermission( - view.microphoneLabel, - view.microphoneStatus + binding.microphoneLabel, + binding.microphoneStatus ), NOTIFICATION to ToggleablePermission( - view.notificationLabel, - view.notificationStatus + binding.notificationLabel, + binding.notificationStatus ), PERSISTENT_STORAGE to ToggleablePermission( - view.persistentStorageLabel, - view.persistentStorageStatus + binding.persistentStorageLabel, + binding.persistentStorageStatus ), MEDIA_KEY_SYSTEM_ACCESS to ToggleablePermission( - view.mediaKeySystemAccessLabel, - view.mediaKeySystemAccessStatus + binding.mediaKeySystemAccessLabel, + binding.mediaKeySystemAccessStatus ), AUTOPLAY to SpinnerPermission( - view.autoplayLabel, - view.autoplayStatus + binding.autoplayLabel, + binding.autoplayStatus ) ) ) diff --git a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt index 0abc8f2329..7fe563a3ba 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoViewTest.kt @@ -6,9 +6,6 @@ package org.mozilla.fenix.settings.quicksettings import android.widget.FrameLayout import androidx.core.view.isVisible -import kotlinx.android.synthetic.main.library_site_item.title -import kotlinx.android.synthetic.main.library_site_item.url -import kotlinx.android.synthetic.main.quicksettings_website_info.* import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -16,16 +13,19 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.databinding.QuicksettingsWebsiteInfoBinding import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class WebsiteInfoViewTest { private lateinit var view: WebsiteInfoView + private lateinit var binding: QuicksettingsWebsiteInfoBinding @Before fun setup() { view = WebsiteInfoView(FrameLayout(testContext)) + binding = view.binding } @Test @@ -39,10 +39,10 @@ class WebsiteInfoViewTest { ) ) - assertEquals("https://mozilla.org", view.url.text) - assertEquals("Mozilla", view.title.text) - assertEquals("Secure Connection", view.securityInfo.text) - assertFalse(view.certificateInfo.isVisible) + assertEquals("https://mozilla.org", binding.url.text) + assertEquals("Mozilla", binding.title.text) + assertEquals("Secure Connection", binding.securityInfo.text) + assertFalse(binding.certificateInfo.isVisible) } @Test @@ -56,8 +56,8 @@ class WebsiteInfoViewTest { ) ) - assertEquals("Insecure Connection", view.securityInfo.text) - assertEquals("Verified By: Certificate", view.certificateInfo.text) - assertTrue(view.certificateInfo.isVisible) + assertEquals("Insecure Connection", binding.securityInfo.text) + assertEquals("Verified By: Certificate", binding.certificateInfo.text) + assertTrue(binding.certificateInfo.isVisible) } }