VegeFruits v7.1版本的 MD5 值为:2ff167dfba698c783e879938fe00b9ce

以下内容为反编译后的 MoPubCustomEventNative.java 源代码,内容仅作参考


package com.mopub.nativeads;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
import com.mopub.common.DataKeys;
import com.mopub.common.VisibleForTesting;
import com.mopub.common.logging.MoPubLog;
import com.mopub.common.util.Numbers;
import com.mopub.nativeads.CustomEventNative;
import com.tapjoy.TJAdUnitConstants;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.json.JSONArray;
import org.json.JSONObject;

public class MoPubCustomEventNative extends CustomEventNative {

    static class MoPubStaticNativeAd extends StaticNativeAd {

        @VisibleForTesting
        static final String PRIVACY_INFORMATION_CLICKTHROUGH_URL = "https://www.mopub.com/optout";

        @NonNull
        private final Context mContext;

        @NonNull
        private final CustomEventNative.CustomEventNativeListener mCustomEventNativeListener;

        @NonNull
        private final ImpressionTracker mImpressionTracker;

        @NonNull
        private final JSONObject mJsonObject;

        @NonNull
        private final NativeClickHandler mNativeClickHandler;

        public enum Parameter {
            IMPRESSION_TRACKER("imptracker", true),
            CLICK_TRACKER("clktracker", true),
            TITLE(TJAdUnitConstants.String.TITLE, false),
            TEXT("text", false),
            MAIN_IMAGE("mainimage", false),
            ICON_IMAGE("iconimage", false),
            CLICK_DESTINATION("clk", false),
            FALLBACK("fallback", false),
            CALL_TO_ACTION("ctatext", false),
            STAR_RATING("starrating", false);


            @NonNull
            @VisibleForTesting
            static final Set<String> requiredKeys = new HashSet();

            @NonNull
            final String name;
            final boolean required;

            static {
                for (Parameter parameter : values()) {
                    if (parameter.required) {
                        requiredKeys.add(parameter.name);
                    }
                }
            }

            Parameter(String str, boolean z) {
                this.name = str;
                this.required = z;
            }

            @Nullable
            static Parameter from(@NonNull String str) {
                for (Parameter parameter : values()) {
                    if (parameter.name.equals(str)) {
                        return parameter;
                    }
                }
                return null;
            }
        }

        MoPubStaticNativeAd(@NonNull Context context, @NonNull JSONObject jSONObject, @NonNull ImpressionTracker impressionTracker, @NonNull NativeClickHandler nativeClickHandler, @NonNull CustomEventNative.CustomEventNativeListener customEventNativeListener) {
            this.mJsonObject = jSONObject;
            this.mContext = context.getApplicationContext();
            this.mImpressionTracker = impressionTracker;
            this.mNativeClickHandler = nativeClickHandler;
            this.mCustomEventNativeListener = customEventNativeListener;
        }

        private void addInstanceVariable(@NonNull Parameter parameter, @Nullable Object obj) {
            try {
                switch (parameter) {
                    case MAIN_IMAGE:
                        setMainImageUrl((String) obj);
                        break;
                    case ICON_IMAGE:
                        setIconImageUrl((String) obj);
                        break;
                    case IMPRESSION_TRACKER:
                        addImpressionTrackers(obj);
                        break;
                    case CLICK_DESTINATION:
                        setClickDestinationUrl((String) obj);
                        break;
                    case CLICK_TRACKER:
                        parseClickTrackers(obj);
                        break;
                    case CALL_TO_ACTION:
                        setCallToAction((String) obj);
                        break;
                    case TITLE:
                        setTitle((String) obj);
                        break;
                    case TEXT:
                        setText((String) obj);
                        break;
                    case STAR_RATING:
                        setStarRating(Numbers.parseDouble(obj));
                        break;
                    default:
                        MoPubLog.d("Unable to add JSON key to internal mapping: " + parameter.name);
                        break;
                }
            } catch (ClassCastException e) {
                if (parameter.required) {
                    throw e;
                }
                MoPubLog.d("Ignoring class cast exception for optional key: " + parameter.name);
            }
        }

