package com.mopub.nativeads; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.View; import android.view.ViewGroup; import com.mopub.common.VisibleForTesting; import com.mopub.common.logging.MoPubLog; import java.util.WeakHashMap; import static android.view.View.GONE; import static com.mopub.nativeads.MoPubNative.MoPubNativeListener; /** * @deprecated As of release 2.4, use {@link com.mopub.nativeads.MoPubNativeAdRenderer} instead */ @Deprecated class NativeAdViewHelper { private NativeAdViewHelper() { } // Because the impression tracker requires tracking drawing views, // each context requires a separate impression tracker. To avoid leaking, keep weak references. @VisibleForTesting static final WeakHashMap<Context, ImpressionTracker> sImpressionTrackerMap = new WeakHashMap<Context, ImpressionTracker>(); // Used to keep track of the last NativeResponse a view was associated with in order to clean // up its state before associating with a new NativeResponse static private final WeakHashMap<View, NativeResponse> sNativeResponseMap = new WeakHashMap<View, NativeResponse>(); @Deprecated @NonNull static View getAdView(@Nullable View convertView, @Nullable final ViewGroup parent, @NonNull final Context context, @NonNull final NativeResponse nativeResponse, @NonNull final ViewBinder viewBinder) { final MoPubNativeAdRenderer moPubNativeAdRenderer = new MoPubNativeAdRenderer(viewBinder); if (convertView == null) { convertView = moPubNativeAdRenderer.createAdView(context, parent); } clearNativeResponse(context, convertView); if (nativeResponse.isDestroyed()) { MoPubLog.d("NativeResponse is destroyed, returning hidden view."); convertView.setVisibility(GONE); } else { prepareNativeResponse(context, convertView, nativeResponse); moPubNativeAdRenderer.renderAdView(convertView, nativeResponse); } return convertView; } private static void clearNativeResponse(@NonNull final Context context, @NonNull final View view) { getImpressionTracker(context).removeView(view); final NativeResponse nativeResponse = sNativeResponseMap.get(view); if (nativeResponse != null) { nativeResponse.clear(view); } } private static void prepareNativeResponse(@NonNull final Context context, @NonNull final View view, @NonNull final NativeResponse nativeResponse) { sNativeResponseMap.put(view, nativeResponse); if (!nativeResponse.isOverridingImpressionTracker()) { getImpressionTracker(context).addView(view, nativeResponse); } nativeResponse.prepare(view); } private static ImpressionTracker getImpressionTracker(@NonNull final Context context) { ImpressionTracker impressionTracker = sImpressionTrackerMap.get(context); if (impressionTracker == null) { impressionTracker = new ImpressionTracker(context); sImpressionTrackerMap.put(context, impressionTracker); } return impressionTracker; } }