Skip to content

Commit ef4a3f2

Browse files
Style font and label onboarding options
1 parent 59f8aff commit ef4a3f2

File tree

6 files changed

+328
-135
lines changed

6 files changed

+328
-135
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/BottomLabelsFragment.java

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,17 @@
1010
import androidx.fragment.app.Fragment;
1111
import androidx.lifecycle.ViewModelProvider;
1212

13+
import com.google.android.material.radiobutton.MaterialRadioButton;
14+
1315
import com.d4rk.androidtutorials.java.R;
1416
import com.d4rk.androidtutorials.java.databinding.FragmentOnboardingBottomLabelsBinding;
1517

1618
public class BottomLabelsFragment extends Fragment {
1719

1820
private FragmentOnboardingBottomLabelsBinding binding;
1921
private OnboardingViewModel viewModel;
22+
private MaterialRadioButton[] radioButtons;
23+
private View[] optionCards;
2024

2125
@Nullable
2226
@Override
@@ -29,18 +33,53 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
2933
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
3034
super.onViewCreated(view, savedInstanceState);
3135
viewModel = new ViewModelProvider(requireActivity()).get(OnboardingViewModel.class);
36+
37+
radioButtons = new MaterialRadioButton[]{
38+
binding.optionLabeled.radioButton,
39+
binding.optionSelected.radioButton,
40+
binding.optionUnlabeled.radioButton
41+
};
42+
43+
optionCards = new View[]{
44+
binding.cardLabeled,
45+
binding.cardSelected,
46+
binding.cardUnlabeled
47+
};
48+
49+
for (int i = 0; i < radioButtons.length; i++) {
50+
int index = i;
51+
radioButtons[i].setId(View.generateViewId());
52+
optionCards[i].setOnClickListener(v -> selectOption(index));
53+
radioButtons[i].setOnClickListener(v -> selectOption(index));
54+
}
55+
56+
String current = viewModel.getBottomNavLabels();
57+
String[] values = getResources().getStringArray(R.array.preference_bottom_navigation_bar_labels_values);
58+
int index = 0;
59+
if (current.equals(values[1])) {
60+
index = 1;
61+
} else if (current.equals(values[2])) {
62+
index = 2;
63+
}
64+
selectOption(index);
65+
}
66+
67+
private void selectOption(int index) {
68+
for (int i = 0; i < radioButtons.length; i++) {
69+
radioButtons[i].setChecked(i == index);
70+
}
3271
}
3372

