package com.mopub.nativeads;
import android.app.Activity;
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.Preconditions;
import com.mopub.common.Preconditions.NoThrow;
import com.mopub.common.VisibleForTesting;
import com.mopub.common.logging.MoPubLog;
import java.lang.ref.WeakReference;
import static com.mopub.nativeads.MoPubNative.MoPubNativeListener;
/**
* @deprecated As of release 2.4, use {@link com.mopub.nativeads.MoPubAdAdapter} or
* {@link com.mopub.nativeads.MoPubStreamAdPlacer} instead
*/
@Deprecated
public final class AdapterHelper {
@NonNull private final WeakReference<Activity> mActivity;
@NonNull private final Context mApplicationContext;
private final int mStart;
private final int mInterval;
@Deprecated
public AdapterHelper(@NonNull final Context context, final int start, final int interval) {
Preconditions.checkNotNull(context, "Context cannot be null.");
Preconditions.checkArgument(context instanceof Activity, "Context must be an Activity.");
Preconditions.checkArgument(start >= 0, "start position must be non-negative");
Preconditions.checkArgument(interval >= 2, "interval must be at least 2");
mActivity = new WeakReference<Activity>((Activity) context);
mApplicationContext = context.getApplicationContext();
mStart = start;
mInterval = interval;
}
@Deprecated
@NonNull
public View getAdView(@Nullable final View convertView,
@Nullable final ViewGroup parent,
@NonNull final NativeResponse nativeResponse,
@NonNull final ViewBinder viewBinder,
@Nullable @SuppressWarnings("unused") final MoPubNativeListener moPubNativeListener) {
final Activity activity = mActivity.get();
if (activity == null) {
MoPubLog.w("Weak reference to Activity Context in"
+ " AdapterHelper became null. Returning empty view.");
return new View(mApplicationContext);
}
if (!NoThrow.checkNotNull(nativeResponse, "NativeResponse is null. Returning an empty view")
|| !NoThrow.checkNotNull(viewBinder, "ViewBinder is null. Returning empty view")) {
return new View(activity);
}
return NativeAdViewHelper.getAdView(
convertView,
parent,
activity,
nativeResponse,
viewBinder
);
}
// Total number of content rows + ad rows
@Deprecated
public int shiftedCount(final int originalCount) {
return originalCount + numberOfAdsThatCouldFitWithContent(originalCount);
}
// Shifted position of content in the backing list
@Deprecated
public int shiftedPosition(final int position) {
return position - numberOfAdsSeenUpToPosition(position);
}
@Deprecated
public boolean isAdPosition(final int position) {
if (position < mStart) {
return false;
}
return ((position - mStart) % mInterval == 0);
}
private int numberOfAdsSeenUpToPosition(final int position) {
// This method takes a position from a list of content and ads mixed together
// and calculates the number of ads seen up to that point
if (position <= mStart) {
return 0;
}
// Add 1 to the result since we start with an ad at start position and round down
return (int) Math.floor((double) (position - mStart) / mInterval) + 1;
}
private int numberOfAdsThatCouldFitWithContent(final int contentRowCount) {
// This method is passed the number of content rows from the backing list
// and calculates how many ads could fit in with the content
if (contentRowCount <= mStart) {
return 0;
}
final int spacesBetweenAds = mInterval - 1;
if ((contentRowCount - mStart) % spacesBetweenAds == 0) {
// Don't add 1 to result since we never include an ad at the last position in the list
return (contentRowCount - mStart) / spacesBetweenAds;
} else {
// Add 1 to the result since we start with an ad at start position and round down
return (int) Math.floor((double) (contentRowCount - mStart) / spacesBetweenAds) + 1;
}
}
// Testing
@Deprecated
@VisibleForTesting
void clearActivityContext() {
mActivity.clear();
}
}