For #20601: Undo Use View binding in quick Settings.

upstream-sync
Arturo Mejia 3 years ago
parent 1963d502c7
commit 525e5e7c25

@ -25,6 +25,8 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog 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.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.plus import kotlinx.coroutines.plus
@ -33,7 +35,6 @@ import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.IntentReceiverActivity import org.mozilla.fenix.IntentReceiverActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.databinding.FragmentQuickSettingsDialogSheetBinding
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.settings.PhoneFeature import org.mozilla.fenix.settings.PhoneFeature
import com.google.android.material.R as MaterialR import com.google.android.material.R as MaterialR
@ -54,9 +55,6 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
private var tryToRequestPermissions: Boolean = false private var tryToRequestPermissions: Boolean = false
private val args by navArgs<QuickSettingsSheetDialogFragmentArgs>() private val args by navArgs<QuickSettingsSheetDialogFragmentArgs>()
private var _binding: FragmentQuickSettingsDialogSheetBinding? = null
private val binding get() = _binding!!
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
// https://github.com/mozilla-mobile/fenix/issues/19920 // https://github.com/mozilla-mobile/fenix/issues/19920
override fun onCreateView( override fun onCreateView(
@ -66,10 +64,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
): View { ): View {
val context = requireContext() val context = requireContext()
val components = context.components val components = context.components
val rootView = inflateRootView(container) val rootView = inflateRootView(container)
_binding = FragmentQuickSettingsDialogSheetBinding.bind(rootView)
quickSettingsStore = QuickSettingsFragmentStore.createStore( quickSettingsStore = QuickSettingsFragmentStore.createStore(
context = context, context = context,
websiteUrl = args.url, websiteUrl = args.url,
@ -103,9 +98,9 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
interactor = QuickSettingsInteractor(quickSettingsController) interactor = QuickSettingsInteractor(quickSettingsController)
websiteInfoView = WebsiteInfoView(binding.websiteInfoLayout) websiteInfoView = WebsiteInfoView(rootView.websiteInfoLayout)
websitePermissionsView = websitePermissionsView =
WebsitePermissionsView(binding.websitePermissionsLayout, interactor) WebsitePermissionsView(rootView.websitePermissionsLayout, interactor)
return rootView return rootView
} }
@ -157,8 +152,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
quickSettingsController.handleAndroidPermissionGranted(it) quickSettingsController.handleAndroidPermissionGranted(it)
} }
} else { } else {
val shouldShowRequestPermissionRationale = val shouldShowRequestPermissionRationale = permissions.all { shouldShowRequestPermissionRationale(it) }
permissions.all { shouldShowRequestPermissionRationale(it) }
if (!shouldShowRequestPermissionRationale && tryToRequestPermissions) { if (!shouldShowRequestPermissionRationale && tryToRequestPermissions) {
// The user has permanently blocked these permissions and he/she is trying to enabling them. // The user has permanently blocked these permissions and he/she is trying to enabling them.
@ -193,7 +187,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
requestCode == REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS && grantResults.all { it == PERMISSION_GRANTED } requestCode == REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS && grantResults.all { it == PERMISSION_GRANTED }
private fun showPermissionsView() { private fun showPermissionsView() {
binding.websitePermissionsGroup.isVisible = true websitePermissionsGroup.isVisible = true
} }
private fun launchIntentReceiver() { private fun launchIntentReceiver() {

@ -5,12 +5,14 @@
package org.mozilla.fenix.settings.quicksettings package org.mozilla.fenix.settings.quicksettings
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat.getColor import androidx.core.content.ContextCompat.getColor
import androidx.core.view.isVisible 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 mozilla.components.support.ktx.android.content.getDrawableWithTint
import org.mozilla.fenix.R 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. * MVI View that knows to display a whether the current website uses a secure connection or not.
@ -21,12 +23,10 @@ import org.mozilla.fenix.databinding.QuicksettingsWebsiteInfoBinding
*/ */
class WebsiteInfoView( class WebsiteInfoView(
container: ViewGroup container: ViewGroup
) { ) : LayoutContainer {
val binding = QuicksettingsWebsiteInfoBinding.inflate(
LayoutInflater.from(container.context), override val containerView: View = LayoutInflater.from(container.context)
container, .inflate(R.layout.quicksettings_website_info, container, true)
false
)
/** /**
* Allows changing what this View displays. * Allows changing what this View displays.
@ -41,25 +41,24 @@ class WebsiteInfoView(
} }
private fun bindUrl(websiteUrl: String) { private fun bindUrl(websiteUrl: String) {
binding.url.text = websiteUrl url.text = websiteUrl
} }
private fun bindTitle(websiteTitle: String) { private fun bindTitle(websiteTitle: String) {
binding.title.text = websiteTitle title.text = websiteTitle
} }
private fun bindCertificateName(cert: String) { private fun bindCertificateName(cert: String) {
val certificateLabel = val certificateLabel = containerView.context.getString(R.string.certificate_info_verified_by, cert)
binding.root.context.getString(R.string.certificate_info_verified_by, cert) certificateInfo.text = certificateLabel
binding.certificateInfo.text = certificateLabel certificateInfo.isVisible = cert.isNotEmpty()
binding.certificateInfo.isVisible = cert.isNotEmpty()
} }
private fun bindSecurityInfo(uiValues: WebsiteSecurityUiValues) { private fun bindSecurityInfo(uiValues: WebsiteSecurityUiValues) {
val tint = getColor(binding.root.context, uiValues.iconTintRes) val tint = getColor(containerView.context, uiValues.iconTintRes)
binding.securityInfo.setText(uiValues.securityInfoRes) securityInfo.setText(uiValues.securityInfoRes)
binding.securityInfoIcon.setImageDrawable( securityInfoIcon.setImageDrawable(
binding.root.context.getDrawableWithTint(uiValues.iconRes, tint) containerView.context.getDrawableWithTint(uiValues.iconRes, tint)
) )
} }
} }

@ -14,8 +14,9 @@ import androidx.annotation.VisibleForTesting
import androidx.appcompat.widget.AppCompatSpinner import androidx.appcompat.widget.AppCompatSpinner
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible 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.R
import org.mozilla.fenix.databinding.QuicksettingsPermissionsBinding
import org.mozilla.fenix.settings.PhoneFeature import org.mozilla.fenix.settings.PhoneFeature
import org.mozilla.fenix.settings.PhoneFeature.AUTOPLAY import org.mozilla.fenix.settings.PhoneFeature.AUTOPLAY
import org.mozilla.fenix.settings.PhoneFeature.CAMERA import org.mozilla.fenix.settings.PhoneFeature.CAMERA
@ -64,38 +65,38 @@ interface WebsitePermissionInteractor {
* @param interactor [WebsitePermissionInteractor] which will have delegated to all user interactions. * @param interactor [WebsitePermissionInteractor] which will have delegated to all user interactions.
*/ */
class WebsitePermissionsView( class WebsitePermissionsView(
containerView: ViewGroup, override val containerView: ViewGroup,
val interactor: WebsitePermissionInteractor val interactor: WebsitePermissionInteractor
) { ) : LayoutContainer {
private val context = containerView.context private val context = containerView.context
val binding = val view: View = LayoutInflater.from(context)
QuicksettingsPermissionsBinding.inflate(LayoutInflater.from(context), containerView, false) .inflate(R.layout.quicksettings_permissions, containerView, true)
@VisibleForTesting @VisibleForTesting
internal var permissionViews: Map<PhoneFeature, PermissionViewHolder> = EnumMap( internal var permissionViews: Map<PhoneFeature, PermissionViewHolder> = EnumMap(
mapOf( mapOf(
CAMERA to ToggleablePermission(binding.cameraLabel, binding.cameraStatus), CAMERA to ToggleablePermission(view.cameraLabel, view.cameraStatus),
LOCATION to ToggleablePermission(binding.locationLabel, binding.locationStatus), LOCATION to ToggleablePermission(view.locationLabel, view.locationStatus),
MICROPHONE to ToggleablePermission( MICROPHONE to ToggleablePermission(
binding.microphoneLabel, view.microphoneLabel,
binding.microphoneStatus view.microphoneStatus
), ),
NOTIFICATION to ToggleablePermission( NOTIFICATION to ToggleablePermission(
binding.notificationLabel, view.notificationLabel,
binding.notificationStatus view.notificationStatus
), ),
PERSISTENT_STORAGE to ToggleablePermission( PERSISTENT_STORAGE to ToggleablePermission(
binding.persistentStorageLabel, view.persistentStorageLabel,
binding.persistentStorageStatus view.persistentStorageStatus
), ),
MEDIA_KEY_SYSTEM_ACCESS to ToggleablePermission( MEDIA_KEY_SYSTEM_ACCESS to ToggleablePermission(
binding.mediaKeySystemAccessLabel, view.mediaKeySystemAccessLabel,
binding.mediaKeySystemAccessStatus view.mediaKeySystemAccessStatus
), ),
AUTOPLAY to SpinnerPermission( AUTOPLAY to SpinnerPermission(
binding.autoplayLabel, view.autoplayLabel,
binding.autoplayStatus view.autoplayStatus
) )
) )
) )

@ -6,6 +6,9 @@ package org.mozilla.fenix.settings.quicksettings
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.core.view.isVisible 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 mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
@ -13,19 +16,16 @@ import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.databinding.QuicksettingsWebsiteInfoBinding
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class WebsiteInfoViewTest { class WebsiteInfoViewTest {
private lateinit var view: WebsiteInfoView private lateinit var view: WebsiteInfoView
private lateinit var binding: QuicksettingsWebsiteInfoBinding
@Before @Before
fun setup() { fun setup() {
view = WebsiteInfoView(FrameLayout(testContext)) view = WebsiteInfoView(FrameLayout(testContext))
binding = view.binding
} }
@Test @Test
@ -39,10 +39,10 @@ class WebsiteInfoViewTest {
) )
) )
assertEquals("https://mozilla.org", binding.url.text) assertEquals("https://mozilla.org", view.url.text)
assertEquals("Mozilla", binding.title.text) assertEquals("Mozilla", view.title.text)
assertEquals("Secure Connection", binding.securityInfo.text) assertEquals("Secure Connection", view.securityInfo.text)
assertFalse(binding.certificateInfo.isVisible) assertFalse(view.certificateInfo.isVisible)
} }
@Test @Test
@ -56,8 +56,8 @@ class WebsiteInfoViewTest {
) )
) )
assertEquals("Insecure Connection", binding.securityInfo.text) assertEquals("Insecure Connection", view.securityInfo.text)
assertEquals("Verified By: Certificate", binding.certificateInfo.text) assertEquals("Verified By: Certificate", view.certificateInfo.text)
assertTrue(binding.certificateInfo.isVisible) assertTrue(view.certificateInfo.isVisible)
} }
} }

Loading…
Cancel
Save