3473
public void saveSelection() {
35-
int checkedId = binding.labelsGroup.getCheckedRadioButtonId();
3674
String[] values = getResources().getStringArray(R.array.preference_bottom_navigation_bar_labels_values);
37-
String value = values[0];
38-
if (checkedId == R.id.radio_selected) {
39-
value = values[1];
40-
} else if (checkedId == R.id.radio_unlabeled) {
41-
value = values[2];
75+
int index = 0;
76+
for (int i = 0; i < radioButtons.length; i++) {
77+
if (radioButtons[i].isChecked()) {
78+
index = i;
79+
break;
80+
}
4281
}
43-
viewModel.setBottomNavLabels(value);
82+
viewModel.setBottomNavLabels(values[index]);
4483
}
4584

4685
@Override

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/FontFragment.java

Lines changed: 64 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import androidx.annotation.Nullable;
1010
import androidx.fragment.app.Fragment;
1111
import androidx.lifecycle.ViewModelProvider;
12+
import androidx.core.content.res.ResourcesCompat;
13+
14+
import com.google.android.material.radiobutton.MaterialRadioButton;
1215

1316
import com.d4rk.androidtutorials.java.R;
1417
import com.d4rk.androidtutorials.java.databinding.FragmentOnboardingFontBinding;
@@ -17,6 +20,8 @@ public class FontFragment extends Fragment {
1720

1821
private FragmentOnboardingFontBinding binding;
1922
private OnboardingViewModel viewModel;
23+
private MaterialRadioButton[] radioButtons;
24+
private View[] optionCards;
2025

2126
@Nullable
2227
@Override
@@ -29,26 +34,70 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
2934
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
3035
super.onViewCreated(view, savedInstanceState);
3136
viewModel = new ViewModelProvider(requireActivity()).get(OnboardingViewModel.class);
37+
38+
radioButtons = new MaterialRadioButton[]{
39+
binding.optionAudiowide.radioButton,
40+
binding.optionFiraCode.radioButton,
41+
binding.optionJetbrainsMono.radioButton,
42+
binding.optionNotoSansMono.radioButton,
43+
binding.optionPoppins.radioButton,
44+
binding.optionRobotoMono.radioButton,
45+
binding.optionGoogleSansCode.radioButton
46+
};
47+
48+
optionCards = new View[]{
49+
binding.cardAudiowide,
50+
binding.cardFiraCode,
51+
binding.cardJetbrainsMono,
52+
binding.cardNotoSansMono,
53+
binding.cardPoppins,
54+
binding.cardRobotoMono,
55+
binding.cardGoogleSansCode
56+
};
57+
58+
binding.optionAudiowide.titleText.setTypeface(ResourcesCompat.getFont(requireContext(), R.font.font_audiowide));
59+
binding.optionFiraCode.titleText.setTypeface(ResourcesCompat.getFont(requireContext(), R.font.font_fira_code));
60+
binding.optionJetbrainsMono.titleText.setTypeface(ResourcesCompat.getFont(requireContext(), R.font.font_jetbrains_mono));
61+
binding.optionNotoSansMono.titleText.setTypeface(ResourcesCompat.getFont(requireContext(), R.font.font_noto_sans_mono));
62+
binding.optionPoppins.titleText.setTypeface(ResourcesCompat.getFont(requireContext(), R.font.font_poppins));
63+
binding.optionRobotoMono.titleText.setTypeface(ResourcesCompat.getFont(requireContext(), R.font.font_roboto_mono));
64+
binding.optionGoogleSansCode.titleText.setTypeface(ResourcesCompat.getFont(requireContext(), R.font.font_google_sans_code));
65+
66+
for (int i = 0; i < radioButtons.length; i++) {
67+
int index = i;
68+
radioButtons[i].setId(View.generateViewId());
69+
optionCards[i].setOnClickListener(v -> selectOption(index));
70+
radioButtons[i].setOnClickListener(v -> selectOption(index));
71+
}
72+
73+
String current = viewModel.getMonospaceFont();
74+
String[] values = getResources().getStringArray(R.array.code_font_values);
75+
int index = 6;
76+
for (int i = 0; i < values.length; i++) {
77+
if (current.equals(values[i])) {
78+
index = i;
79+
break;
80+
}
81+
}
82+
selectOption(index);
83+
}
84+
85+
private void selectOption(int index) {
86+
for (int i = 0; i < radioButtons.length; i++) {
87+
radioButtons[i].setChecked(i == index);
88+
}
3289
}
3390

3491
public void saveSelection() {
35-
int checkedId = binding.fontGroup.getCheckedRadioButtonId();
3692
String[] values = getResources().getStringArray(R.array.code_font_values);
37-
String value = values[6];
38-
if (checkedId == R.id.radio_font_audiowide) {
39-
value = values[0];
40-
} else if (checkedId == R.id.radio_font_fira_code) {
41-
value = values[1];
42-
} else if (checkedId == R.id.radio_font_jetbrains_mono) {
43-
value = values[2];
44-
} else if (checkedId == R.id.radio_font_noto_sans_mono) {
45-
value = values[3];
46-
} else if (checkedId == R.id.radio_font_poppins) {
47-
value = values[4];
48-
} else if (checkedId == R.id.radio_font_roboto_mono) {
49-
value = values[5];
93+
int index = 6;
94+
for (int i = 0; i < radioButtons.length; i++) {
95+
if (radioButtons[i].isChecked()) {
96+
index = i;
97+
break;
98+
}
5099
}
51-
viewModel.setMonospaceFont(value);
100+
viewModel.setMonospaceFont(values[index]);
52101
}
53102

54103
@Override
Lines changed: 64 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,79 @@
1-
<?xml version="1.0" encoding="utf-8"?>
2-
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
android:layout_width="match_parent"
5-
android:layout_height="match_parent">
1+
<layout xmlns:android="http://schemas.android.com/apk/res/android"
2+
xmlns:app="http://schemas.android.com/apk/res-auto">
63

7-
<LinearLayout
4+
<ScrollView
85
android:layout_width="match_parent"
9-
android:layout_height="wrap_content"
10-
android:orientation="vertical"
11-
android:padding="24dp">
6+
android:layout_height="match_parent">
127

13-
<com.google.android.material.card.MaterialCardView
8+
<LinearLayout
149
android:layout_width="match_parent"
1510
android:layout_height="wrap_content"
16-
android:padding="16dp"
17-
app:cardElevation="0dp">
11+
android:orientation="vertical"
12+
android:padding="24dp">
13+
14+
<com.google.android.material.textview.MaterialTextView
15+
android:id="@+id/title"
16+
style="@style/TextAppearance.Material3.TitleLarge"
17+
android:layout_width="wrap_content"
18+
android:layout_height="wrap_content"
19+
android:text="@string/bottom_navigation_labels" />
20+
21+
<com.google.android.material.textview.MaterialTextView
22+
android:id="@+id/description"
23+
android:layout_width="wrap_content"
24+
android:layout_height="wrap_content"
25+
android:layout_marginTop="8dp"
26+
android:text="@string/bottom_navigation_labels_description"
27+
android:textAppearance="?attr/textAppearanceBodyMedium"
28+
android:textColor="?attr/colorOnSurfaceVariant" />
1829

1930
<LinearLayout
31+
android:id="@+id/labels_group"
2032
android:layout_width="match_parent"
2133
android:layout_height="wrap_content"
22-
android:orientation="vertical">
34+
android:orientation="vertical"
35+
android:layout_marginTop="24dp">
2336

24-
<com.google.android.material.textview.MaterialTextView
25-
style="@style/TextAppearance.Material3.TitleLarge"
26-
android:layout_width="wrap_content"
37+
<com.google.android.material.card.MaterialCardView
38+
android:id="@+id/card_labeled"
39+
android:layout_width="match_parent"
2740
android:layout_height="wrap_content"
28-
android:layout_marginBottom="16dp"
29-
android:text="@string/bottom_navigation_labels" />
41+
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardViewTopRounded">
42+
43+
<include
44+
android:id="@+id/option_labeled"
45+
layout="@layout/item_onboarding_simple_option"
46+
app:text="@{@string/labeled}" />
47+
</com.google.android.material.card.MaterialCardView>
3048

31-
<RadioGroup
32-
android:id="@+id/labels_group"
49+
<com.google.android.material.card.MaterialCardView
50+
android:id="@+id/card_selected"
3351
android:layout_width="match_parent"
34-
android:layout_height="wrap_content">
35-
36-
<com.google.android.material.radiobutton.MaterialRadioButton
37-
android:id="@+id/radio_labeled"
38-
android:layout_width="wrap_content"
39-
android:layout_height="wrap_content"
40-
android:checked="true"
41-
android:text="@string/labeled" />
42-
43-
<com.google.android.material.radiobutton.MaterialRadioButton
44-
android:id="@+id/radio_selected"
45-
android:layout_width="wrap_content"
46-
android:layout_height="wrap_content"
47-
android:text="@string/selected" />
48-
49-
<com.google.android.material.radiobutton.MaterialRadioButton
50-
android:id="@+id/radio_unlabeled"
51-
android:layout_width="wrap_content"
52-
android:layout_height="wrap_content"
53-
android:text="@string/unlabeled" />
54-
</RadioGroup>
52+
android:layout_height="wrap_content"
53+
android:layout_marginTop="2dp"
54+
app:cardCornerRadius="4dp">
55+
56+
<include
57+
android:id="@+id/option_selected"
58+
layout="@layout/item_onboarding_simple_option"
59+
app:text='@{String.format(@string/selected, @string/app_name)}' />
60+
</com.google.android.material.card.MaterialCardView>
61+
62+
<com.google.android.material.card.MaterialCardView
63+
android:id="@+id/card_unlabeled"
64+
android:layout_width="match_parent"
65+
android:layout_height="wrap_content"
66+
android:layout_marginTop="2dp"
67+
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardViewBottomRounded">
68+
69+
<include
70+
android:id="@+id/option_unlabeled"
71+
layout="@layout/item_onboarding_simple_option"
72+
app:text="@{@string/unlabeled}" />
73+
</com.google.android.material.card.MaterialCardView>
74+
5575
</LinearLayout>
56-
</com.google.android.material.card.MaterialCardView>
5776

58-
</LinearLayout>
59-
</ScrollView>
77+
</LinearLayout>
78+
</ScrollView>
79+
</layout>

0 commit comments

Comments
 (0)