Skip to content

Commit d5cf1f0

Browse files
Refactor SettingsFragment and update MaterialSwitch
This commit refactors `SettingsFragment.java` by: - Organizing preference setup into separate methods. - Extracting device information string building into a dedicated method. - Improving null checks and code structure within preference click listeners. Additionally, it updates `widget_preference_switch.xml` by: - Changing the `MaterialSwitch` ID to `switchWidget`. - Setting `android:clickable`, `android:focusable`, and `android:focusableInTouchMode` to `false` for the `MaterialSwitch`.
1 parent cd83f64 commit d5cf1f0

File tree

2 files changed

+84
-45
lines changed

2 files changed

+84
-45
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/SettingsFragment.java

Lines changed: 80 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -48,24 +48,55 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
4848
setPreferencesFromResource(R.xml.preferences_settings, rootKey);
4949
SettingsActivity activity = (SettingsActivity) requireActivity();
5050
SettingsViewModel settingsViewModel = activity.getSettingsViewModel();
51-
ListPreference labelVisibilityMode = findPreference(getString(R.string.key_bottom_navigation_bar_labels));
51+
setupLabelVisibilityPreference();
52+
setupConsentAnalyticsPreference(settingsViewModel);
53+
setupDefaultTabPreference();
54+
setupOpenSourceLicensesPreference();
55+
setupNotificationsPreference();
56+
setupDeviceInfoPreference();
57+
}
58+
59+
@Override
60+
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
61+
super.onViewCreated(view, savedInstanceState);
62+
setDivider(null);
63+
setDividerHeight(0);
64+
settingsList = getListView();
65+
RecyclerView listView = settingsList;
66+
int verticalPadding = getResources().getDimensionPixelSize(R.dimen.preference_list_vertical_padding);
67+
listView.setPadding(listView.getPaddingLeft(), verticalPadding,
68+
listView.getPaddingRight(), verticalPadding);
69+
listView.setClipToPadding(false);
70+
listView.addItemDecoration(new PreferenceSpacingDecoration(requireContext()));
71+
setupPreferenceCardStyling(listView);
72+
}
73+
74+
private void setupLabelVisibilityPreference() {
75+
ListPreference labelVisibilityMode =
76+
findPreference(getString(R.string.key_bottom_navigation_bar_labels));
5277
if (labelVisibilityMode != null) {
5378
labelVisibilityMode.setOnPreferenceChangeListener((preference, newValue) -> {
5479
RequireRestartDialog restartDialog = new RequireRestartDialog();
5580
restartDialog.show(getChildFragmentManager(), RequireRestartDialog.class.getName());
5681
return true;
5782
});
5883
}
84+
}
85+
86+
private void setupConsentAnalyticsPreference(@NonNull SettingsViewModel settingsViewModel) {
5987
SwitchPreferenceCompat consentAnalyticsPreference =
6088
findPreference(getString(R.string.key_consent_analytics));
6189
if (consentAnalyticsPreference != null) {
6290
consentAnalyticsPreference.setOnPreferenceChangeListener((preference, newValue) -> {
63-
if (newValue instanceof Boolean && settingsViewModel != null) {
91+
if (newValue instanceof Boolean) {
6492
settingsViewModel.setConsentAccepted((Boolean) newValue);
6593
}
6694
return true;
6795
});
6896
}
97+
}
98+
99+
private void setupDefaultTabPreference() {
69100
ListPreference defaultTab = findPreference(getString(R.string.key_default_tab));
70101
if (defaultTab != null) {
71102
defaultTab.setOnPreferenceChangeListener((preference, newValue) -> {
@@ -74,64 +105,72 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
74105
return true;
75106
});
76107
}
108+
}
109+
110+
private void setupOpenSourceLicensesPreference() {
77111
Preference ossPreference = findPreference(getString(R.string.key_open_source_licenses));
78112
if (ossPreference != null) {
79113
ossPreference.setOnPreferenceClickListener(preference -> {
80114
OpenSourceLicensesUtils.openLicensesScreen(requireContext());
81115
return true;
82116
});
83117
}
118+
}
119+
120+
private void setupNotificationsPreference() {
84121
Preference notificationsSettings = findPreference(getString(R.string.key_notifications_settings));
85122
if (notificationsSettings != null) {
86123
notificationsSettings.setOnPreferenceClickListener(preference -> {
87124
Context context = getContext();
88-
if (context != null) {
89-
Intent intent;
90-
91-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
92-
intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
93-
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
94-
} else {
95-
intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
96-
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
97-
intent.setData(uri);
98-
}
99-
startActivity(intent);
100-
return true;
101-
} else {
125+
if (context == null) {
102126
return false;
103127
}
104-
});
105-
}
106-
Preference deviceInfoPreference = findPreference(getString(R.string.key_device_info));
107-
if (deviceInfoPreference != null) {
108-
String version = String.format(getResources().getString(R.string.app_build), String.format("%s %s", getResources().getString(R.string.manufacturer), Build.MANUFACTURER), String.format("%s %s", getResources().getString(R.string.device_model), Build.MODEL), String.format("%s %s", getResources().getString(R.string.android_version), Build.VERSION.RELEASE), String.format("%s %s", getResources().getString(R.string.api_level), Build.VERSION.SDK_INT), String.format("%s %s", getResources().getString(R.string.arch), TextUtils.join(",", Build.SUPPORTED_ABIS)));
109-
deviceInfoPreference.setSummary(version);
110-
deviceInfoPreference.setOnPreferenceClickListener(preference -> {
111-
ClipboardManager clipboard = (ClipboardManager) requireContext().getSystemService(Context.CLIPBOARD_SERVICE);
112-
ClipData clip = ClipData.newPlainText("text", version);
113-
clipboard.setPrimaryClip(clip);
114-
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
115-
Toast.makeText(getContext(), R.string.snack_copied_to_clipboard, Toast.LENGTH_SHORT).show();
128+
Intent intent;
129+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
130+
intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
131+
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
132+
} else {
133+
intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
134+
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
135+
intent.setData(uri);
116136
}
137+
startActivity(intent);
117138
return true;
118139
});
119140
}
120141
}
121142

