discord-jadx/app/src/main/java/androidx/core/view/OneShotPreDrawListener.java

54 lines
1.9 KiB
Java

package androidx.core.view;
import android.view.View;
import android.view.ViewTreeObserver;
import androidx.annotation.NonNull;
import java.util.Objects;
public final class OneShotPreDrawListener implements ViewTreeObserver.OnPreDrawListener, View.OnAttachStateChangeListener {
private final Runnable mRunnable;
private final View mView;
private ViewTreeObserver mViewTreeObserver;
private OneShotPreDrawListener(View view, Runnable runnable) {
this.mView = view;
this.mViewTreeObserver = view.getViewTreeObserver();
this.mRunnable = runnable;
}
@NonNull
public static OneShotPreDrawListener add(@NonNull View view, @NonNull Runnable runnable) {
Objects.requireNonNull(view, "view == null");
Objects.requireNonNull(runnable, "runnable == null");
OneShotPreDrawListener oneShotPreDrawListener = new OneShotPreDrawListener(view, runnable);
view.getViewTreeObserver().addOnPreDrawListener(oneShotPreDrawListener);
view.addOnAttachStateChangeListener(oneShotPreDrawListener);
return oneShotPreDrawListener;
}
@Override // android.view.ViewTreeObserver.OnPreDrawListener
public boolean onPreDraw() {
removeListener();
this.mRunnable.run();
return true;
}
@Override // android.view.View.OnAttachStateChangeListener
public void onViewAttachedToWindow(View view) {
this.mViewTreeObserver = view.getViewTreeObserver();
}
@Override // android.view.View.OnAttachStateChangeListener
public void onViewDetachedFromWindow(View view) {
removeListener();
}
public void removeListener() {
if (this.mViewTreeObserver.isAlive()) {
this.mViewTreeObserver.removeOnPreDrawListener(this);
} else {
this.mView.getViewTreeObserver().removeOnPreDrawListener(this);
}
this.mView.removeOnAttachStateChangeListener(this);
}
}