package com.weishitechsub.kdcxqwb.fragment.remind;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.anythink.core.api.ATAdConst;
import com.anythink.core.api.ATAdInfo;
import com.anythink.core.api.ATNetworkConfirmInfo;
import com.anythink.core.api.ATShowConfig;
import com.anythink.core.api.AdError;
import com.anythink.dlopt.api.ATAppDownloadListener;
import com.anythink.interstitial.api.ATInterstitial;
import com.anythink.interstitial.api.ATInterstitialAutoAd;
import com.anythink.interstitial.api.ATInterstitialAutoEventListener;
import com.anythink.interstitial.api.ATInterstitialAutoLoadListener;
import com.anythink.interstitial.api.ATInterstitialExListener;
import com.anythink.nativead.api.ATNative;
import com.anythink.nativead.api.ATNativeAdView;
import com.anythink.nativead.api.ATNativeDislikeListener;
import com.anythink.nativead.api.ATNativeEventExListener;
import com.anythink.nativead.api.ATNativeNetworkListener;
import com.anythink.nativead.api.ATNativePrepareExInfo;
import com.anythink.nativead.api.ATNativePrepareInfo;
import com.anythink.nativead.api.ATNativeView;
import com.anythink.nativead.api.NativeAd;
import com.anythink.nativead.api.NativeAdInteractionType;
import com.hfd.common.base.BaseFragment;
import com.weishitechsub.kdcxqwb.LCAppcation;
import com.weishitechsub.kdcxqwb.MainActivity;
import com.weishitechsub.kdcxqwb.R;
import com.weishitechsub.kdcxqwb.ad.AdConst;
import com.weishitechsub.kdcxqwb.ad.base.BaseActivity;
import com.weishitechsub.kdcxqwb.ad.util.SDKUtil;
import com.weishitechsub.kdcxqwb.ad.util.SelfRenderViewUtil;
import com.weishitechsub.kdcxqwb.bean.ListBean;
import com.weishitechsub.kdcxqwb.fragment.Adapter.MyCourierAdapter;
import com.weishitechsub.kdcxqwb.fragment.Adapter.RemindListAdapter;
import com.weishitechsub.kdcxqwb.fragment.home.HomeFragment;
import com.weishitechsub.kdcxqwb.fragment.home.MyCourierActivity;
import com.weishitechsub.kdcxqwb.utils.JsonUtils;
import com.weishitechsub.kdcxqwb.utils.ReminderManager;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RemindFragment extends BaseFragment {
private static final String TAG = RemindFragment.class.getSimpleName();
private RecyclerView rv;
private RemindListAdapter adapter;
private List<ListBean> fullDataList;
/**
* 插屏广告
*/
private ATInterstitial mInterstitialAd;
/** 原生广告*/
private final List<String> mData = new ArrayList<>();
private ATNative mATNative;
private NativeAd mNativeAd;
private ATNativeView mWoDeATNativeView;
private View mWoDeSelfRenderView;
@Override
protected int setLayout() {
return R.layout.fragment_remind;
}
@Override
protected void initView() {
rv = fvbi(R.id.rv);
rv.setLayoutManager(new LinearLayoutManager(getContext()));
adapter = new RemindListAdapter(getContext());
adapter.setTrackList(parseCourierJson());
rv.setAdapter(adapter);
/** 原生广告*/
mWoDeATNativeView = fvbi(R.id.native_ad_view);
mWoDeSelfRenderView = fvbi(R.id.native_selfrender_view);
/** 原生视频广告*/
if (LCAppcation.getInstance().isShowAd(44)) {
//准备加载广告
initYsATNativeAd(LCAppcation.naviteAdId);
final int adViewWidth = mWoDeATNativeView.getWidth() != 0 ? mWoDeATNativeView.getWidth() : getResources().getDisplayMetrics().widthPixels;
final int adViewHeight = adViewWidth * 3 / 4;
loadYsAd(adViewWidth, adViewHeight);
isYsAdReady();
new Handler().postDelayed(() -> {
ATNative.entryAdScenario(LCAppcation.naviteAdId, AdConst.SCENARIO_ID.NATIVE_AD_SCENARIO);
if (isYsAdReady()) {
showYsAd();
}
}, 2000);
}
/** 插屏广告*/
if (LCAppcation.getInstance().isShowAd(2)) {
initCpInterstitialAd();
initCpAutoLoad();
isCpAdReady();
new Handler().postDelayed(() -> {
ATInterstitial.entryAdScenario(LCAppcation.interstitialAdId, AdConst.SCENARIO_ID.INTERSTITIAL_AD_SCENARIO);
if (mInterstitialAd.isAdReady()) {
showCpAd();
}
}, 2000); // 延时2000毫秒(2秒)后跳转
}
}
@Override
protected void initData() {
refreshRemindedList(); // 直接刷新
}
@Override
public void onResume() {
super.onResume();
/** 原生视频广告*/
if (mNativeAd != null) {
mNativeAd.onResume();
}
refreshRemindedList(); // 页面可见时重新加载
}
// RemindFragment.java
private void refreshRemindedList() {
Context context = getContext();
if (context == null) return;
// 直接从 ReminderManager 获取已提醒的条目
List<ListBean> remindedList = ReminderManager.getInstance(context).getRemindedItems();
adapter.setNewInstance(remindedList);
if (remindedList.isEmpty()) {
Toast.makeText(context, "暂无提醒中的快递", Toast.LENGTH_SHORT).show();
} else {
Log.d("RemindFragment", "显示 " + remindedList.size() + " 个提醒项");
}
}
@Override
public void onStart() {
super.onStart();
ReminderManager.getInstance(getContext()).setOnReminderChangeListener(() -> {
new Handler(Looper.getMainLooper()).post(this::refreshRemindedList);
});
}
@Override
public void onStop() {
super.onStop();
ReminderManager.getInstance(getContext()).removeListener();
}
private List<ListBean> getDataFromSomewhere() {
MyCourierActivity activity = (MyCourierActivity) getActivity();
if (activity != null) {
List<ListBean> data = activity.getCurrentCourierList();
return data != null ? new ArrayList<>(data) : new ArrayList<>();
}
return new ArrayList<>();
}
@Override
protected void initClick() {}
private List<ListBean> parseCourierJson() {
String jsonString = JsonUtils.loadJSONFromAsset(mContext.getAssets(), "delivery_list.json");
List<ListBean> couriers = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(jsonString);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject item = jsonArray.getJSONObject(i);
String title = item.getString("title");
String des = item.getString("des");
String value = item.getString("value");
couriers.add(new ListBean(title,value,"","",""));
}
} catch (JSONException e) {
e.printStackTrace();
}
return couriers;
}
private void exitYsNativePanel() {
mData.clear();
destroyYsAd();
}
public void destroyYsAd() {
if (mNativeAd != null) {
mWoDeATNativeView.removeAllViews();
mWoDeATNativeView.setVisibility(View.GONE);
mNativeAd.destory();
}
}
@Override
public void onPause() {
/** 原生视频广告*/
if (mNativeAd != null) {
mNativeAd.onPause();
}
super.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
/**
* 插屏广告
*/
for (Map.Entry<String, Boolean> entry : mCpAutoLoadPlacementIdMap.entrySet()) {
ATInterstitialAutoAd.removePlacementId(entry.getKey());
}
if (mInterstitialAd != null) {
mInterstitialAd.setAdSourceStatusListener(null);
mInterstitialAd.setAdDownloadListener(null);
mInterstitialAd.setAdListener(null);
mInterstitialAd.setAdMultipleLoadedListener(null);
}
/** 原生视频广告*/
destroyYsAd();
if (mATNative != null) {
mATNative.setAdListener(null);
mATNative.setAdSourceStatusListener(null);
mATNative.setAdMultipleLoadedListener(null);
}
}
/**
* 插屏广告
*/
private final Map<String, Boolean> mCpAutoLoadPlacementIdMap = new HashMap<>();
private final ATInterstitialAutoLoadListener autoCpLoadListener = new ATInterstitialAutoLoadListener() {
@Override
public void onInterstitialAutoLoaded(String placementId) {
Log.i(TAG, "PlacementId:" + placementId + ": onInterstitialAutoLoaded");
}
@Override
public void onInterstitialAutoLoadFail(String placementId, AdError adError) {
Log.i(TAG, "PlacementId:" + placementId + ": onInterstitialAutoLoadFail:\n" + adError.getFullErrorInfo());
}
};
private final ATInterstitialAutoEventListener autoCpEventListener = new ATInterstitialAutoEventListener() {
@Override
public void onInterstitialAdClicked(ATAdInfo adInfo) {
Log.i(TAG, "onInterstitialAdClicked:" + adInfo.toString());
}
@Override
public void onInterstitialAdShow(ATAdInfo adInfo) {
Log.i(TAG, "onInterstitialAdShow1111111111:" + adInfo.toString());
MainActivity.reportInfo(adInfo);
}
@Override
public void onInterstitialAdClose(ATAdInfo adInfo) {
Log.i(TAG, "onInterstitialAdClose:" + adInfo.toString());
}
@Override
public void onInterstitialAdVideoStart(ATAdInfo adInfo) {
Log.i(TAG, "onInterstitialAdVideoStart:" + adInfo.toString());
}
@Override
public void onInterstitialAdVideoEnd(ATAdInfo adInfo) {
Log.i(TAG, "onInterstitialAdVideoEnd:" + adInfo.toString());
}
@Override
public void onInterstitialAdVideoError(AdError adError) {
Log.i(TAG, "onInterstitialAdVideoError:" + adError.getFullErrorInfo());
}
public void onDeeplinkCallback(ATAdInfo adInfo, boolean isSuccess) {
Log.i(TAG, "onDeeplinkCallback:\n" + adInfo.toString() + "| isSuccess:" + isSuccess);
}
public void onDownloadConfirm(Context context, ATAdInfo adInfo, ATNetworkConfirmInfo networkConfirmInfo) {
Log.i(TAG, "onDownloadConfirm:\n" + adInfo.toString());
}
};
private void initCpInterstitialAd() {
mInterstitialAd = new ATInterstitial(mContext, LCAppcation.interstitialAdId);
mInterstitialAd.setAdRevenueListener(new BaseActivity.AdRevenueListenerImpl());
mInterstitialAd.setAdListener(new ATInterstitialExListener() {
@Override
public void onDeeplinkCallback(ATAdInfo adInfo, boolean isSuccess) {
Log.i(TAG, "onDeeplinkCallback:" + adInfo.toString() + "--status:" + isSuccess);
}
@Override
public void onDownloadConfirm(Context context, ATAdInfo adInfo, ATNetworkConfirmInfo networkConfirmInfo) {
Log.i(TAG, "onDownloadConfirm: adInfo=" + adInfo.toString());
}
@Override
public void onInterstitialAdLoaded() {
Log.i(TAG, "onInterstitialAdLoaded");
}
@Override
public void onInterstitialAdLoadFail(AdError adError) {
Log.i(TAG, "onInterstitialAdLoadFail:\n" + adError.getFullErrorInfo());
}
@Override
public void onInterstitialAdClicked(ATAdInfo entity) {
Log.i(TAG, "onInterstitialAdClicked:\n" + entity.toString());
}
@Override
public void onInterstitialAdShow(ATAdInfo entity) {
Log.i(TAG, "onInterstitialAdShow:\n" + entity.toString());
}
@Override
public void onInterstitialAdClose(ATAdInfo entity) {
Log.i(TAG, "onInterstitialAdClose:\n" + entity.toString());
}
@Override
public void onInterstitialAdVideoStart(ATAdInfo entity) {
Log.i(TAG, "onInterstitialAdVideoStart:\n" + entity.toString());
}
@Override
public void onInterstitialAdVideoEnd(ATAdInfo entity) {
Log.i(TAG, "onInterstitialAdVideoEnd:\n" + entity.toString());
}
@Override
public void onInterstitialAdVideoError(AdError adError) {
Log.i(TAG, "onInterstitialAdVideoError:\n" + adError.getFullErrorInfo());
}
});
mInterstitialAd.setAdSourceStatusListener(new BaseActivity.ATAdSourceStatusListenerImpl());
}
private void initCpAutoLoad() {
ATInterstitialAutoAd.init(mContext, null, autoCpLoadListener);
String curPlacementId = LCAppcation.interstitialAdId;
mCpAutoLoadPlacementIdMap.put(curPlacementId, true);
ATInterstitialAutoAd.addPlacementId(curPlacementId);
}
private ATShowConfig getCpATShowConfig() {
ATShowConfig.Builder builder = new ATShowConfig.Builder();
builder.scenarioId(AdConst.SCENARIO_ID.INTERSTITIAL_AD_SCENARIO);
builder.showCustomExt(AdConst.SHOW_CUSTOM_EXT.INTERSTITIAL_AD_SHOW_CUSTOM_EXT);
return builder.build();
}
private void loadCpAd() {
SDKUtil.initSDK(mContext);
if (mInterstitialAd == null) {
return;
}
Map<String, Object> localMap = new HashMap<>();
// localMap.put(ATAdConst.KEY.AD_WIDTH, getResources().getDisplayMetrics().widthPixels);
// localMap.put(ATAdConst.KEY.AD_HEIGHT, getResources().getDisplayMetrics().heightPixels);
//插屏广告使用原生自渲染广告时,设置自定义渲染方式:只需要在发起请求时额外设置setNativeAdCustomRender即可,请求、展示广告流程同插屏广告接入流程相同。
mInterstitialAd.setNativeAdCustomRender(new BaseActivity.NativeAdCustomRender(mContext));
mInterstitialAd.setLocalExtra(localMap);
mInterstitialAd.load();
}
private void isCpAdReady() {
ATInterstitialAutoAd.isAdReady(LCAppcation.interstitialAdId);
}
private void showCpAd() {
ATInterstitialAutoAd.show(getActivity(), LCAppcation.interstitialAdId, getCpATShowConfig(), autoCpEventListener, new BaseActivity.AdRevenueListenerImpl());
}
private ATShowConfig getYsATShowConfig() {
ATShowConfig.Builder builder = new ATShowConfig.Builder();
builder.scenarioId(AdConst.SCENARIO_ID.NATIVE_AD_SCENARIO);
builder.showCustomExt(AdConst.SHOW_CUSTOM_EXT.NATIVE_AD_SHOW_CUSTOM_EXT);
return builder.build();
}
private void initYsATNativeAd(String placementId) {
mATNative = new ATNative(getActivity(), placementId, new ATNativeNetworkListener() {
@Override
public void onNativeAdLoaded() {
printLogOnUI("onNativeAdLoaded load success...");
}
@Override
public void onNativeAdLoadFail(AdError adError) {
printLogOnUI("onNativeAdLoadFail load fail...:" + adError.getFullErrorInfo());
}
});
mATNative.setAdSourceStatusListener(new BaseActivity.ATAdSourceStatusListenerImpl());
}
private void loadYsAd(int adViewWidth, int adViewHeight) {
SDKUtil.initSDK(getActivity());
printLogOnUI(getString(R.string.anythink_ad_status_loading));
Map<String, Object> localExtra = new HashMap<>();
localExtra.put(ATAdConst.KEY.AD_WIDTH, adViewWidth);
localExtra.put(ATAdConst.KEY.AD_HEIGHT, adViewHeight);
mATNative.setLocalExtra(localExtra);
mATNative.makeAdRequest();
}
private boolean isYsAdReady() {
boolean isReady = mATNative.checkAdStatus().isReady();
printLogOnUI("isAdReady:" + isReady);
List<ATAdInfo> atAdInfoList = mATNative.checkValidAdCaches();
Log.i(TAG, "Valid Cahce size:" + (atAdInfoList != null ? atAdInfoList.size() : 0));
if (atAdInfoList != null) {
for (ATAdInfo adInfo : atAdInfoList) {
Log.i(TAG, "\nCahce detail:" + adInfo.toString());
}
}
return isReady;
}
private void showYsAd() {
// NativeAd nativeAd = mATNative.getNativeAd();
NativeAd nativeAd = mATNative.getNativeAd(getYsATShowConfig());
if (nativeAd != null) {
if (mNativeAd != null) {
mNativeAd.destory();
}
mNativeAd = nativeAd;
mNativeAd.setAdRevenueListener(new BaseActivity.AdRevenueListenerImpl());
mNativeAd.setNativeEventListener(new ATNativeEventExListener() {
@Override
public void onDeeplinkCallback(ATNativeAdView view, ATAdInfo adInfo, boolean isSuccess) {
printLogOnUI("onDeeplinkCallback:" + adInfo.toString() + "--status:" + isSuccess);
}
@Override
public void onAdImpressed(ATNativeAdView view, ATAdInfo entity) {
printLogOnUI("native ad onAdImpressed:\n" + entity.toString());
MainActivity.reportInfo(entity);
}
@Override
public void onAdClicked(ATNativeAdView view, ATAdInfo entity) {
printLogOnUI("native ad onAdClicked:\n" + entity.toString());
}
@Override
public void onAdVideoStart(ATNativeAdView view) {
printLogOnUI("onAdVideoStart");
}
@Override
public void onAdVideoEnd(ATNativeAdView view) {
printLogOnUI("onAdVideoEnd");
}
@Override
public void onAdVideoProgress(ATNativeAdView view, int progress) {
printLogOnUI("onAdVideoProgress");
}
});
mNativeAd.setDislikeCallbackListener(new ATNativeDislikeListener() {
@Override
public void onAdCloseButtonClick(ATNativeAdView view, ATAdInfo entity) {
printLogOnUI("native ad onAdCloseButtonClick");
exitYsNativePanel();
}
});
mWoDeATNativeView.removeAllViews();
ATNativePrepareInfo mNativePrepareInfo = null;
try {
mNativePrepareInfo = new ATNativePrepareExInfo();
//bindTTDislikeDialog(mATNativeView, mNativeAd);
if (mNativeAd.isNativeExpress()) {
mNativeAd.renderAdContainer(mWoDeATNativeView, null);
} else {
SelfRenderViewUtil.bindSelfRenderView(getActivity(), mNativeAd.getAdMaterial(), mWoDeSelfRenderView, mNativePrepareInfo);
mNativeAd.renderAdContainer(mWoDeATNativeView, mWoDeSelfRenderView);
}
} catch (Exception e) {
e.printStackTrace();
}
//下载类原生自渲染广告设置下载状态监听,更新CTA按钮文案
if (!mNativeAd.isNativeExpress() && mNativeAd.getAdMaterial()
.getNativeAdInteractionType() == NativeAdInteractionType.APP_DOWNLOAD_TYPE && mNativePrepareInfo.getCtaView() != null && mNativePrepareInfo.getCtaView() instanceof TextView) {
TextView ctaTextView = (TextView) mNativePrepareInfo.getCtaView();
mNativeAd.setAdDownloadListener(new ATAppDownloadListener() {
@Override
public void onDownloadStart(ATAdInfo adInfo, long totalBytes, long currBytes, String fileName, String appName) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
ctaTextView.setText("暂停下载");
printLogOnUI("onDownloadStart totalBytes:" + totalBytes + ",currBytes:" + currBytes + ",appName:" + appName);
}
});
}
@Override
public void onDownloadUpdate(ATAdInfo adInfo, long totalBytes, long currBytes, String fileName, String appName) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
ctaTextView.setText("暂停下载");
printLogOnUI("onDownloadUpdate totalBytes:" + totalBytes + ",currBytes:" + currBytes + ",appName:" + appName);
}
});
}
@Override
public void onDownloadPause(ATAdInfo adInfo, long totalBytes, long currBytes, String fileName, String appName) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
ctaTextView.setText("恢复下载");
printLogOnUI("onDownloadPause totalBytes:" + totalBytes + ",currBytes:" + currBytes + ",appName:" + appName);
}
});
}
@Override
public void onDownloadFinish(ATAdInfo adInfo, long totalBytes, String fileName, String appName) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
ctaTextView.setText("立即安装");
printLogOnUI("onDownloadFinish totalBytes:" + totalBytes + ",appName:" + appName);
}
});
}
@Override
public void onDownloadFail(ATAdInfo adInfo, long totalBytes, long currBytes, String fileName, String appName) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
ctaTextView.setText("开始下载");
printLogOnUI("onDownloadFail totalBytes:" + totalBytes + ",currBytes:" + currBytes + ",appName:" + appName);
}
});
}
@Override
public void onInstalled(ATAdInfo adInfo, String fileName, String appName) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
ctaTextView.setText("打开应用");
printLogOnUI("onInstalled appName:" + appName);
}
});
}
});
}
mNativeAd.prepare(mWoDeATNativeView, mNativePrepareInfo);
mWoDeATNativeView.setVisibility(View.VISIBLE);
} else {
printLogOnUI("this placement no cache!");
}
}
protected void printLogOnUI(String msg) {
// Log.i(TAG,msg);
}
}
这个if (remindedList.isEmpty()) {
Toast.makeText(context, "暂无提醒中的快递", Toast.LENGTH_SHORT).show();
} else {
Log.d("RemindFragment", "显示 " + remindedList.size() + " 个提醒项");
}提示吐司会弹好几遍