1313import androidx .preference .PreferenceScreen ;
1414
1515import com .d4rk .androidtutorials .java .R ;
16+ import com .d4rk .androidtutorials .java .ads .preferences .NativeAdPreference ;
17+
18+ import java .util .ArrayList ;
19+ import java .util .Collections ;
20+ import java .util .List ;
21+ import java .util .Random ;
1622
1723public class AndroidStudioFragment extends PreferenceFragmentCompat {
1824
@@ -25,6 +31,55 @@ public void onCreate(Bundle savedInstanceState) {
2531 @ Override
2632 public void onCreatePreferences (Bundle savedInstanceState , String rootKey ) {
2733 setPreferencesFromResource (R .xml .preferences_android_studio , rootKey );
34+
35+ PreferenceScreen screen = getPreferenceScreen ();
36+ if (screen == null ) {
37+ return ;
38+ }
39+
40+ List <PreferenceCategory > categories = new ArrayList <>();
41+ for (int i = 0 ; i < screen .getPreferenceCount (); i ++) {
42+ Preference pref = screen .getPreference (i );
43+ if (pref instanceof PreferenceCategory category ) {
44+ categories .add (category );
45+ }
46+ }
47+
48+ int lessonCount = 0 ;
49+ for (PreferenceCategory category : categories ) {
50+ lessonCount += category .getPreferenceCount ();
51+ }
52+
53+ int adCount = lessonCount / 3 ;
54+ if (adCount <= 0 ) {
55+ return ;
56+ }
57+
58+ List <Integer > adPositions = new ArrayList <>();
59+ for (int i = 0 ; i < lessonCount ; i ++) {
60+ adPositions .add (i );
61+ }
62+ Collections .shuffle (adPositions , new Random ());
63+ adPositions = adPositions .subList (0 , adCount );
64+ Collections .sort (adPositions );
65+
66+ int nextAd = 0 ;
67+ int current = 0 ;
68+ for (PreferenceCategory category : categories ) {
69+ List <Preference > originals = new ArrayList <>();
70+ for (int i = 0 ; i < category .getPreferenceCount (); i ++) {
71+ originals .add (category .getPreference (i ));
72+ }
73+ category .removeAll ();
74+ for (Preference lesson : originals ) {
75+ if (nextAd < adPositions .size () && current == adPositions .get (nextAd )) {
76+ category .addPreference (new NativeAdPreference (requireContext ()));
77+ nextAd ++;
78+ }
79+ category .addPreference (lesson );
80+ current ++;
81+ }
82+ }
2883 }
2984
3085 @ Override
@@ -84,7 +139,13 @@ private boolean applyFilter(Preference pref, String query) {
84139 category .setVisible (visible );
85140 return visible ;
86141 } else {
87- boolean matches = pref .getTitle ().toString ().toLowerCase ().contains (query );
142+ CharSequence title = pref .getTitle ();
143+ if (title == null ) {
144+ boolean visible = query .isEmpty ();
145+ pref .setVisible (visible );
146+ return visible ;
147+ }
148+ boolean matches = title .toString ().toLowerCase ().contains (query );
88149 pref .setVisible (matches );
89150 return matches ;
90151 }
0 commit comments