CrackMe.apk
Download file
package androidx.fragment.app;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.Log;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Lifecycle;
import java.util.ArrayList;
import java.util.Map;
final class BackStackRecordState implements Parcelable {
public static final Parcelable.Creator<BackStackRecordState> CREATOR = new Parcelable.Creator<BackStackRecordState>() {
public BackStackRecordState createFromParcel(Parcel parcel) {
return new BackStackRecordState(parcel);
}
public BackStackRecordState[] newArray(int i) {
return new BackStackRecordState[i];
}
};
private static final String TAG = "FragmentManager";
final int mBreadCrumbShortTitleRes;
final CharSequence mBreadCrumbShortTitleText;
final int mBreadCrumbTitleRes;
final CharSequence mBreadCrumbTitleText;
final int[] mCurrentMaxLifecycleStates;
final ArrayList<String> mFragmentWhos;
final int mIndex;
final String mName;
final int[] mOldMaxLifecycleStates;
final int[] mOps;
final boolean mReorderingAllowed;
final ArrayList<String> mSharedElementSourceNames;
final ArrayList<String> mSharedElementTargetNames;
final int mTransition;
public int describeContents() {
return 0;
}
BackStackRecordState(BackStackRecord backStackRecord) {
int size = backStackRecord.mOps.size();
this.mOps = new int[(size * 6)];
if (backStackRecord.mAddToBackStack) {
this.mFragmentWhos = new ArrayList<>(size);
this.mOldMaxLifecycleStates = new int[size];
this.mCurrentMaxLifecycleStates = new int[size];
int i = 0;
int i2 = 0;
while (i < size) {
FragmentTransaction.Op op = (FragmentTransaction.Op) backStackRecord.mOps.get(i);
int i3 = i2 + 1;
this.mOps[i2] = op.mCmd;
this.mFragmentWhos.add(op.mFragment != null ? op.mFragment.mWho : null);
int i4 = i3 + 1;
this.mOps[i3] = op.mFromExpandedOp;
int i5 = i4 + 1;
this.mOps[i4] = op.mEnterAnim;
int i6 = i5 + 1;
this.mOps[i5] = op.mExitAnim;
int i7 = i6 + 1;
this.mOps[i6] = op.mPopEnterAnim;
this.mOps[i7] = op.mPopExitAnim;
this.mOldMaxLifecycleStates[i] = op.mOldMaxState.ordinal();
this.mCurrentMaxLifecycleStates[i] = op.mCurrentMaxState.ordinal();
i++;
i2 = i7 + 1;
}
this.mTransition = backStackRecord.mTransition;
this.mName = backStackRecord.mName;
this.mIndex = backStackRecord.mIndex;
this.mBreadCrumbTitleRes = backStackRecord.mBreadCrumbTitleRes;
this.mBreadCrumbTitleText = backStackRecord.mBreadCrumbTitleText;
this.mBreadCrumbShortTitleRes = backStackRecord.mBreadCrumbShortTitleRes;
this.mBreadCrumbShortTitleText = backStackRecord.mBreadCrumbShortTitleText;
this.mSharedElementSourceNames = backStackRecord.mSharedElementSourceNames;
this.mSharedElementTargetNames = backStackRecord.mSharedElementTargetNames;
this.mReorderingAllowed = backStackRecord.mReorderingAllowed;
return;
}
throw new IllegalStateException("Not on back stack");
}
BackStackRecordState(Parcel parcel) {
this.mOps = parcel.createIntArray();
this.mFragmentWhos = parcel.createStringArrayList();
this.mOldMaxLifecycleStates = parcel.createIntArray();
this.mCurrentMaxLifecycleStates = parcel.createIntArray();
this.mTransition = parcel.readInt();
this.mName = parcel.readString();
this.mIndex = parcel.readInt();
this.mBreadCrumbTitleRes = parcel.readInt();
this.mBreadCrumbTitleText = (CharSequence) TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
this.mBreadCrumbShortTitleRes = parcel.readInt();
this.mBreadCrumbShortTitleText = (CharSequence) TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
this.mSharedElementSourceNames = parcel.createStringArrayList();
this.mSharedElementTargetNames = parcel.createStringArrayList();
this.mReorderingAllowed = parcel.readInt() != 0;
}
public BackStackRecord instantiate(FragmentManager fragmentManager) {
BackStackRecord backStackRecord = new BackStackRecord(fragmentManager);
fillInBackStackRecord(backStackRecord);
backStackRecord.mIndex = this.mIndex;
for (int i = 0; i < this.mFragmentWhos.size(); i++) {
String str = this.mFragmentWhos.get(i);
if (str != null) {
((FragmentTransaction.Op) backStackRecord.mOps.get(i)).mFragment = fragmentManager.findActiveFragment(str);
}
}
backStackRecord.bumpBackStackNesting(1);
return backStackRecord;
}
public BackStackRecord instantiate(FragmentManager fragmentManager, Map<String, Fragment> map) {
BackStackRecord backStackRecord = new BackStackRecord(fragmentManager);
fillInBackStackRecord(backStackRecord);
for (int i = 0; i < this.mFragmentWhos.size(); i++) {
String str = this.mFragmentWhos.get(i);
if (str != null) {
Fragment fragment = map.get(str);
if (fragment != null) {
((FragmentTransaction.Op) backStackRecord.mOps.get(i)).mFragment = fragment;
} else {
throw new IllegalStateException("Restoring FragmentTransaction " + this.mName + " failed due to missing saved state for Fragment (" + str + ")");
}
}
}
return backStackRecord;
}
private void fillInBackStackRecord(BackStackRecord backStackRecord) {
int i = 0;
int i2 = 0;
while (true) {
boolean z = true;
if (i < this.mOps.length) {
FragmentTransaction.Op op = new FragmentTransaction.Op();
int i3 = i + 1;
op.mCmd = this.mOps[i];
if (FragmentManager.isLoggingEnabled(2)) {
Log.v("FragmentManager", "Instantiate " + backStackRecord + " op #" + i2 + " base fragment #" + this.mOps[i3]);
}
op.mOldMaxState = Lifecycle.State.values()[this.mOldMaxLifecycleStates[i2]];
op.mCurrentMaxState = Lifecycle.State.values()[this.mCurrentMaxLifecycleStates[i2]];
int i4 = i3 + 1;
if (this.mOps[i3] == 0) {
z = false;
}
op.mFromExpandedOp = z;
int i5 = i4 + 1;
op.mEnterAnim = this.mOps[i4];
int i6 = i5 + 1;
op.mExitAnim = this.mOps[i5];
int i7 = i6 + 1;
op.mPopEnterAnim = this.mOps[i6];
op.mPopExitAnim = this.mOps[i7];
backStackRecord.mEnterAnim = op.mEnterAnim;
backStackRecord.mExitAnim = op.mExitAnim;
backStackRecord.mPopEnterAnim = op.mPopEnterAnim;
backStackRecord.mPopExitAnim = op.mPopExitAnim;
backStackRecord.addOp(op);
i2++;
i = i7 + 1;
} else {
backStackRecord.mTransition = this.mTransition;
backStackRecord.mName = this.mName;
backStackRecord.mAddToBackStack = true;
backStackRecord.mBreadCrumbTitleRes = this.mBreadCrumbTitleRes;
backStackRecord.mBreadCrumbTitleText = this.mBreadCrumbTitleText;
backStackRecord.mBreadCrumbShortTitleRes = this.mBreadCrumbShortTitleRes;
backStackRecord.mBreadCrumbShortTitleText = this.mBreadCrumbShortTitleText;
backStackRecord.mSharedElementSourceNames = this.mSharedElementSourceNames;
backStackRecord.mSharedElementTargetNames = this.mSharedElementTargetNames;
backStackRecord.mReorderingAllowed = this.mReorderingAllowed;
return;
}
}
}
public void writeToParcel(Parcel parcel, int i) {
parcel.writeIntArray(this.mOps);
parcel.writeStringList(this.mFragmentWhos);
parcel.writeIntArray(this.mOldMaxLifecycleStates);
parcel.writeIntArray(this.mCurrentMaxLifecycleStates);
parcel.writeInt(this.mTransition);
parcel.writeString(this.mName);
parcel.writeInt(this.mIndex);
parcel.writeInt(this.mBreadCrumbTitleRes);
TextUtils.writeToParcel(this.mBreadCrumbTitleText, parcel, 0);
parcel.writeInt(this.mBreadCrumbShortTitleRes);
TextUtils.writeToParcel(this.mBreadCrumbShortTitleText, parcel, 0);
parcel.writeStringList(this.mSharedElementSourceNames);
parcel.writeStringList(this.mSharedElementTargetNames);
parcel.writeInt(this.mReorderingAllowed ? 1 : 0);
}
}
Download file