From e8bd090a8e66619eaaea9617e61ef28c12b18233 Mon Sep 17 00:00:00 2001 From: Tiger Oakes Date: Wed, 26 Jun 2019 19:03:06 -0400 Subject: [PATCH] No issue: Use ImageView rather than rebuilding drawable (#3616) HomeFragment's onboarding items included drawableStart values, but also built drawables in the view holders to replace them. Instead, we should just use ImageViews so that work isn't duplicated. --- .../java/org/mozilla/fenix/ext/Context.kt | 4 +- .../java/org/mozilla/fenix/ext/Drawable.kt | 11 ++ .../org/mozilla/fenix/home/HomeFragment.kt | 2 +- .../viewholders/TabViewHolder.kt | 4 +- .../onboarding/OnboardingFinishViewHolder.kt | 1 + .../viewholders/onboarding/OnboardingIcon.kt | 22 ++++ .../OnboardingPrivacyNoticeViewHolder.kt | 8 +- .../OnboardingPrivateBrowsingViewHolder.kt | 81 ++++++++------ .../OnboardingThemePickerViewHolder.kt | 37 +++---- .../OnboardingTrackingProtectionViewHolder.kt | 27 ++--- .../fenix/onboarding/FenixOnboarding.kt | 26 +++-- .../fenix/onboarding/OnboardingRadioButton.kt | 31 +++--- .../res/layout/onboarding_firefox_account.xml | 20 ++-- app/src/main/res/layout/onboarding_header.xml | 23 ++-- .../res/layout/onboarding_privacy_notice.xml | 100 ++++++++++-------- .../layout/onboarding_private_browsing.xml | 69 ++++++------ .../res/layout/onboarding_section_header.xml | 21 ++-- .../layout/onboarding_tracking_protection.xml | 71 +++++++------ .../layout/private_browsing_description.xml | 44 ++++---- 19 files changed, 317 insertions(+), 285 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/ext/Drawable.kt create mode 100644 app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingIcon.kt diff --git a/app/src/main/java/org/mozilla/fenix/ext/Context.kt b/app/src/main/java/org/mozilla/fenix/ext/Context.kt index 01f83729e..0a7f3399a 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Context.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Context.kt @@ -45,7 +45,7 @@ fun Context.getPreferenceKey(@StringRes resourceId: Int): String = resources.getString(resourceId) /** - * Shares content via [ACTION_SEND] intent. + * Shares content via [ACTION_SEND] intent. * * @param text the data to be shared [EXTRA_TEXT] * @param subject of the intent [EXTRA_TEXT] @@ -74,7 +74,7 @@ fun Context.share(text: String, subject: String = ""): Boolean { } /** - * Gets the Root View with an activity context + * Gets the Root View with an activity context * * @return ViewGroup? if it is able to get a root view from the context */ diff --git a/app/src/main/java/org/mozilla/fenix/ext/Drawable.kt b/app/src/main/java/org/mozilla/fenix/ext/Drawable.kt new file mode 100644 index 000000000..8463dac04 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/ext/Drawable.kt @@ -0,0 +1,11 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.ext + +import android.graphics.drawable.Drawable + +fun Drawable.setBounds(size: Int) { + setBounds(0, 0, size, size) +} diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index b064481a5..b2d9f7839 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -88,7 +88,7 @@ class HomeFragment : Fragment(), AccountObserver { private val singleSessionObserver = object : Session.Observer { override fun onTitleChanged(session: Session, title: String) { super.onTitleChanged(session, title) - if (deleteAllSessionsJob != null) { return } + if (deleteAllSessionsJob != null) return emitSessionChanges() } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt index 3e3e02bc4..b0ccc22d1 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TabViewHolder.kt @@ -30,9 +30,9 @@ import org.mozilla.fenix.home.sessioncontrol.onNext import kotlin.coroutines.CoroutineContext class TabViewHolder( - val view: View, + view: View, actionEmitter: Observer, - val job: Job, + private val job: Job, override val containerView: View? = view ) : RecyclerView.ViewHolder(view), LayoutContainer, CoroutineScope { diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingFinishViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingFinishViewHolder.kt index afb0921a0..5586db17f 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingFinishViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingFinishViewHolder.kt @@ -23,6 +23,7 @@ class OnboardingFinishViewHolder( actionEmitter.onNext(OnboardingAction.Finish) } } + companion object { const val LAYOUT_ID = R.layout.onboarding_finish } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingIcon.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingIcon.kt new file mode 100644 index 000000000..da8b490ca --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingIcon.kt @@ -0,0 +1,22 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding + +import android.widget.TextView +import androidx.annotation.DrawableRes +import androidx.appcompat.content.res.AppCompatResources +import org.mozilla.fenix.R +import org.mozilla.fenix.ext.setBounds + +/** + * Sets the drawableStart of a header in an onboarding card. + */ +fun TextView.setOnboardingIcon(@DrawableRes id: Int) { + val icon = AppCompatResources.getDrawable(context, id) + val size = context.resources.getDimensionPixelSize(R.dimen.onboarding_header_icon_height_width) + icon?.setBounds(size) + + setCompoundDrawablesRelative(icon, null, null, null) +} diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolder.kt index 95148a003..d0a51b5e4 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolder.kt @@ -5,21 +5,15 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding import android.view.View -import androidx.appcompat.content.res.AppCompatResources import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.onboarding_privacy_notice.view.* -import org.jetbrains.anko.dimen import org.mozilla.fenix.R import org.mozilla.fenix.settings.SupportUtils class OnboardingPrivacyNoticeViewHolder(view: View) : RecyclerView.ViewHolder(view) { init { - val icon = AppCompatResources.getDrawable(view.context, R.drawable.ic_onboarding_privacy_notice) - val size = view.context.dimen(R.dimen.onboarding_header_icon_height_width) - icon?.setBounds(0, 0, size, size) - - view.header_text.setCompoundDrawables(icon, null, null, null) + view.header_text.setOnboardingIcon(R.drawable.ic_onboarding_privacy_notice) val appName = view.context.getString(R.string.app_name) view.description_text.text = view.context.getString(R.string.onboarding_privacy_notice_description, appName) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivateBrowsingViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivateBrowsingViewHolder.kt index 1a309a6b7..aa2881321 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivateBrowsingViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivateBrowsingViewHolder.kt @@ -4,59 +4,74 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding +import android.content.Context import android.graphics.Canvas import android.graphics.Paint import android.text.SpannableString import android.text.Spanned import android.text.style.ImageSpan import android.view.View +import androidx.annotation.DrawableRes import androidx.appcompat.content.res.AppCompatResources import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.onboarding_private_browsing.view.* import org.mozilla.fenix.R +import org.mozilla.fenix.ext.setBounds class OnboardingPrivateBrowsingViewHolder(view: View) : RecyclerView.ViewHolder(view) { init { - val iconDrawable = AppCompatResources.getDrawable(view.context, R.drawable.ic_private_browsing)!! - iconDrawable.setBounds(0, 0, view.description_text.lineHeight, view.description_text.lineHeight) + view.header_text.setOnboardingIcon(R.drawable.ic_onboarding_private_browsing) - val icon = object : ImageSpan(iconDrawable) { - override fun draw( - canvas: Canvas, - text: CharSequence?, - start: Int, - end: Int, - x: Float, - top: Int, - y: Int, - bottom: Int, - paint: Paint - ) { - canvas.save() - val fmPaint = paint.fontMetricsInt - val fontHeight = fmPaint.descent - fmPaint.ascent - val centerY = y + fmPaint.descent - fontHeight / 2 - val transY = (centerY - (drawable.bounds.bottom - drawable.bounds.top) / 2).toFloat() - canvas.translate(x, transY) - drawable.draw(canvas) - canvas.restore() - } - } - - val text = SpannableString(view.context.getString(R.string.onboarding_private_browsing_description)) - val spanStartIndex = text.indexOf(IMAGE_PLACEHOLDER) - - text.setSpan( - icon, - spanStartIndex, - spanStartIndex + IMAGE_PLACEHOLDER.length, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + // Display a private browsing icon as a character inside the description text. + val inlineIcon = PrivateBrowsingImageSpan( + view.context, + R.drawable.ic_private_browsing, + view.description_text.lineHeight ) + val text = SpannableString(view.context.getString(R.string.onboarding_private_browsing_description)).apply { + val spanStartIndex = indexOf(IMAGE_PLACEHOLDER) + setSpan( + inlineIcon, + spanStartIndex, + spanStartIndex + IMAGE_PLACEHOLDER.length, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + ) + } + view.description_text.text = text } + class PrivateBrowsingImageSpan( + context: Context, + @DrawableRes drawableId: Int, + size: Int + ) : ImageSpan( + AppCompatResources.getDrawable(context, drawableId)!!.apply { setBounds(size) } + ) { + override fun draw( + canvas: Canvas, + text: CharSequence?, + start: Int, + end: Int, + x: Float, + top: Int, + y: Int, + bottom: Int, + paint: Paint + ) { + canvas.save() + val fmPaint = paint.fontMetricsInt + val fontHeight = fmPaint.descent - fmPaint.ascent + val centerY = y + fmPaint.descent - fontHeight / 2 + val transY = (centerY - (drawable.bounds.bottom - drawable.bounds.top) / 2).toFloat() + canvas.translate(x, transY) + drawable.draw(canvas) + canvas.restore() + } + } + companion object { const val IMAGE_PLACEHOLDER = "%s" const val LAYOUT_ID = R.layout.onboarding_private_browsing diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingThemePickerViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingThemePickerViewHolder.kt index ebb7ffaf1..1fe296d8b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingThemePickerViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingThemePickerViewHolder.kt @@ -4,37 +4,27 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding -import android.content.Context import android.os.Build import android.os.Build.VERSION.SDK_INT import android.view.View import androidx.appcompat.app.AppCompatDelegate import androidx.recyclerview.widget.RecyclerView -import kotlinx.android.synthetic.main.onboarding_section_header.view.* import kotlinx.android.synthetic.main.onboarding_theme_picker.view.* import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.utils.Settings -class OnboardingThemePickerViewHolder(private val view: View) : RecyclerView.ViewHolder(view) { - - fun bind(labelBuilder: (Context) -> String) { - view.section_header_text.text = labelBuilder(view.context) - } - - companion object { - const val LAYOUT_ID = R.layout.onboarding_theme_picker - } +class OnboardingThemePickerViewHolder(view: View) : RecyclerView.ViewHolder(view) { init { val radioLightTheme = view.theme_light_radio_button val radioDarkTheme = view.theme_dark_radio_button val radioFollowDeviceTheme = view.theme_automatic_radio_button - if (SDK_INT >= Build.VERSION_CODES.P) { - radioFollowDeviceTheme?.key = R.string.pref_key_follow_device_theme + radioFollowDeviceTheme.key = if (SDK_INT >= Build.VERSION_CODES.P) { + R.string.pref_key_follow_device_theme } else { - radioFollowDeviceTheme?.key = R.string.pref_key_auto_battery_theme + R.string.pref_key_auto_battery_theme } radioLightTheme.addToRadioGroup(radioDarkTheme) @@ -79,20 +69,25 @@ class OnboardingThemePickerViewHolder(private val view: View) : RecyclerView.Vie } with(Settings.getInstance(view.context)) { - when { - this.shouldUseLightTheme -> radioLightTheme.isChecked = true - this.shouldUseDarkTheme -> radioDarkTheme.isChecked = true - else -> radioFollowDeviceTheme.isChecked = true + val radio = when { + this.shouldUseLightTheme -> radioLightTheme + this.shouldUseDarkTheme -> radioDarkTheme + else -> radioFollowDeviceTheme } + radio.isChecked = true } } private fun setNewTheme(mode: Int) { if (AppCompatDelegate.getDefaultNightMode() == mode) return AppCompatDelegate.setDefaultNightMode(mode) - view.context?.components?.core?.let { - it.engine.settings.preferredColorScheme = it.getPreferredColorScheme() + with(itemView.context.components) { + core.engine.settings.preferredColorScheme = core.getPreferredColorScheme() + useCases.sessionUseCases.reload.invoke() } - view.context?.components?.useCases?.sessionUseCases?.reload?.invoke() + } + + companion object { + const val LAYOUT_ID = R.layout.onboarding_theme_picker } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingTrackingProtectionViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingTrackingProtectionViewHolder.kt index e46b654a8..d8afa1953 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingTrackingProtectionViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingTrackingProtectionViewHolder.kt @@ -5,22 +5,16 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding import android.view.View -import androidx.appcompat.content.res.AppCompatResources import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.onboarding_tracking_protection.view.* -import org.jetbrains.anko.dimen import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.utils.Settings -class OnboardingTrackingProtectionViewHolder(val view: View) : RecyclerView.ViewHolder(view) { +class OnboardingTrackingProtectionViewHolder(view: View) : RecyclerView.ViewHolder(view) { init { - val icon = AppCompatResources.getDrawable(view.context, R.drawable.ic_onboarding_tracking_protection) - val size = view.context.dimen(R.dimen.onboarding_header_icon_height_width) - icon?.setBounds(0, 0, size, size) - - view.header_text.setCompoundDrawables(icon, null, null, null) + view.header_text.setOnboardingIcon(R.drawable.ic_onboarding_tracking_protection) val appName = view.context.getString(R.string.app_name) view.description_text.text = view.context.getString( @@ -28,24 +22,21 @@ class OnboardingTrackingProtectionViewHolder(val view: View) : RecyclerView.View appName ) - val switch = view.tracking_protection_toggle - - switch.isChecked = Settings.getInstance(view.context).shouldUseTrackingProtection - - switch.setOnCheckedChangeListener { _, isChecked -> - updateTrackingProtectionSetting(isChecked) + view.tracking_protection_toggle.apply { + isChecked = Settings.getInstance(view.context).shouldUseTrackingProtection + setOnCheckedChangeListener { _, isChecked -> + updateTrackingProtectionSetting(isChecked) + } } } private fun updateTrackingProtectionSetting(enabled: Boolean) { - Settings.getInstance(view.context).setTrackingProtection(enabled) - with(view.context.components) { + Settings.getInstance(itemView.context).setTrackingProtection(enabled) + with(itemView.context.components) { val policy = core.createTrackingProtectionPolicy(enabled) useCases.settingsUseCases.updateTrackingProtection.invoke(policy) useCases.sessionUseCases.reload.invoke() } - - view.context.components.useCases.sessionUseCases.reload.invoke() } companion object { diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt b/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt index 94d9c3baa..aac8dea28 100644 --- a/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt +++ b/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt @@ -6,34 +6,32 @@ package org.mozilla.fenix.onboarding import android.content.Context import android.content.SharedPreferences +import androidx.core.content.edit import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components -class FenixOnboarding(private val context: Context) { - private val onboardingPrefs = context.applicationContext.getSharedPreferences( - OnboardingKeys.PREF_NAME.key, +class FenixOnboarding(context: Context) { + private val metrics = context.components.analytics.metrics + private val onboardingPrefs = context.getSharedPreferences( + PREF_NAME_ONBOARDING_KEY, Context.MODE_PRIVATE ) private var SharedPreferences.onboardedVersion: Int - get() = getInt(OnboardingKeys.LAST_VERSION.key, 0) - set(version) { edit().putInt(OnboardingKeys.LAST_VERSION.key, version).apply() } + get() = getInt(LAST_VERSION_ONBOARDING_KEY, 0) + set(version) { edit { putInt(LAST_VERSION_ONBOARDING_KEY, version) } } fun finish() { onboardingPrefs.onboardedVersion = CURRENT_ONBOARDING_VERSION - context.components.analytics.metrics.track(Event.DismissedOnboarding) + metrics.track(Event.DismissedOnboarding) } - fun userHasBeenOnboarded(): Boolean { - return onboardingPrefs.onboardedVersion == CURRENT_ONBOARDING_VERSION - } - - private enum class OnboardingKeys(val key: String) { - PREF_NAME("fenix.onboarding"), - LAST_VERSION("fenix.onboarding.last_version") - } + fun userHasBeenOnboarded() = onboardingPrefs.onboardedVersion == CURRENT_ONBOARDING_VERSION companion object { private const val CURRENT_ONBOARDING_VERSION = 1 + + private const val PREF_NAME_ONBOARDING_KEY = "fenix.onboarding" + private const val LAST_VERSION_ONBOARDING_KEY = "fenix.onboarding.last_version" } } diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingRadioButton.kt b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingRadioButton.kt index 2653f7b25..364a0bb27 100644 --- a/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingRadioButton.kt +++ b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingRadioButton.kt @@ -7,6 +7,8 @@ package org.mozilla.fenix.onboarding import android.content.Context import android.util.AttributeSet import androidx.appcompat.widget.AppCompatRadioButton +import androidx.core.content.edit +import androidx.core.content.withStyledAttributes import org.mozilla.fenix.R import org.mozilla.fenix.utils.Settings @@ -16,20 +18,12 @@ class OnboardingRadioButton(context: Context, attrs: AttributeSet) : AppCompatRa var key: Int = 0 init { - attrs.let { - context.theme.obtainStyledAttributes( - it, - R.styleable.OnboardingRadioButton, - 0, 0 - ).apply { - try { - key = getResourceId( - R.styleable.OnboardingRadioButton_onboardingKey, 0 - ) - } finally { - recycle() - } - } + context.withStyledAttributes( + attrs, + R.styleable.OnboardingRadioButton, + 0, 0 + ) { + key = getResourceId(R.styleable.OnboardingRadioButton_onboardingKey, 0) } } @@ -37,7 +31,7 @@ class OnboardingRadioButton(context: Context, attrs: AttributeSet) : AppCompatRa radioGroups.add(radioButton) } - fun onClickListener(listener: (() -> Unit)) { + fun onClickListener(listener: () -> Unit) { clickListener = listener } @@ -51,12 +45,13 @@ class OnboardingRadioButton(context: Context, attrs: AttributeSet) : AppCompatRa private fun updateRadioValue(isChecked: Boolean) { this.isChecked = isChecked - Settings.getInstance(context).preferences.edit().putBoolean(context.getString(key), isChecked) - .apply() + Settings.getInstance(context).preferences.edit { + putBoolean(context.getString(key), isChecked) + } } private fun toggleRadioGroups() { - if (this.isChecked) { + if (isChecked) { radioGroups.forEach { it.updateRadioValue(false) } } } diff --git a/app/src/main/res/layout/onboarding_firefox_account.xml b/app/src/main/res/layout/onboarding_firefox_account.xml index e388e53d7..f317d87b1 100644 --- a/app/src/main/res/layout/onboarding_firefox_account.xml +++ b/app/src/main/res/layout/onboarding_firefox_account.xml @@ -2,22 +2,24 @@ - + diff --git a/app/src/main/res/layout/onboarding_header.xml b/app/src/main/res/layout/onboarding_header.xml index de144428c..b4e6cd040 100644 --- a/app/src/main/res/layout/onboarding_header.xml +++ b/app/src/main/res/layout/onboarding_header.xml @@ -3,16 +3,17 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - - \ No newline at end of file + android:layout_marginBottom="8dp"> + + diff --git a/app/src/main/res/layout/onboarding_privacy_notice.xml b/app/src/main/res/layout/onboarding_privacy_notice.xml index 36a0dbe6a..7c72d570c 100644 --- a/app/src/main/res/layout/onboarding_privacy_notice.xml +++ b/app/src/main/res/layout/onboarding_privacy_notice.xml @@ -2,50 +2,62 @@ - + - - - + android:text="@string/onboarding_privacy_notice_header" + tools:drawableStart="@drawable/ic_onboarding_privacy_notice" + android:drawablePadding="12dp" + android:textAppearance="@style/HeaderTextStyle" + android:gravity="center_vertical" + android:lines="1" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + + + - + diff --git a/app/src/main/res/layout/onboarding_private_browsing.xml b/app/src/main/res/layout/onboarding_private_browsing.xml index b71ff7ba4..199a8c728 100644 --- a/app/src/main/res/layout/onboarding_private_browsing.xml +++ b/app/src/main/res/layout/onboarding_private_browsing.xml @@ -2,43 +2,36 @@ - - - - + android:layout_height="wrap_content"> + + diff --git a/app/src/main/res/layout/onboarding_section_header.xml b/app/src/main/res/layout/onboarding_section_header.xml index 78488feb3..4a4bb971f 100644 --- a/app/src/main/res/layout/onboarding_section_header.xml +++ b/app/src/main/res/layout/onboarding_section_header.xml @@ -2,15 +2,12 @@ - - - \ No newline at end of file + diff --git a/app/src/main/res/layout/onboarding_tracking_protection.xml b/app/src/main/res/layout/onboarding_tracking_protection.xml index 67a8b8554..24fa76692 100644 --- a/app/src/main/res/layout/onboarding_tracking_protection.xml +++ b/app/src/main/res/layout/onboarding_tracking_protection.xml @@ -2,38 +2,43 @@ - - - - + android:layout_height="wrap_content"> + + + diff --git a/app/src/main/res/layout/private_browsing_description.xml b/app/src/main/res/layout/private_browsing_description.xml index bf228471f..76f1fe6f5 100644 --- a/app/src/main/res/layout/private_browsing_description.xml +++ b/app/src/main/res/layout/private_browsing_description.xml @@ -3,27 +3,27 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - - - \ No newline at end of file + android:layout_margin="16dp" + android:orientation="vertical"> + + +