Skip to content

Commit 013ed22

Browse files
Randomly insert native ads in Android Studio lessons
1 parent 551d207 commit 013ed22

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ads/preferences/NativeAdPreference.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class NativeAdPreference extends Preference {
2020
public NativeAdPreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
2121
super(context, attrs, defStyleAttr, defStyleRes);
2222
setLayoutResource(R.layout.native_ad_preference);
23+
setSelectable(false);
2324
}
2425

2526
public NativeAdPreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/AndroidStudioFragment.java

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@
1313
import androidx.preference.PreferenceScreen;
1414

1515
import 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

1723
public 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
}

app/src/main/res/xml/preferences_android_studio.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
android:targetPackage="com.d4rk.androidtutorials.java" />
1515
</androidx.preference.Preference>
1616
</androidx.preference.PreferenceCategory>
17-
<com.d4rk.androidtutorials.java.ads.preferences.NativeAdPreference/>
1817
<androidx.preference.PreferenceCategory
1918
app:icon="@drawable/ic_category_build_tinted"
2019
app:title="@string/basics">

0 commit comments

Comments
 (0)