147 lines
3.6 KiB
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;
|
|
}
|
|
}
|
|
}
|
|
}
|