Skip to content

Commit 81d299e

Browse files
Merge pull request #141 from MihaiCristianCondrea/codex/create-list-style-ad-layout-and-preferences
Integrate native ad into Android Studio lessons
2 parents 560115f + a4a8da1 commit 81d299e

File tree

7 files changed

+620
-63
lines changed

7 files changed

+620
-63
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ads/managers/NativeAdLoader.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
package com.d4rk.androidtutorials.java.ads.managers;
22

33
import android.content.Context;
4+
import android.util.Log;
45
import android.view.LayoutInflater;
56
import android.view.View;
67
import android.view.ViewGroup;
78
import android.widget.Button;
89
import android.widget.ImageView;
910
import android.widget.TextView;
1011

11-
import androidx.annotation.NonNull;
1212
import androidx.annotation.LayoutRes;
13+
import androidx.annotation.NonNull;
1314

1415
import com.d4rk.androidtutorials.java.R;
16+
import com.google.android.gms.ads.AdListener;
1517
import com.google.android.gms.ads.AdLoader;
1618
import com.google.android.gms.ads.AdRequest;
19+
import com.google.android.gms.ads.LoadAdError;
1720
import com.google.android.gms.ads.nativead.MediaView;
1821
import com.google.android.gms.ads.nativead.NativeAd;
1922
import com.google.android.gms.ads.nativead.NativeAdView;
@@ -23,12 +26,21 @@
2326
*/
2427
public class NativeAdLoader {
2528

29+
private static final String TAG = "NativeAdLoader";
30+
2631
public static void load(@NonNull Context context, @NonNull ViewGroup container) {
27-
load(context, container, R.layout.large_home_banner_native_ad);
32+
load(context, container, R.layout.large_home_banner_native_ad, null);
2833
}
2934

3035
public static void load(@NonNull Context context, @NonNull ViewGroup container, @LayoutRes int layoutRes) {
31-
AdLoader adLoader = new AdLoader.Builder(context, context.getString(R.string.native_ad_banner_unit_id))
36+
load(context, container, layoutRes, null);
37+
}
38+
39+
public static void load(@NonNull Context context,
40+
@NonNull ViewGroup container,
41+
@LayoutRes int layoutRes,
42+
@androidx.annotation.Nullable AdListener listener) {
43+
AdLoader.Builder builder = new AdLoader.Builder(context, context.getString(R.string.native_ad_banner_unit_id))
3244
.forNativeAd(nativeAd -> {
3345
LayoutInflater inflater = LayoutInflater.from(context);
3446
NativeAdView adView = (NativeAdView) inflater.inflate(layoutRes, container, false);
@@ -41,8 +53,19 @@ public static void load(@NonNull Context context, @NonNull ViewGroup container,
4153
populateNativeAdView(nativeAd, adView);
4254
container.removeAllViews();
4355
container.addView(adView);
44-
})
45-
.build();
56+
container.requestLayout();
57+
});
58+
59+
builder.withAdListener(listener != null ? listener : new AdListener() {
60+
@Override
61+
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
62+
Log.w(TAG, "Failed to load native ad: " + loadAdError.getMessage());
63+
container.removeAllViews();
64+
container.setVisibility(View.GONE);
65+
}
66+
});
67+
68+
AdLoader adLoader = builder.build();
4669
adLoader.loadAd(new AdRequest.Builder().build());
4770
}
4871

app/src/main/java/com/d4rk/androidtutorials/java/ads/views/NativeAdBannerView.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
import androidx.annotation.Nullable;
1111

1212
import com.d4rk.androidtutorials.java.R;
13-
import com.google.android.gms.ads.AdRequest;
1413
import com.d4rk.androidtutorials.java.ads.managers.NativeAdLoader;
14+
import com.google.android.gms.ads.AdListener;
15+
import com.google.android.gms.ads.AdRequest;
1516

1617
/**
1718
* Custom view that acts as a drop-in replacement for AdView and loads
@@ -45,7 +46,11 @@ private void init(@NonNull Context context, @Nullable AttributeSet attrs, int de
4546
}
4647

4748
public void loadAd(AdRequest adRequest) {
48-
NativeAdLoader.load(getContext(), this, layoutRes);
49+
loadAd(adRequest, null);
50+
}
51+
52+
public void loadAd(AdRequest adRequest, @Nullable AdListener listener) {
53+
NativeAdLoader.load(getContext(), this, layoutRes, listener);
4954
}
5055

5156
public void setNativeAdLayout(@LayoutRes int layoutRes) {

0 commit comments

Comments
 (0)