diff --git a/app/src/main/java/org/mozilla/fenix/ext/SpannableString.kt b/app/src/main/java/org/mozilla/fenix/ext/SpannableString.kt
new file mode 100644
index 0000000000..68a2b2e61a
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/ext/SpannableString.kt
@@ -0,0 +1,34 @@
+/* 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.content.Context
+import android.text.Spannable
+import android.text.SpannableString
+import android.text.style.AbsoluteSizeSpan
+import android.text.style.ForegroundColorSpan
+import androidx.core.content.ContextCompat
+import mozilla.components.support.ktx.android.util.dpToPx
+
+fun SpannableString.setTextSize(context: Context, textSize: Int) =
+ this.setSpan(
+ AbsoluteSizeSpan(textSize.dpToPx(context.resources.displayMetrics)),
+ 0,
+ this.length,
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
+ )
+
+fun SpannableString.setTextColor(context: Context, colorResId: Int) =
+ this.setSpan(
+ ForegroundColorSpan(
+ ContextCompat.getColor(
+ context,
+ colorResId
+ )
+ ),
+ 0,
+ this.length,
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
+ )
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 57eeea68f2..eee57c7451 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
@@ -37,17 +37,17 @@ class OnboardingTrackingProtectionViewHolder(view: View) : RecyclerView.ViewHold
isChecked = view.context.settings().shouldUseTrackingProtection
setOnCheckedChangeListener { _, isChecked ->
updateTrackingProtectionSetting(isChecked)
- updateRadioGroupState(view, isChecked)
+ updateRadioGroupState(isChecked)
}
}
- setupRadioGroup(view, trackingProtectionToggle.isChecked)
- updateRadioGroupState(view, trackingProtectionToggle.isChecked)
+ setupRadioGroup(trackingProtectionToggle.isChecked)
+ updateRadioGroupState(trackingProtectionToggle.isChecked)
}
- private fun setupRadioGroup(view: View, isChecked: Boolean) {
+ private fun setupRadioGroup(isChecked: Boolean) {
- updateRadioGroupState(view, isChecked)
+ updateRadioGroupState(isChecked)
addToRadioGroup(standardTrackingProtection, strictTrackingProtection)
@@ -58,56 +58,20 @@ class OnboardingTrackingProtectionViewHolder(view: View) : RecyclerView.ViewHold
standardTrackingProtection.onClickListener {
updateTrackingProtectionPolicy()
- view.context.components.analytics.metrics
+ itemView.context.components.analytics.metrics
.track(Event.OnboardingTrackingProtection(Setting.STANDARD))
}
- view.clickable_region_standard.apply {
- setOnClickListener {
- standardTrackingProtection.performClick()
- view.context.components.analytics.metrics
- .track(Event.OnboardingTrackingProtection(Setting.STANDARD))
- }
- val standardTitle = view.context.getString(
- R.string.onboarding_tracking_protection_standard_button_2
- )
- val standardSummary = view.context.getString(
- R.string.onboarding_tracking_protection_standard_button_description_2
- )
- contentDescription = "$standardTitle. $standardSummary"
- }
-
strictTrackingProtection.onClickListener {
updateTrackingProtectionPolicy()
- view.context.components.analytics.metrics
+ itemView.context.components.analytics.metrics
.track(Event.OnboardingTrackingProtection(Setting.STRICT))
}
-
- view.clickable_region_strict.apply {
- setOnClickListener {
- strictTrackingProtection.performClick()
- view.context.components.analytics.metrics
- .track(Event.OnboardingTrackingProtection(Setting.STRICT))
- }
- val strictTitle =
- view.context.getString(R.string.onboarding_tracking_protection_strict_option)
- val strictSummary =
- view.context.getString(R.string.onboarding_tracking_protection_strict_button_description_2)
- contentDescription = "$strictTitle. $strictSummary"
- }
}
- private fun updateRadioGroupState(view: View, isChecked: Boolean) {
+ private fun updateRadioGroupState(isChecked: Boolean) {
standardTrackingProtection.isEnabled = isChecked
strictTrackingProtection.isEnabled = isChecked
-
- view.protection_standard_description.isEnabled = isChecked
- view.protection_strict_description.isEnabled = isChecked
- view.clickable_region_standard.isClickable = isChecked
-
- view.protection_standard_title.isEnabled = isChecked
- view.protection_strict_title.isEnabled = isChecked
- view.clickable_region_strict.isClickable = isChecked
}
private fun updateTrackingProtectionSetting(enabled: Boolean) {
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 697156f5b4..4ed8d330ce 100644
--- a/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingRadioButton.kt
+++ b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingRadioButton.kt
@@ -5,12 +5,16 @@
package org.mozilla.fenix.onboarding
import android.content.Context
+import android.text.SpannableString
+import android.text.SpannableStringBuilder
import android.util.AttributeSet
import android.widget.ImageView
import androidx.appcompat.widget.AppCompatRadioButton
import androidx.core.content.edit
import androidx.core.content.withStyledAttributes
import org.mozilla.fenix.R
+import org.mozilla.fenix.ext.setTextColor
+import org.mozilla.fenix.ext.setTextSize
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.utils.view.GroupableRadioButton
import org.mozilla.fenix.utils.view.uncheckAll
@@ -23,6 +27,8 @@ class OnboardingRadioButton(
private var illustration: ImageView? = null
private var clickListener: (() -> Unit)? = null
var key: Int = 0
+ var title: Int = 0
+ var description: Int = 0
init {
context.withStyledAttributes(
@@ -31,6 +37,9 @@ class OnboardingRadioButton(
0, 0
) {
key = getResourceId(R.styleable.OnboardingRadioButton_onboardingKey, 0)
+ title = getResourceId(R.styleable.OnboardingRadioButton_onboardingKeyTitle, 0)
+ description =
+ getResourceId(R.styleable.OnboardingRadioButton_onboardingKeyDescription, 0)
}
}
@@ -52,6 +61,28 @@ class OnboardingRadioButton(
toggleRadioGroups()
clickListener?.invoke()
}
+ if (title != 0) {
+ setRadioButtonText(context)
+ }
+ }
+
+ private fun setRadioButtonText(context: Context) {
+ val builder = SpannableStringBuilder()
+
+ val spannableTitle = SpannableString(resources.getString(title))
+ spannableTitle.setTextSize(context, TITLE_TEXT_SIZE)
+ spannableTitle.setTextColor(context, R.color.primary_state_list_text_color)
+
+ builder.append(spannableTitle)
+
+ if (description != 0) {
+ val spannableDescription = SpannableString(resources.getString(description))
+ spannableDescription.setTextSize(context, DESCRIPTION_TEXT_SIZE)
+ spannableDescription.setTextColor(context, R.color.secondary_state_list_text_color)
+ builder.append("\n")
+ builder.append(spannableDescription)
+ }
+ this.text = builder
}
override fun updateRadioValue(isChecked: Boolean) {
@@ -69,4 +100,9 @@ class OnboardingRadioButton(
radioGroups.uncheckAll()
}
}
+
+ companion object {
+ private const val TITLE_TEXT_SIZE = 16
+ private const val DESCRIPTION_TEXT_SIZE = 14
+ }
}
diff --git a/app/src/main/res/layout/onboarding_theme_picker.xml b/app/src/main/res/layout/onboarding_theme_picker.xml
index 4b5cd64a16..bf6757c7be 100644
--- a/app/src/main/res/layout/onboarding_theme_picker.xml
+++ b/app/src/main/res/layout/onboarding_theme_picker.xml
@@ -4,6 +4,7 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-
+ app:onboardingKey="@string/pref_key_follow_device_theme"
+ app:onboardingKeyDescription="@string/onboarding_theme_automatic_summary"
+ app:onboardingKeyTitle="@string/onboarding_theme_automatic_title"
+ tools:text="Automatic" />
-
diff --git a/app/src/main/res/layout/onboarding_tracking_protection.xml b/app/src/main/res/layout/onboarding_tracking_protection.xml
index 1bf3fcd852..78a7df3770 100644
--- a/app/src/main/res/layout/onboarding_tracking_protection.xml
+++ b/app/src/main/res/layout/onboarding_tracking_protection.xml
@@ -7,7 +7,9 @@
android:id="@+id/onboarding_card"
style="@style/OnboardingCardLightWithPadding"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:clipChildren="false"
+ android:clipToPadding="false">
-
-
-
-
-
-
-
+ app:onboardingKey="@string/pref_key_tracking_protection_standard_option"
+ app:onboardingKeyDescription="@string/onboarding_tracking_protection_standard_button_description_2"
+ app:onboardingKeyTitle="@string/onboarding_tracking_protection_standard_button_2"
+ tools:text="Standard" />
-
-
-
-
+ app:onboardingKey="@string/pref_key_tracking_protection_strict_default"
+ app:onboardingKeyDescription="@string/onboarding_tracking_protection_strict_button_description_2"
+ app:onboardingKeyTitle="@string/onboarding_tracking_protection_strict_option"
+ tools:text="Strict" />
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 881f04879a..f3ed115f1b 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -84,6 +84,8 @@
+
+