Files
rr3-apk/decompiled-community/sources/com/vungle/ads/internal/ImpressionTracker.java
Daniel Elliott c080f0d97f Add Discord community version (64-bit only)
- Added realracing3-community.apk (71.57 MB)
- Removed 32-bit support (armeabi-v7a)
- Only includes arm64-v8a libraries
- Decompiled source code included
- Added README-community.md with analysis
2026-02-18 15:48:36 -08:00

273 lines
11 KiB
Java

package com.vungle.ads.internal;
import android.R;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.ViewTreeObserver;
import androidx.annotation.VisibleForTesting;
import androidx.core.view.ViewCompat;
import com.vungle.ads.internal.util.Logger;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;
/* loaded from: classes4.dex */
public final class ImpressionTracker {
private static final int MIN_VISIBILITY_PERCENTAGE = 1;
private static final int VISIBILITY_THROTTLE_MILLIS = 100;
private final Rect clipRect;
private boolean isVisibilityScheduled;
private final ViewTreeObserver.OnPreDrawListener onPreDrawListener;
private boolean setViewTreeObserverSucceed;
private final Map<View, TrackingInfo> trackedViews;
private final Handler visibilityHandler;
private final VisibilityRunnable visibilityRunnable;
private WeakReference<ViewTreeObserver> weakViewTreeObserver;
public static final Companion Companion = new Companion(null);
private static final String TAG = ImpressionTracker.class.getSimpleName();
public interface ImpressionListener {
void onImpression(View view);
}
@VisibleForTesting
public static final class TrackingInfo {
private ImpressionListener impressionListener;
private int minViewablePercent;
public final ImpressionListener getImpressionListener() {
return this.impressionListener;
}
public final int getMinViewablePercent() {
return this.minViewablePercent;
}
public final void setImpressionListener(ImpressionListener impressionListener) {
this.impressionListener = impressionListener;
}
public final void setMinViewablePercent(int i) {
this.minViewablePercent = i;
}
}
@VisibleForTesting
public static /* synthetic */ void getOnPreDrawListener$annotations() {
}
@VisibleForTesting
public static /* synthetic */ void getWeakViewTreeObserver$annotations() {
}
public final ViewTreeObserver.OnPreDrawListener getOnPreDrawListener() {
return this.onPreDrawListener;
}
public final WeakReference<ViewTreeObserver> getWeakViewTreeObserver() {
return this.weakViewTreeObserver;
}
public final void setWeakViewTreeObserver(WeakReference<ViewTreeObserver> weakReference) {
Intrinsics.checkNotNullParameter(weakReference, "<set-?>");
this.weakViewTreeObserver = weakReference;
}
@VisibleForTesting
public ImpressionTracker(Context context, Map<View, TrackingInfo> trackedViews, Handler visibilityHandler) {
Intrinsics.checkNotNullParameter(context, "context");
Intrinsics.checkNotNullParameter(trackedViews, "trackedViews");
Intrinsics.checkNotNullParameter(visibilityHandler, "visibilityHandler");
this.trackedViews = trackedViews;
this.visibilityHandler = visibilityHandler;
this.clipRect = new Rect();
this.visibilityRunnable = new VisibilityRunnable();
this.onPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { // from class: com.vungle.ads.internal.ImpressionTracker$$ExternalSyntheticLambda0
@Override // android.view.ViewTreeObserver.OnPreDrawListener
public final boolean onPreDraw() {
boolean m3859_init_$lambda0;
m3859_init_$lambda0 = ImpressionTracker.m3859_init_$lambda0(ImpressionTracker.this);
return m3859_init_$lambda0;
}
};
this.weakViewTreeObserver = new WeakReference<>(null);
this.setViewTreeObserverSucceed = setViewTreeObserver(context, null);
}
/* JADX WARN: 'this' call moved to the top of the method (can break code semantics) */
public ImpressionTracker(Context context) {
this(context, new WeakHashMap(10), new Handler());
Intrinsics.checkNotNullParameter(context, "context");
}
private final boolean setViewTreeObserver(Context context, View view) {
ViewTreeObserver viewTreeObserver = this.weakViewTreeObserver.get();
if (viewTreeObserver != null && viewTreeObserver.isAlive()) {
return true;
}
View topView = getTopView(context, view);
if (topView == null) {
Logger.Companion companion = Logger.Companion;
String TAG2 = TAG;
Intrinsics.checkNotNullExpressionValue(TAG2, "TAG");
companion.d(TAG2, "Unable to set ViewTreeObserver due to no available root view.");
return false;
}
ViewTreeObserver viewTreeObserver2 = topView.getViewTreeObserver();
if (!viewTreeObserver2.isAlive()) {
Logger.Companion companion2 = Logger.Companion;
String TAG3 = TAG;
Intrinsics.checkNotNullExpressionValue(TAG3, "TAG");
companion2.d(TAG3, "The root view tree observer was not alive");
return false;
}
this.weakViewTreeObserver = new WeakReference<>(viewTreeObserver2);
viewTreeObserver2.addOnPreDrawListener(this.onPreDrawListener);
return true;
}
public final void addView(View view, ImpressionListener impressionListener) {
Intrinsics.checkNotNullParameter(view, "view");
this.setViewTreeObserverSucceed = setViewTreeObserver(view.getContext(), view);
TrackingInfo trackingInfo = this.trackedViews.get(view);
if (trackingInfo == null) {
trackingInfo = new TrackingInfo();
this.trackedViews.put(view, trackingInfo);
scheduleVisibilityCheck();
}
trackingInfo.setMinViewablePercent(1);
trackingInfo.setImpressionListener(impressionListener);
}
@VisibleForTesting
public final void removeView(View view) {
Intrinsics.checkNotNullParameter(view, "view");
this.trackedViews.remove(view);
}
public final void clear() {
this.trackedViews.clear();
this.visibilityHandler.removeMessages(0);
this.isVisibilityScheduled = false;
}
public final void destroy() {
clear();
ViewTreeObserver viewTreeObserver = this.weakViewTreeObserver.get();
if (viewTreeObserver != null && viewTreeObserver.isAlive()) {
viewTreeObserver.removeOnPreDrawListener(this.onPreDrawListener);
}
this.weakViewTreeObserver.clear();
}
private final View getTopView(Context context, View view) {
View findViewById = context instanceof Activity ? ((Activity) context).getWindow().getDecorView().findViewById(R.id.content) : null;
if (findViewById != null || view == null) {
return findViewById;
}
if (!ViewCompat.isAttachedToWindow(view)) {
Logger.Companion companion = Logger.Companion;
String TAG2 = TAG;
Intrinsics.checkNotNullExpressionValue(TAG2, "TAG");
companion.w(TAG2, "Trying to call View#rootView() on an unattached View.");
}
View rootView = view.getRootView();
if (rootView != null) {
findViewById = rootView.findViewById(R.id.content);
}
return findViewById == null ? rootView : findViewById;
}
/* JADX INFO: Access modifiers changed from: private */
public final void scheduleVisibilityCheck() {
if (this.isVisibilityScheduled) {
return;
}
this.isVisibilityScheduled = true;
this.visibilityHandler.postDelayed(this.visibilityRunnable, 100L);
}
@VisibleForTesting
public final class VisibilityRunnable implements Runnable {
private final ArrayList<View> visibleViews = new ArrayList<>();
public VisibilityRunnable() {
}
@Override // java.lang.Runnable
public void run() {
ImpressionListener impressionListener;
ImpressionTracker.this.isVisibilityScheduled = false;
for (Map.Entry entry : ImpressionTracker.this.trackedViews.entrySet()) {
View view = (View) entry.getKey();
if (ImpressionTracker.this.isVisible(view, ((TrackingInfo) entry.getValue()).getMinViewablePercent())) {
this.visibleViews.add(view);
}
}
Iterator<View> it = this.visibleViews.iterator();
while (it.hasNext()) {
View view2 = it.next();
TrackingInfo trackingInfo = (TrackingInfo) ImpressionTracker.this.trackedViews.get(view2);
if (trackingInfo != null && (impressionListener = trackingInfo.getImpressionListener()) != null) {
impressionListener.onImpression(view2);
}
ImpressionTracker impressionTracker = ImpressionTracker.this;
Intrinsics.checkNotNullExpressionValue(view2, "view");
impressionTracker.removeView(view2);
}
this.visibleViews.clear();
if (!(!ImpressionTracker.this.trackedViews.isEmpty()) || ImpressionTracker.this.setViewTreeObserverSucceed) {
return;
}
ImpressionTracker.this.scheduleVisibilityCheck();
}
}
/* JADX INFO: Access modifiers changed from: private */
public final boolean isVisible(View view, int i) {
if (view == null || view.getVisibility() != 0 || view.getParent() == null) {
return false;
}
ViewParent parent = view.getParent();
while (parent instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) parent;
if (viewGroup.getVisibility() != 0) {
Logger.Companion.w("ImpressionTracker", "Parent visibility is not visible: " + parent);
return false;
}
parent = viewGroup.getParent();
}
if (!view.getGlobalVisibleRect(this.clipRect)) {
return false;
}
long height = view.getHeight() * view.getWidth();
return height > 0 && ((long) 100) * (this.clipRect.height() * this.clipRect.width()) >= ((long) i) * height;
}
public static final class Companion {
public /* synthetic */ Companion(DefaultConstructorMarker defaultConstructorMarker) {
this();
}
private Companion() {
}
}
/* JADX INFO: Access modifiers changed from: private */
/* renamed from: _init_$lambda-0, reason: not valid java name */
public static final boolean m3859_init_$lambda0(ImpressionTracker this$0) {
Intrinsics.checkNotNullParameter(this$0, "this$0");
this$0.scheduleVisibilityCheck();
return true;
}
}