static VisibilityDetector create(View view) { if (view == null) { Clog.d(Clog.nativeLogTag, "Unable to check visibility"); return null; } return new VisibilityDetector(view); }
static ImpressionTracker create(String url, VisibilityDetector visibilityDetector, Context context) { if (visibilityDetector == null) { return null; } else { ImpressionTracker impressionTracker = new ImpressionTracker(url, visibilityDetector, context); visibilityDetector.addVisibilityListener(impressionTracker.listener); return impressionTracker; } }
@Override public void run() { expired = true; registeredView = null; clickables = null; if (visibilityDetector != null) { visibilityDetector.destroy(); visibilityDetector = null; } impressionTrackers = null; listener = null; // free assets if (icon != null) { icon.recycle(); icon = null; } if (image != null) { image.recycle(); image = null; } } };
private VisibilityDetector(View view) { this.mView = view; this.listeners = new ArrayList<VisibilityListener>(); scheduleVisibilityCheck(); }
@Override public boolean registerView(final View view, final NativeAdEventListener listener) { if (!expired && view != null) { this.listener = listener; visibilityDetector = VisibilityDetector.create(view); if (visibilityDetector == null) { return false; } impressionTrackers = new ArrayList<ImpressionTracker>(imp_trackers.size()); for (String url : imp_trackers) { ImpressionTracker impressionTracker = ImpressionTracker.create(url, visibilityDetector, view.getContext()); impressionTrackers.add(impressionTracker); } this.registeredView = view; setClickListener(); view.setOnClickListener(clickListener); if (anNativeExpireHandler != null) { anNativeExpireHandler.removeCallbacks(expireRunnable); } return true; } return false; }
@Override public void run() { if (listeners != null) { // copy listeners to a new array to avoid concurrentmodificationexception ArrayList<VisibilityListener> tempList = new ArrayList<VisibilityListener>(); for (VisibilityListener listener : listeners) { tempList.add(listener); } if (isVisible()) { for (VisibilityListener listener : tempList) { listener.onVisibilityChanged(true); } } else { for (VisibilityListener listener : tempList) { listener.onVisibilityChanged(false); } } } } };
private synchronized void fire() { // check if impression has already fired if (!fired) { SharedNetworkManager nm = SharedNetworkManager.getInstance(context); if (nm.isConnected(context)) { execute(); visibilityDetector.removeVisibilityListener(listener); listener = null; } else { nm.addURL(url, context); } fired = true; } }