122-
@Override
123-
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
124-
super.onViewCreated(view, savedInstanceState);
125-
setDivider(null);
126-
setDividerHeight(0);
127-
settingsList = getListView();
128-
RecyclerView listView = settingsList;
129-
int verticalPadding = getResources().getDimensionPixelSize(R.dimen.preference_list_vertical_padding);
130-
listView.setPadding(listView.getPaddingLeft(), verticalPadding,
131-
listView.getPaddingRight(), verticalPadding);
132-
listView.setClipToPadding(false);
133-
listView.addItemDecoration(new PreferenceSpacingDecoration(requireContext()));
134-
setupPreferenceCardStyling(listView);
143+
private void setupDeviceInfoPreference() {
144+
Preference deviceInfoPreference = findPreference(getString(R.string.key_device_info));
145+
if (deviceInfoPreference == null) {
146+
return;
147+
}
148+
String version = buildDeviceInfoSummary();
149+
deviceInfoPreference.setSummary(version);
150+
deviceInfoPreference.setOnPreferenceClickListener(preference -> {
151+
ClipboardManager clipboard =
152+
(ClipboardManager) requireContext().getSystemService(Context.CLIPBOARD_SERVICE);
153+
ClipData clip = ClipData.newPlainText("text", version);
154+
clipboard.setPrimaryClip(clip);
155+
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
156+
Toast.makeText(getContext(), R.string.snack_copied_to_clipboard,
157+
Toast.LENGTH_SHORT).show();
158+
}
159+
return true;
160+
});
161+
}
162+
163+
@NonNull
164+
private String buildDeviceInfoSummary() {
165+
return String.format(getResources().getString(R.string.app_build),
166+
String.format("%s %s", getResources().getString(R.string.manufacturer),
167+
Build.MANUFACTURER),
168+
String.format("%s %s", getResources().getString(R.string.device_model), Build.MODEL),
169+
String.format("%s %s", getResources().getString(R.string.android_version),
170+
Build.VERSION.RELEASE),
171+
String.format("%s %s", getResources().getString(R.string.api_level), Build.VERSION.SDK_INT),
172+
String.format("%s %s", getResources().getString(R.string.arch),
173+
TextUtils.join(",", Build.SUPPORTED_ABIS)));
135174
}
136175

137176
@Override
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<com.google.android.material.materialswitch.MaterialSwitch xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
android:id="@android:id/switch_widget"
4+
android:id="@+id/switchWidget"
55
android:layout_width="wrap_content"
66
android:layout_height="wrap_content"
77
android:layout_gravity="center"
88
android:background="@null"
9-
android:clickable="true"
9+
android:clickable="false"
10+
android:focusable="false"
11+
android:focusableInTouchMode="false"
1012
android:duplicateParentState="true"
11-
android:focusable="true"
12-
android:focusableInTouchMode="true"
1313
app:useMaterialThemeColors="true" />

0 commit comments

Comments
 (0)