CrackMe.apk
Download file
package androidx.fragment.app;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.os.CancellationSignal;
import androidx.core.view.ViewCompat;
import androidx.fragment.R;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
abstract class SpecialEffectsController {
private final ViewGroup mContainer;
boolean mIsContainerPostponed = false;
boolean mOperationDirectionIsPop = false;
final ArrayList<Operation> mPendingOperations = new ArrayList<>();
final ArrayList<Operation> mRunningOperations = new ArrayList<>();
/* access modifiers changed from: package-private */
public abstract void executeOperations(List<Operation> list, boolean z);
static SpecialEffectsController getOrCreateController(ViewGroup viewGroup, FragmentManager fragmentManager) {
return getOrCreateController(viewGroup, fragmentManager.getSpecialEffectsControllerFactory());
}
static SpecialEffectsController getOrCreateController(ViewGroup viewGroup, SpecialEffectsControllerFactory specialEffectsControllerFactory) {
Object tag = viewGroup.getTag(R.id.special_effects_controller_view_tag);
if (tag instanceof SpecialEffectsController) {
return (SpecialEffectsController) tag;
}
SpecialEffectsController createController = specialEffectsControllerFactory.createController(viewGroup);
viewGroup.setTag(R.id.special_effects_controller_view_tag, createController);
return createController;
}
SpecialEffectsController(ViewGroup viewGroup) {
this.mContainer = viewGroup;
}
public ViewGroup getContainer() {
return this.mContainer;
}
/* access modifiers changed from: package-private */
public Operation.LifecycleImpact getAwaitingCompletionLifecycleImpact(FragmentStateManager fragmentStateManager) {
Operation findPendingOperation = findPendingOperation(fragmentStateManager.getFragment());
Operation.LifecycleImpact lifecycleImpact = findPendingOperation != null ? findPendingOperation.getLifecycleImpact() : null;
Operation findRunningOperation = findRunningOperation(fragmentStateManager.getFragment());
return (findRunningOperation == null || !(lifecycleImpact == null || lifecycleImpact == Operation.LifecycleImpact.NONE)) ? lifecycleImpact : findRunningOperation.getLifecycleImpact();
}
private Operation findPendingOperation(Fragment fragment) {
Iterator<Operation> it = this.mPendingOperations.iterator();
while (it.hasNext()) {
Operation next = it.next();
if (next.getFragment().equals(fragment) && !next.isCanceled()) {
return next;
}
}
return null;
}
private Operation findRunningOperation(Fragment fragment) {
Iterator<Operation> it = this.mRunningOperations.iterator();
while (it.hasNext()) {
Operation next = it.next();
if (next.getFragment().equals(fragment) && !next.isCanceled()) {
return next;
}
}
return null;
}
/* access modifiers changed from: package-private */
public void enqueueAdd(Operation.State state, FragmentStateManager fragmentStateManager) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Enqueuing add operation for fragment " + fragmentStateManager.getFragment());
}
enqueue(state, Operation.LifecycleImpact.ADDING, fragmentStateManager);
}
/* access modifiers changed from: package-private */
public void enqueueShow(FragmentStateManager fragmentStateManager) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Enqueuing show operation for fragment " + fragmentStateManager.getFragment());
}
enqueue(Operation.State.VISIBLE, Operation.LifecycleImpact.NONE, fragmentStateManager);
}
/* access modifiers changed from: package-private */
public void enqueueHide(FragmentStateManager fragmentStateManager) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Enqueuing hide operation for fragment " + fragmentStateManager.getFragment());
}
enqueue(Operation.State.GONE, Operation.LifecycleImpact.NONE, fragmentStateManager);
}
/* access modifiers changed from: package-private */
public void enqueueRemove(FragmentStateManager fragmentStateManager) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Enqueuing remove operation for fragment " + fragmentStateManager.getFragment());
}
enqueue(Operation.State.REMOVED, Operation.LifecycleImpact.REMOVING, fragmentStateManager);
}
private void enqueue(Operation.State state, Operation.LifecycleImpact lifecycleImpact, FragmentStateManager fragmentStateManager) {
synchronized (this.mPendingOperations) {
CancellationSignal cancellationSignal = new CancellationSignal();
Operation findPendingOperation = findPendingOperation(fragmentStateManager.getFragment());
if (findPendingOperation != null) {
findPendingOperation.mergeWith(state, lifecycleImpact);
return;
}
final FragmentStateManagerOperation fragmentStateManagerOperation = new FragmentStateManagerOperation(state, lifecycleImpact, fragmentStateManager, cancellationSignal);
this.mPendingOperations.add(fragmentStateManagerOperation);
fragmentStateManagerOperation.addCompletionListener(new Runnable() {
public void run() {
if (SpecialEffectsController.this.mPendingOperations.contains(fragmentStateManagerOperation)) {
fragmentStateManagerOperation.getFinalState().applyState(fragmentStateManagerOperation.getFragment().mView);
}
}
});
fragmentStateManagerOperation.addCompletionListener(new Runnable() {
public void run() {
SpecialEffectsController.this.mPendingOperations.remove(fragmentStateManagerOperation);
SpecialEffectsController.this.mRunningOperations.remove(fragmentStateManagerOperation);
}
});
}
}
/* access modifiers changed from: package-private */
public void updateOperationDirection(boolean z) {
this.mOperationDirectionIsPop = z;
}
/* access modifiers changed from: package-private */
public void markPostponedState() {
synchronized (this.mPendingOperations) {
updateFinalState();
this.mIsContainerPostponed = false;
int size = this.mPendingOperations.size() - 1;
while (true) {
if (size < 0) {
break;
}
Operation operation = this.mPendingOperations.get(size);
Operation.State from = Operation.State.from(operation.getFragment().mView);
if (operation.getFinalState() == Operation.State.VISIBLE && from != Operation.State.VISIBLE) {
this.mIsContainerPostponed = operation.getFragment().isPostponed();
break;
}
size--;
}
}
}
/* access modifiers changed from: package-private */
public void forcePostponedExecutePendingOperations() {
if (this.mIsContainerPostponed) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Forcing postponed operations");
}
this.mIsContainerPostponed = false;
executePendingOperations();
}
}
/* access modifiers changed from: package-private */
public void executePendingOperations() {
if (!this.mIsContainerPostponed) {
if (!ViewCompat.isAttachedToWindow(this.mContainer)) {
forceCompleteAllOperations();
this.mOperationDirectionIsPop = false;
return;
}
synchronized (this.mPendingOperations) {
if (!this.mPendingOperations.isEmpty()) {
ArrayList arrayList = new ArrayList(this.mRunningOperations);
this.mRunningOperations.clear();
Iterator it = arrayList.iterator();
while (it.hasNext()) {
Operation operation = (Operation) it.next();
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Cancelling operation " + operation);
}
operation.cancel();
if (!operation.isComplete()) {
this.mRunningOperations.add(operation);
}
}
updateFinalState();
ArrayList arrayList2 = new ArrayList(this.mPendingOperations);
this.mPendingOperations.clear();
this.mRunningOperations.addAll(arrayList2);
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Executing pending operations");
}
Iterator it2 = arrayList2.iterator();
while (it2.hasNext()) {
((Operation) it2.next()).onStart();
}
executeOperations(arrayList2, this.mOperationDirectionIsPop);
this.mOperationDirectionIsPop = false;
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Finished executing pending operations");
}
}
}
}
}
/* access modifiers changed from: package-private */
public void forceCompleteAllOperations() {
String str;
String str2;
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Forcing all operations to complete");
}
boolean isAttachedToWindow = ViewCompat.isAttachedToWindow(this.mContainer);
synchronized (this.mPendingOperations) {
updateFinalState();
Iterator<Operation> it = this.mPendingOperations.iterator();
while (it.hasNext()) {
it.next().onStart();
}
Iterator it2 = new ArrayList(this.mRunningOperations).iterator();
while (it2.hasNext()) {
Operation operation = (Operation) it2.next();
if (FragmentManager.isLoggingEnabled(2)) {
StringBuilder sb = new StringBuilder();
sb.append("SpecialEffectsController: ");
if (isAttachedToWindow) {
str2 = "";
} else {
str2 = "Container " + this.mContainer + " is not attached to window. ";
}
sb.append(str2);
sb.append("Cancelling running operation ");
sb.append(operation);
Log.v(FragmentManager.TAG, sb.toString());
}
operation.cancel();
}
Iterator it3 = new ArrayList(this.mPendingOperations).iterator();
while (it3.hasNext()) {
Operation operation2 = (Operation) it3.next();
if (FragmentManager.isLoggingEnabled(2)) {
StringBuilder sb2 = new StringBuilder();
sb2.append("SpecialEffectsController: ");
if (isAttachedToWindow) {
str = "";
} else {
str = "Container " + this.mContainer + " is not attached to window. ";
}
sb2.append(str);
sb2.append("Cancelling pending operation ");
sb2.append(operation2);
Log.v(FragmentManager.TAG, sb2.toString());
}
operation2.cancel();
}
}
}
private void updateFinalState() {
Iterator<Operation> it = this.mPendingOperations.iterator();
while (it.hasNext()) {
Operation next = it.next();
if (next.getLifecycleImpact() == Operation.LifecycleImpact.ADDING) {
next.mergeWith(Operation.State.from(next.getFragment().requireView().getVisibility()), Operation.LifecycleImpact.NONE);
}
}
}
static class Operation {
private final List<Runnable> mCompletionListeners = new ArrayList();
private State mFinalState;
private final Fragment mFragment;
private boolean mIsCanceled = false;
private boolean mIsComplete = false;
private LifecycleImpact mLifecycleImpact;
private final HashSet<CancellationSignal> mSpecialEffectsSignals = new HashSet<>();
enum LifecycleImpact {
NONE,
ADDING,
REMOVING
}
/* access modifiers changed from: package-private */
public void onStart() {
}
enum State {
REMOVED,
VISIBLE,
GONE,
INVISIBLE;
static State from(View view) {
if (view.getAlpha() == 0.0f && view.getVisibility() == 0) {
return INVISIBLE;
}
return from(view.getVisibility());
}
static State from(int i) {
if (i == 0) {
return VISIBLE;
}
if (i == 4) {
return INVISIBLE;
}
if (i == 8) {
return GONE;
}
throw new IllegalArgumentException("Unknown visibility " + i);
}
/* access modifiers changed from: package-private */
public void applyState(View view) {
int i = AnonymousClass3.$SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$State[ordinal()];
if (i == 1) {
ViewGroup viewGroup = (ViewGroup) view.getParent();
if (viewGroup != null) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Removing view " + view + " from container " + viewGroup);
}
viewGroup.removeView(view);
}
} else if (i == 2) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Setting view " + view + " to VISIBLE");
}
view.setVisibility(0);
} else if (i == 3) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Setting view " + view + " to GONE");
}
view.setVisibility(8);
} else if (i == 4) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: Setting view " + view + " to INVISIBLE");
}
view.setVisibility(4);
}
}
}
Operation(State state, LifecycleImpact lifecycleImpact, Fragment fragment, CancellationSignal cancellationSignal) {
this.mFinalState = state;
this.mLifecycleImpact = lifecycleImpact;
this.mFragment = fragment;
cancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() {
public void onCancel() {
Operation.this.cancel();
}
});
}
public State getFinalState() {
return this.mFinalState;
}
/* access modifiers changed from: package-private */
public LifecycleImpact getLifecycleImpact() {
return this.mLifecycleImpact;
}
public final Fragment getFragment() {
return this.mFragment;
}
/* access modifiers changed from: package-private */
public final boolean isCanceled() {
return this.mIsCanceled;
}
public String toString() {
return "Operation " + "{" + Integer.toHexString(System.identityHashCode(this)) + "} " + "{" + "mFinalState = " + this.mFinalState + "} " + "{" + "mLifecycleImpact = " + this.mLifecycleImpact + "} " + "{" + "mFragment = " + this.mFragment + "}";
}
/* access modifiers changed from: package-private */
public final void cancel() {
if (!isCanceled()) {
this.mIsCanceled = true;
if (this.mSpecialEffectsSignals.isEmpty()) {
complete();
return;
}
Iterator it = new ArrayList(this.mSpecialEffectsSignals).iterator();
while (it.hasNext()) {
((CancellationSignal) it.next()).cancel();
}
}
}
/* access modifiers changed from: package-private */
public final void mergeWith(State state, LifecycleImpact lifecycleImpact) {
int i = AnonymousClass3.$SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$LifecycleImpact[lifecycleImpact.ordinal()];
if (i != 1) {
if (i == 2) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: For fragment " + this.mFragment + " mFinalState = " + this.mFinalState + " -> REMOVED. mLifecycleImpact = " + this.mLifecycleImpact + " to REMOVING.");
}
this.mFinalState = State.REMOVED;
this.mLifecycleImpact = LifecycleImpact.REMOVING;
} else if (i == 3 && this.mFinalState != State.REMOVED) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: For fragment " + this.mFragment + " mFinalState = " + this.mFinalState + " -> " + state + ". ");
}
this.mFinalState = state;
}
} else if (this.mFinalState == State.REMOVED) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: For fragment " + this.mFragment + " mFinalState = REMOVED -> VISIBLE. mLifecycleImpact = " + this.mLifecycleImpact + " to ADDING.");
}
this.mFinalState = State.VISIBLE;
this.mLifecycleImpact = LifecycleImpact.ADDING;
}
}
/* access modifiers changed from: package-private */
public final void addCompletionListener(Runnable runnable) {
this.mCompletionListeners.add(runnable);
}
public final void markStartedSpecialEffect(CancellationSignal cancellationSignal) {
onStart();
this.mSpecialEffectsSignals.add(cancellationSignal);
}
public final void completeSpecialEffect(CancellationSignal cancellationSignal) {
if (this.mSpecialEffectsSignals.remove(cancellationSignal) && this.mSpecialEffectsSignals.isEmpty()) {
complete();
}
}
/* access modifiers changed from: package-private */
public final boolean isComplete() {
return this.mIsComplete;
}
public void complete() {
if (!this.mIsComplete) {
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "SpecialEffectsController: " + this + " has called complete.");
}
this.mIsComplete = true;
for (Runnable run : this.mCompletionListeners) {
run.run();
}
}
}
}
/* renamed from: androidx.fragment.app.SpecialEffectsController$3 reason: invalid class name */
static /* synthetic */ class AnonymousClass3 {
static final /* synthetic */ int[] $SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$LifecycleImpact;
static final /* synthetic */ int[] $SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$State;
/* JADX WARNING: Can't wrap try/catch for region: R(17:0|(2:1|2)|3|(2:5|6)|7|9|10|11|13|14|15|16|17|18|19|20|22) */
/* JADX WARNING: Can't wrap try/catch for region: R(19:0|1|2|3|5|6|7|9|10|11|13|14|15|16|17|18|19|20|22) */
/* JADX WARNING: Failed to process nested try/catch */
/* JADX WARNING: Missing exception handler attribute for start block: B:15:0x0039 */
/* JADX WARNING: Missing exception handler attribute for start block: B:17:0x0043 */
/* JADX WARNING: Missing exception handler attribute for start block: B:19:0x004d */
static {
/*
androidx.fragment.app.SpecialEffectsController$Operation$LifecycleImpact[] r0 = androidx.fragment.app.SpecialEffectsController.Operation.LifecycleImpact.values()
int r0 = r0.length
int[] r0 = new int[r0]
$SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$LifecycleImpact = r0
r1 = 1
androidx.fragment.app.SpecialEffectsController$Operation$LifecycleImpact r2 = androidx.fragment.app.SpecialEffectsController.Operation.LifecycleImpact.ADDING // Catch:{ NoSuchFieldError -> 0x0012 }
int r2 = r2.ordinal() // Catch:{ NoSuchFieldError -> 0x0012 }
r0[r2] = r1 // Catch:{ NoSuchFieldError -> 0x0012 }
L_0x0012:
r0 = 2
int[] r2 = $SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$LifecycleImpact // Catch:{ NoSuchFieldError -> 0x001d }
androidx.fragment.app.SpecialEffectsController$Operation$LifecycleImpact r3 = androidx.fragment.app.SpecialEffectsController.Operation.LifecycleImpact.REMOVING // Catch:{ NoSuchFieldError -> 0x001d }
int r3 = r3.ordinal() // Catch:{ NoSuchFieldError -> 0x001d }
r2[r3] = r0 // Catch:{ NoSuchFieldError -> 0x001d }
L_0x001d:
r2 = 3
int[] r3 = $SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$LifecycleImpact // Catch:{ NoSuchFieldError -> 0x0028 }
androidx.fragment.app.SpecialEffectsController$Operation$LifecycleImpact r4 = androidx.fragment.app.SpecialEffectsController.Operation.LifecycleImpact.NONE // Catch:{ NoSuchFieldError -> 0x0028 }
int r4 = r4.ordinal() // Catch:{ NoSuchFieldError -> 0x0028 }
r3[r4] = r2 // Catch:{ NoSuchFieldError -> 0x0028 }
L_0x0028:
androidx.fragment.app.SpecialEffectsController$Operation$State[] r3 = androidx.fragment.app.SpecialEffectsController.Operation.State.values()
int r3 = r3.length
int[] r3 = new int[r3]
$SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$State = r3
androidx.fragment.app.SpecialEffectsController$Operation$State r4 = androidx.fragment.app.SpecialEffectsController.Operation.State.REMOVED // Catch:{ NoSuchFieldError -> 0x0039 }
int r4 = r4.ordinal() // Catch:{ NoSuchFieldError -> 0x0039 }
r3[r4] = r1 // Catch:{ NoSuchFieldError -> 0x0039 }
L_0x0039:
int[] r1 = $SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$State // Catch:{ NoSuchFieldError -> 0x0043 }
androidx.fragment.app.SpecialEffectsController$Operation$State r3 = androidx.fragment.app.SpecialEffectsController.Operation.State.VISIBLE // Catch:{ NoSuchFieldError -> 0x0043 }
int r3 = r3.ordinal() // Catch:{ NoSuchFieldError -> 0x0043 }
r1[r3] = r0 // Catch:{ NoSuchFieldError -> 0x0043 }
L_0x0043:
int[] r0 = $SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$State // Catch:{ NoSuchFieldError -> 0x004d }
androidx.fragment.app.SpecialEffectsController$Operation$State r1 = androidx.fragment.app.SpecialEffectsController.Operation.State.GONE // Catch:{ NoSuchFieldError -> 0x004d }
int r1 = r1.ordinal() // Catch:{ NoSuchFieldError -> 0x004d }
r0[r1] = r2 // Catch:{ NoSuchFieldError -> 0x004d }
L_0x004d:
int[] r0 = $SwitchMap$androidx$fragment$app$SpecialEffectsController$Operation$State // Catch:{ NoSuchFieldError -> 0x0058 }
androidx.fragment.app.SpecialEffectsController$Operation$State r1 = androidx.fragment.app.SpecialEffectsController.Operation.State.INVISIBLE // Catch:{ NoSuchFieldError -> 0x0058 }
int r1 = r1.ordinal() // Catch:{ NoSuchFieldError -> 0x0058 }
r2 = 4
r0[r1] = r2 // Catch:{ NoSuchFieldError -> 0x0058 }
L_0x0058:
return
*/
throw new UnsupportedOperationException("Method not decompiled: androidx.fragment.app.SpecialEffectsController.AnonymousClass3.<clinit>():void");
}
}
private static class FragmentStateManagerOperation extends Operation {
private final FragmentStateManager mFragmentStateManager;
FragmentStateManagerOperation(Operation.State state, Operation.LifecycleImpact lifecycleImpact, FragmentStateManager fragmentStateManager, CancellationSignal cancellationSignal) {
super(state, lifecycleImpact, fragmentStateManager.getFragment(), cancellationSignal);
this.mFragmentStateManager = fragmentStateManager;
}
/* access modifiers changed from: package-private */
public void onStart() {
if (getLifecycleImpact() == Operation.LifecycleImpact.ADDING) {
Fragment fragment = this.mFragmentStateManager.getFragment();
View findFocus = fragment.mView.findFocus();
if (findFocus != null) {
fragment.setFocusedView(findFocus);
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "requestFocus: Saved focused view " + findFocus + " for Fragment " + fragment);
}
}
View requireView = getFragment().requireView();
if (requireView.getParent() == null) {
this.mFragmentStateManager.addViewToContainer();
requireView.setAlpha(0.0f);
}
if (requireView.getAlpha() == 0.0f && requireView.getVisibility() == 0) {
requireView.setVisibility(4);
}
requireView.setAlpha(fragment.getPostOnViewCreatedAlpha());
} else if (getLifecycleImpact() == Operation.LifecycleImpact.REMOVING) {
Fragment fragment2 = this.mFragmentStateManager.getFragment();
View requireView2 = fragment2.requireView();
if (FragmentManager.isLoggingEnabled(2)) {
Log.v(FragmentManager.TAG, "Clearing focus " + requireView2.findFocus() + " on view " + requireView2 + " for Fragment " + fragment2);
}
requireView2.clearFocus();
}
}
public void complete() {
super.complete();
this.mFragmentStateManager.moveToExpectedState();
}
}
}
Download file