        private boolean containsRequiredKeys(@NonNull JSONObject jSONObject) {
            HashSet hashSet = new HashSet();
            Iterator<String> keys = jSONObject.keys();
            while (keys.hasNext()) {
                hashSet.add(keys.next());
            }
            return hashSet.containsAll(Parameter.requiredKeys);
        }

        private boolean isImageKey(@Nullable String str) {
            return str != null && str.toLowerCase(Locale.US).endsWith("image");
        }

        private void parseClickTrackers(@NonNull Object obj) {
            if (obj instanceof JSONArray) {
                addClickTrackers(obj);
            } else {
                addClickTracker((String) obj);
            }
        }

        @Override
        public void clear(@NonNull View view) {
            this.mImpressionTracker.removeView(view);
            this.mNativeClickHandler.clearOnClickListener(view);
        }

        @Override
        public void destroy() {
            this.mImpressionTracker.destroy();
        }

        @NonNull
        List<String> getAllImageUrls() {
            ArrayList arrayList = new ArrayList();
            if (getMainImageUrl() != null) {
                arrayList.add(getMainImageUrl());
            }
            if (getIconImageUrl() != null) {
                arrayList.add(getIconImageUrl());
            }
            arrayList.addAll(getExtrasImageUrls());
            return arrayList;
        }

        @NonNull
        List<String> getExtrasImageUrls() {
            ArrayList arrayList = new ArrayList(getExtras().size());
            for (Map.Entry<String, Object> entry : getExtras().entrySet()) {
                if (isImageKey(entry.getKey()) && (entry.getValue() instanceof String)) {
                    arrayList.add((String) entry.getValue());
                }
            }
            return arrayList;
        }

        @Override
        public void handleClick(@Nullable View view) {
            notifyAdClicked();
            this.mNativeClickHandler.openClickDestinationUrl(getClickDestinationUrl(), view);
        }

        void loadAd() {
            if (!containsRequiredKeys(this.mJsonObject)) {
                throw new IllegalArgumentException("JSONObject did not contain required keys.");
            }
            Iterator<String> keys = this.mJsonObject.keys();
            while (keys.hasNext()) {
                String next = keys.next();
                Parameter from = Parameter.from(next);
                if (from != null) {
                    try {
                        addInstanceVariable(from, this.mJsonObject.opt(next));
                    } catch (ClassCastException e) {
                        throw new IllegalArgumentException("JSONObject key (" + next + ") contained unexpected value.");
                    }
                } else {
                    addExtra(next, this.mJsonObject.opt(next));
                }
            }
            setPrivacyInformationIconClickThroughUrl(PRIVACY_INFORMATION_CLICKTHROUGH_URL);
            this.mCustomEventNativeListener.onNativeAdLoaded(this);
        }

        @Override
        public void prepare(@NonNull View view) {
            this.mImpressionTracker.addView(view, this);
            this.mNativeClickHandler.setOnClickListener(view, this);
        }

        @Override
        public void recordImpression(@NonNull View view) {
            notifyAdImpressed();
        }
    }

    @Override
    public void loadNativeAd(@NonNull Context context, @NonNull CustomEventNative.CustomEventNativeListener customEventNativeListener, @NonNull Map<String, Object> map, @NonNull Map<String, String> map2) {
        Object obj = map.get(DataKeys.JSON_BODY_KEY);
        if (!(obj instanceof JSONObject)) {
            customEventNativeListener.onNativeAdFailed(NativeErrorCode.INVALID_RESPONSE);
            return;
        }
        try {
            new MoPubStaticNativeAd(context, (JSONObject) obj, new ImpressionTracker(context), new NativeClickHandler(context), customEventNativeListener).loadAd();
        } catch (IllegalArgumentException e) {
            customEventNativeListener.onNativeAdFailed(NativeErrorCode.UNSPECIFIED);
        }
    }
}