Primer paso de la investigacion. Se aportan el .apk, las carpetas con el apk extraido y el apk descompilado. El archivo API_DOCUMENTATION.md es un archivo donde se anotaran los descubrimientos del funcionamiento de la API, y los .py son scripts para probar la funcionalidad de la API con los métodos que vayamos encontrando. Finalmente, los archivos .js son scripts de Frida para extraer informacion de la APP durante la ejecucion.

This commit is contained in:
2025-12-04 13:59:54 +01:00
parent f2fd1c3bf5
commit e0133d2ca2
10432 changed files with 1019085 additions and 1 deletions

View File

@@ -0,0 +1,374 @@
package androidx.recyclerview.widget;
import android.util.Log;
import android.view.View;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.WeakHashMap;
/* loaded from: classes.dex */
public abstract class I0 {
static final int FLAG_ADAPTER_FULLUPDATE = 1024;
static final int FLAG_ADAPTER_POSITION_UNKNOWN = 512;
static final int FLAG_APPEARED_IN_PRE_LAYOUT = 4096;
static final int FLAG_BOUNCED_FROM_HIDDEN_LIST = 8192;
static final int FLAG_BOUND = 1;
static final int FLAG_IGNORE = 128;
static final int FLAG_INVALID = 4;
static final int FLAG_MOVED = 2048;
static final int FLAG_NOT_RECYCLABLE = 16;
static final int FLAG_REMOVED = 8;
static final int FLAG_RETURNED_FROM_SCRAP = 32;
static final int FLAG_TMP_DETACHED = 256;
static final int FLAG_UPDATE = 2;
private static final List<Object> FULLUPDATE_PAYLOADS = Collections.EMPTY_LIST;
static final int PENDING_ACCESSIBILITY_STATE_NOT_SET = -1;
public final View itemView;
AbstractC0220h0 mBindingAdapter;
int mFlags;
WeakReference<RecyclerView> mNestedRecyclerView;
RecyclerView mOwnerRecyclerView;
int mPosition = -1;
int mOldPosition = -1;
long mItemId = -1;
int mItemViewType = -1;
int mPreLayoutPosition = -1;
I0 mShadowedHolder = null;
I0 mShadowingHolder = null;
List<Object> mPayloads = null;
List<Object> mUnmodifiedPayloads = null;
private int mIsRecyclableCount = 0;
y0 mScrapContainer = null;
boolean mInChangeScrap = false;
private int mWasImportantForAccessibilityBeforeHidden = 0;
int mPendingAccessibilityState = -1;
public I0(View view) {
if (view == null) {
throw new IllegalArgumentException("itemView may not be null");
}
this.itemView = view;
}
public void addChangePayload(Object obj) {
if (obj == null) {
addFlags(1024);
return;
}
if ((1024 & this.mFlags) == 0) {
if (this.mPayloads == null) {
ArrayList arrayList = new ArrayList();
this.mPayloads = arrayList;
this.mUnmodifiedPayloads = Collections.unmodifiableList(arrayList);
}
this.mPayloads.add(obj);
}
}
public void addFlags(int i) {
this.mFlags = i | this.mFlags;
}
public void clearOldPosition() {
this.mOldPosition = -1;
this.mPreLayoutPosition = -1;
}
public void clearPayload() {
List<Object> list = this.mPayloads;
if (list != null) {
list.clear();
}
this.mFlags &= -1025;
}
public void clearReturnedFromScrapFlag() {
this.mFlags &= -33;
}
public void clearTmpDetachFlag() {
this.mFlags &= -257;
}
public boolean doesTransientStatePreventRecycling() {
if ((this.mFlags & 16) != 0) {
return false;
}
View view = this.itemView;
WeakHashMap weakHashMap = O.X.f1226a;
return view.hasTransientState();
}
public void flagRemovedAndOffsetPosition(int i, int i4, boolean z3) {
addFlags(8);
offsetPosition(i4, z3);
this.mPosition = i;
}
public final int getAbsoluteAdapterPosition() {
RecyclerView recyclerView = this.mOwnerRecyclerView;
if (recyclerView == null) {
return -1;
}
return recyclerView.K(this);
}
@Deprecated
public final int getAdapterPosition() {
return getBindingAdapterPosition();
}
public final AbstractC0220h0 getBindingAdapter() {
return this.mBindingAdapter;
}
public final int getBindingAdapterPosition() {
RecyclerView recyclerView;
AbstractC0220h0 adapter;
int K3;
if (this.mBindingAdapter == null || (recyclerView = this.mOwnerRecyclerView) == null || (adapter = recyclerView.getAdapter()) == null || (K3 = this.mOwnerRecyclerView.K(this)) == -1) {
return -1;
}
return adapter.findRelativeAdapterPositionIn(this.mBindingAdapter, this, K3);
}
public final long getItemId() {
return this.mItemId;
}
public final int getItemViewType() {
return this.mItemViewType;
}
public final int getLayoutPosition() {
int i = this.mPreLayoutPosition;
return i == -1 ? this.mPosition : i;
}
public final int getOldPosition() {
return this.mOldPosition;
}
@Deprecated
public final int getPosition() {
int i = this.mPreLayoutPosition;
return i == -1 ? this.mPosition : i;
}
public List<Object> getUnmodifiedPayloads() {
if ((this.mFlags & 1024) != 0) {
return FULLUPDATE_PAYLOADS;
}
List<Object> list = this.mPayloads;
return (list == null || list.size() == 0) ? FULLUPDATE_PAYLOADS : this.mUnmodifiedPayloads;
}
public boolean hasAnyOfTheFlags(int i) {
return (this.mFlags & i) != 0;
}
public boolean isAdapterPositionUnknown() {
return (this.mFlags & 512) != 0 || isInvalid();
}
public boolean isAttachedToTransitionOverlay() {
return (this.itemView.getParent() == null || this.itemView.getParent() == this.mOwnerRecyclerView) ? false : true;
}
public boolean isBound() {
return (this.mFlags & 1) != 0;
}
public boolean isInvalid() {
return (this.mFlags & 4) != 0;
}
public final boolean isRecyclable() {
if ((this.mFlags & 16) != 0) {
return false;
}
View view = this.itemView;
WeakHashMap weakHashMap = O.X.f1226a;
return !view.hasTransientState();
}
public boolean isRemoved() {
return (this.mFlags & 8) != 0;
}
public boolean isScrap() {
return this.mScrapContainer != null;
}
public boolean isTmpDetached() {
return (this.mFlags & FLAG_TMP_DETACHED) != 0;
}
public boolean isUpdated() {
return (this.mFlags & 2) != 0;
}
public boolean needsUpdate() {
return (this.mFlags & 2) != 0;
}
public void offsetPosition(int i, boolean z3) {
if (this.mOldPosition == -1) {
this.mOldPosition = this.mPosition;
}
if (this.mPreLayoutPosition == -1) {
this.mPreLayoutPosition = this.mPosition;
}
if (z3) {
this.mPreLayoutPosition += i;
}
this.mPosition += i;
if (this.itemView.getLayoutParams() != null) {
((C0239r0) this.itemView.getLayoutParams()).f3899c = true;
}
}
public void onEnteredHiddenState(RecyclerView recyclerView) {
int i = this.mPendingAccessibilityState;
if (i != -1) {
this.mWasImportantForAccessibilityBeforeHidden = i;
} else {
View view = this.itemView;
WeakHashMap weakHashMap = O.X.f1226a;
this.mWasImportantForAccessibilityBeforeHidden = view.getImportantForAccessibility();
}
if (recyclerView.R()) {
this.mPendingAccessibilityState = 4;
recyclerView.f3710u0.add(this);
} else {
View view2 = this.itemView;
WeakHashMap weakHashMap2 = O.X.f1226a;
view2.setImportantForAccessibility(4);
}
}
public void onLeftHiddenState(RecyclerView recyclerView) {
int i = this.mWasImportantForAccessibilityBeforeHidden;
if (recyclerView.R()) {
this.mPendingAccessibilityState = i;
recyclerView.f3710u0.add(this);
} else {
View view = this.itemView;
WeakHashMap weakHashMap = O.X.f1226a;
view.setImportantForAccessibility(i);
}
this.mWasImportantForAccessibilityBeforeHidden = 0;
}
public void resetInternal() {
if (RecyclerView.A0 && isTmpDetached()) {
throw new IllegalStateException("Attempting to reset temp-detached ViewHolder: " + this + ". ViewHolders should be fully detached before resetting.");
}
this.mFlags = 0;
this.mPosition = -1;
this.mOldPosition = -1;
this.mItemId = -1L;
this.mPreLayoutPosition = -1;
this.mIsRecyclableCount = 0;
this.mShadowedHolder = null;
this.mShadowingHolder = null;
clearPayload();
this.mWasImportantForAccessibilityBeforeHidden = 0;
this.mPendingAccessibilityState = -1;
RecyclerView.m(this);
}
public void saveOldPosition() {
if (this.mOldPosition == -1) {
this.mOldPosition = this.mPosition;
}
}
public void setFlags(int i, int i4) {
this.mFlags = (i & i4) | (this.mFlags & (~i4));
}
public final void setIsRecyclable(boolean z3) {
int i = this.mIsRecyclableCount;
int i4 = z3 ? i - 1 : i + 1;
this.mIsRecyclableCount = i4;
if (i4 < 0) {
this.mIsRecyclableCount = 0;
if (RecyclerView.A0) {
throw new RuntimeException("isRecyclable decremented below 0: unmatched pair of setIsRecyable() calls for " + this);
}
Log.e("View", "isRecyclable decremented below 0: unmatched pair of setIsRecyable() calls for " + this);
} else if (!z3 && i4 == 1) {
this.mFlags |= 16;
} else if (z3 && i4 == 0) {
this.mFlags &= -17;
}
if (RecyclerView.f3642B0) {
Log.d("RecyclerView", "setIsRecyclable val:" + z3 + ":" + this);
}
}
public void setScrapContainer(y0 y0Var, boolean z3) {
this.mScrapContainer = y0Var;
this.mInChangeScrap = z3;
}
public boolean shouldBeKeptAsChild() {
return (this.mFlags & 16) != 0;
}
public boolean shouldIgnore() {
return (this.mFlags & 128) != 0;
}
public void stopIgnoring() {
this.mFlags &= -129;
}
public String toString() {
StringBuilder sb = new StringBuilder((getClass().isAnonymousClass() ? "ViewHolder" : getClass().getSimpleName()) + "{" + Integer.toHexString(hashCode()) + " position=" + this.mPosition + " id=" + this.mItemId + ", oldPos=" + this.mOldPosition + ", pLpos:" + this.mPreLayoutPosition);
if (isScrap()) {
sb.append(" scrap ");
sb.append(this.mInChangeScrap ? "[changeScrap]" : "[attachedScrap]");
}
if (isInvalid()) {
sb.append(" invalid");
}
if (!isBound()) {
sb.append(" unbound");
}
if (needsUpdate()) {
sb.append(" update");
}
if (isRemoved()) {
sb.append(" removed");
}
if (shouldIgnore()) {
sb.append(" ignored");
}
if (isTmpDetached()) {
sb.append(" tmpDetached");
}
if (!isRecyclable()) {
sb.append(" not recyclable(" + this.mIsRecyclableCount + ")");
}
if (isAdapterPositionUnknown()) {
sb.append(" undefined adapter position");
}
if (this.itemView.getParent() == null) {
sb.append(" no parent");
}
sb.append("}");
return sb.toString();
}
public void unScrap() {
this.mScrapContainer.l(this);
}
public boolean wasReturnedFromScrap() {
return (this.mFlags & 32) != 0;
}
}