android-calculatorpp/app/src/main/java/org/solovyev/android/calculator/AdView.java

147 lines
3.6 KiB
Java

package org.solovyev.android.calculator;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.LoadAdError;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class AdView extends FrameLayout {
@Nullable
private com.google.android.gms.ads.AdView admobView;
@Nullable
private AdView.AdViewListener admobListener;
public AdView(Context context) {
super(context);
init();
}
public AdView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public AdView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
setVisibility(GONE);
setId(R.id.cpp_ad);
}
public void destroy() {
destroyAdmobView();
}
private void destroyAdmobView() {
if (admobView != null) {
admobView.destroy();
admobView.setAdListener(null);
admobView = null;
}
if (admobListener != null) {
admobListener.destroy();
admobListener = null;
}
}
public void pause() {
if (admobView != null) {
admobView.pause();
}
}
public void resume() {
if (admobView != null) {
admobView.resume();
}
}
public void show() {
if (admobView != null) {
return;
}
admobView = addAdmobView();
admobListener = new AdView.AdViewListener(this);
admobView.setAdListener(admobListener);
final AdRequest.Builder b = new AdRequest.Builder();
admobView.loadAd(b.build());
}
@Nonnull
private com.google.android.gms.ads.AdView addAdmobView() {
final com.google.android.gms.ads.AdView v = new com.google.android.gms.ads.AdView(getContext());
v.setVisibility(GONE);
v.setAdSize(AdSize.SMART_BANNER);
v.setAdUnitId(getResources().getString(R.string.admob));
final LayoutParams lp = new LayoutParams(MATCH_PARENT, WRAP_CONTENT);
lp.gravity = Gravity.CENTER;
addView(v, lp);
return v;
}
public void hide() {
if (admobView == null) {
return;
}
setVisibility(GONE);
admobView.setVisibility(View.GONE);
admobView.pause();
destroyAdmobView();
}
private static class AdViewListener extends AdListener {
@Nullable
private AdView adView;
public AdViewListener(@Nonnull AdView adView) {
this.adView = adView;
}
void destroy() {
adView = null;
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
if (adView != null) {
adView.hide();
adView = null;
}
}
@Override
public void onAdLoaded() {
if (adView != null) {
final com.google.android.gms.ads.AdView admobView = adView.admobView;
if (admobView != null) {
admobView.setVisibility(View.VISIBLE);
}
adView.setVisibility(VISIBLE);
adView = null;
}
}
}
}