655 lines
21 KiB
Java
655 lines
21 KiB
Java
package androidx.fragment.app;
|
|
|
|
import android.util.Log;
|
|
import androidx.core.util.LogWriter;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.fragment.app.FragmentManager;
|
|
import androidx.fragment.app.FragmentManagerImpl;
|
|
import com.ubtrobot.jimu.robotapi.PeripheralType;
|
|
import java.io.FileDescriptor;
|
|
import java.io.PrintWriter;
|
|
import java.lang.reflect.Modifier;
|
|
import java.util.ArrayList;
|
|
|
|
/* loaded from: classes.dex */
|
|
final class BackStackRecord extends FragmentTransaction implements FragmentManager.BackStackEntry, FragmentManagerImpl.OpGenerator {
|
|
final FragmentManagerImpl a;
|
|
int c;
|
|
int d;
|
|
int e;
|
|
int f;
|
|
int g;
|
|
int h;
|
|
boolean i;
|
|
String k;
|
|
boolean l;
|
|
int n;
|
|
CharSequence o;
|
|
int p;
|
|
CharSequence q;
|
|
ArrayList<String> r;
|
|
ArrayList<String> s;
|
|
ArrayList<Runnable> u;
|
|
ArrayList<Op> b = new ArrayList<>();
|
|
boolean j = true;
|
|
int m = -1;
|
|
boolean t = false;
|
|
|
|
static final class Op {
|
|
int a;
|
|
Fragment b;
|
|
int c;
|
|
int d;
|
|
int e;
|
|
int f;
|
|
|
|
Op() {
|
|
}
|
|
|
|
Op(int i, Fragment fragment) {
|
|
this.a = i;
|
|
this.b = fragment;
|
|
}
|
|
}
|
|
|
|
public BackStackRecord(FragmentManagerImpl fragmentManagerImpl) {
|
|
this.a = fragmentManagerImpl;
|
|
}
|
|
|
|
public void a(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr) {
|
|
a(str, printWriter, true);
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction b(int i, Fragment fragment) {
|
|
b(i, fragment, null);
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction c(Fragment fragment) {
|
|
a(new Op(4, fragment));
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction d(Fragment fragment) {
|
|
a(new Op(3, fragment));
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction e(Fragment fragment) {
|
|
a(new Op(5, fragment));
|
|
return this;
|
|
}
|
|
|
|
public String f() {
|
|
return this.k;
|
|
}
|
|
|
|
boolean g() {
|
|
for (int i = 0; i < this.b.size(); i++) {
|
|
if (b(this.b.get(i))) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void h() {
|
|
ArrayList<Runnable> arrayList = this.u;
|
|
if (arrayList != null) {
|
|
int size = arrayList.size();
|
|
for (int i = 0; i < size; i++) {
|
|
this.u.get(i).run();
|
|
}
|
|
this.u = null;
|
|
}
|
|
}
|
|
|
|
public String toString() {
|
|
StringBuilder sb = new StringBuilder(PeripheralType.SERVO);
|
|
sb.append("BackStackEntry{");
|
|
sb.append(Integer.toHexString(System.identityHashCode(this)));
|
|
if (this.m >= 0) {
|
|
sb.append(" #");
|
|
sb.append(this.m);
|
|
}
|
|
if (this.k != null) {
|
|
sb.append(" ");
|
|
sb.append(this.k);
|
|
}
|
|
sb.append("}");
|
|
return sb.toString();
|
|
}
|
|
|
|
public void a(String str, PrintWriter printWriter, boolean z) {
|
|
String str2;
|
|
if (z) {
|
|
printWriter.print(str);
|
|
printWriter.print("mName=");
|
|
printWriter.print(this.k);
|
|
printWriter.print(" mIndex=");
|
|
printWriter.print(this.m);
|
|
printWriter.print(" mCommitted=");
|
|
printWriter.println(this.l);
|
|
if (this.g != 0) {
|
|
printWriter.print(str);
|
|
printWriter.print("mTransition=#");
|
|
printWriter.print(Integer.toHexString(this.g));
|
|
printWriter.print(" mTransitionStyle=#");
|
|
printWriter.println(Integer.toHexString(this.h));
|
|
}
|
|
if (this.c != 0 || this.d != 0) {
|
|
printWriter.print(str);
|
|
printWriter.print("mEnterAnim=#");
|
|
printWriter.print(Integer.toHexString(this.c));
|
|
printWriter.print(" mExitAnim=#");
|
|
printWriter.println(Integer.toHexString(this.d));
|
|
}
|
|
if (this.e != 0 || this.f != 0) {
|
|
printWriter.print(str);
|
|
printWriter.print("mPopEnterAnim=#");
|
|
printWriter.print(Integer.toHexString(this.e));
|
|
printWriter.print(" mPopExitAnim=#");
|
|
printWriter.println(Integer.toHexString(this.f));
|
|
}
|
|
if (this.n != 0 || this.o != null) {
|
|
printWriter.print(str);
|
|
printWriter.print("mBreadCrumbTitleRes=#");
|
|
printWriter.print(Integer.toHexString(this.n));
|
|
printWriter.print(" mBreadCrumbTitleText=");
|
|
printWriter.println(this.o);
|
|
}
|
|
if (this.p != 0 || this.q != null) {
|
|
printWriter.print(str);
|
|
printWriter.print("mBreadCrumbShortTitleRes=#");
|
|
printWriter.print(Integer.toHexString(this.p));
|
|
printWriter.print(" mBreadCrumbShortTitleText=");
|
|
printWriter.println(this.q);
|
|
}
|
|
}
|
|
if (this.b.isEmpty()) {
|
|
return;
|
|
}
|
|
printWriter.print(str);
|
|
printWriter.println("Operations:");
|
|
String str3 = str + " ";
|
|
int size = this.b.size();
|
|
for (int i = 0; i < size; i++) {
|
|
Op op = this.b.get(i);
|
|
switch (op.a) {
|
|
case 0:
|
|
str2 = "NULL";
|
|
break;
|
|
case 1:
|
|
str2 = "ADD";
|
|
break;
|
|
case 2:
|
|
str2 = "REPLACE";
|
|
break;
|
|
case 3:
|
|
str2 = "REMOVE";
|
|
break;
|
|
case 4:
|
|
str2 = "HIDE";
|
|
break;
|
|
case 5:
|
|
str2 = "SHOW";
|
|
break;
|
|
case 6:
|
|
str2 = "DETACH";
|
|
break;
|
|
case 7:
|
|
str2 = "ATTACH";
|
|
break;
|
|
case 8:
|
|
str2 = "SET_PRIMARY_NAV";
|
|
break;
|
|
case 9:
|
|
str2 = "UNSET_PRIMARY_NAV";
|
|
break;
|
|
default:
|
|
str2 = "cmd=" + op.a;
|
|
break;
|
|
}
|
|
printWriter.print(str);
|
|
printWriter.print(" Op #");
|
|
printWriter.print(i);
|
|
printWriter.print(": ");
|
|
printWriter.print(str2);
|
|
printWriter.print(" ");
|
|
printWriter.println(op.b);
|
|
if (z) {
|
|
if (op.c != 0 || op.d != 0) {
|
|
printWriter.print(str);
|
|
printWriter.print("enterAnim=#");
|
|
printWriter.print(Integer.toHexString(op.c));
|
|
printWriter.print(" exitAnim=#");
|
|
printWriter.println(Integer.toHexString(op.d));
|
|
}
|
|
if (op.e != 0 || op.f != 0) {
|
|
printWriter.print(str);
|
|
printWriter.print("popEnterAnim=#");
|
|
printWriter.print(Integer.toHexString(op.e));
|
|
printWriter.print(" popExitAnim=#");
|
|
printWriter.println(Integer.toHexString(op.f));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction b(int i, Fragment fragment, String str) {
|
|
if (i == 0) {
|
|
throw new IllegalArgumentException("Must use non-zero containerViewId");
|
|
}
|
|
a(i, fragment, str, 2);
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public void c() {
|
|
d();
|
|
this.a.b((FragmentManagerImpl.OpGenerator) this, true);
|
|
}
|
|
|
|
public FragmentTransaction d() {
|
|
if (this.i) {
|
|
throw new IllegalStateException("This transaction is already being added to the back stack");
|
|
}
|
|
this.j = false;
|
|
return this;
|
|
}
|
|
|
|
void e() {
|
|
int size = this.b.size();
|
|
for (int i = 0; i < size; i++) {
|
|
Op op = this.b.get(i);
|
|
Fragment fragment = op.b;
|
|
if (fragment != null) {
|
|
fragment.setNextTransition(this.g, this.h);
|
|
}
|
|
switch (op.a) {
|
|
case 1:
|
|
fragment.setNextAnim(op.c);
|
|
this.a.a(fragment, false);
|
|
break;
|
|
case 2:
|
|
default:
|
|
throw new IllegalArgumentException("Unknown cmd: " + op.a);
|
|
case 3:
|
|
fragment.setNextAnim(op.d);
|
|
this.a.l(fragment);
|
|
break;
|
|
case 4:
|
|
fragment.setNextAnim(op.d);
|
|
this.a.f(fragment);
|
|
break;
|
|
case 5:
|
|
fragment.setNextAnim(op.c);
|
|
this.a.p(fragment);
|
|
break;
|
|
case 6:
|
|
fragment.setNextAnim(op.d);
|
|
this.a.d(fragment);
|
|
break;
|
|
case 7:
|
|
fragment.setNextAnim(op.c);
|
|
this.a.b(fragment);
|
|
break;
|
|
case 8:
|
|
this.a.o(fragment);
|
|
break;
|
|
case 9:
|
|
this.a.o(null);
|
|
break;
|
|
}
|
|
if (!this.t && op.a != 1 && fragment != null) {
|
|
this.a.i(fragment);
|
|
}
|
|
}
|
|
if (this.t) {
|
|
return;
|
|
}
|
|
FragmentManagerImpl fragmentManagerImpl = this.a;
|
|
fragmentManagerImpl.a(fragmentManagerImpl.l, true);
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction b(Fragment fragment) {
|
|
a(new Op(6, fragment));
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public int b() {
|
|
return a(true);
|
|
}
|
|
|
|
boolean b(int i) {
|
|
int size = this.b.size();
|
|
for (int i2 = 0; i2 < size; i2++) {
|
|
Fragment fragment = this.b.get(i2).b;
|
|
int i3 = fragment != null ? fragment.mContainerId : 0;
|
|
if (i3 != 0 && i3 == i) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void b(boolean z) {
|
|
for (int size = this.b.size() - 1; size >= 0; size--) {
|
|
Op op = this.b.get(size);
|
|
Fragment fragment = op.b;
|
|
if (fragment != null) {
|
|
fragment.setNextTransition(FragmentManagerImpl.e(this.g), this.h);
|
|
}
|
|
switch (op.a) {
|
|
case 1:
|
|
fragment.setNextAnim(op.f);
|
|
this.a.l(fragment);
|
|
break;
|
|
case 2:
|
|
default:
|
|
throw new IllegalArgumentException("Unknown cmd: " + op.a);
|
|
case 3:
|
|
fragment.setNextAnim(op.e);
|
|
this.a.a(fragment, false);
|
|
break;
|
|
case 4:
|
|
fragment.setNextAnim(op.e);
|
|
this.a.p(fragment);
|
|
break;
|
|
case 5:
|
|
fragment.setNextAnim(op.f);
|
|
this.a.f(fragment);
|
|
break;
|
|
case 6:
|
|
fragment.setNextAnim(op.e);
|
|
this.a.b(fragment);
|
|
break;
|
|
case 7:
|
|
fragment.setNextAnim(op.f);
|
|
this.a.d(fragment);
|
|
break;
|
|
case 8:
|
|
this.a.o(null);
|
|
break;
|
|
case 9:
|
|
this.a.o(fragment);
|
|
break;
|
|
}
|
|
if (!this.t && op.a != 3 && fragment != null) {
|
|
this.a.i(fragment);
|
|
}
|
|
}
|
|
if (this.t || !z) {
|
|
return;
|
|
}
|
|
FragmentManagerImpl fragmentManagerImpl = this.a;
|
|
fragmentManagerImpl.a(fragmentManagerImpl.l, true);
|
|
}
|
|
|
|
Fragment b(ArrayList<Fragment> arrayList, Fragment fragment) {
|
|
for (int i = 0; i < this.b.size(); i++) {
|
|
Op op = this.b.get(i);
|
|
int i2 = op.a;
|
|
if (i2 != 1) {
|
|
if (i2 != 3) {
|
|
switch (i2) {
|
|
case 8:
|
|
fragment = null;
|
|
break;
|
|
case 9:
|
|
fragment = op.b;
|
|
break;
|
|
}
|
|
}
|
|
arrayList.add(op.b);
|
|
}
|
|
arrayList.remove(op.b);
|
|
}
|
|
return fragment;
|
|
}
|
|
|
|
private static boolean b(Op op) {
|
|
Fragment fragment = op.b;
|
|
return (fragment == null || !fragment.mAdded || fragment.mView == null || fragment.mDetached || fragment.mHidden || !fragment.isPostponed()) ? false : true;
|
|
}
|
|
|
|
void a(Op op) {
|
|
this.b.add(op);
|
|
op.c = this.c;
|
|
op.d = this.d;
|
|
op.e = this.e;
|
|
op.f = this.f;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction a(Fragment fragment, String str) {
|
|
a(0, fragment, str, 1);
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction a(int i, Fragment fragment) {
|
|
a(i, fragment, (String) null, 1);
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction a(int i, Fragment fragment, String str) {
|
|
a(i, fragment, str, 1);
|
|
return this;
|
|
}
|
|
|
|
private void a(int i, Fragment fragment, String str, int i2) {
|
|
Class<?> cls = fragment.getClass();
|
|
int modifiers = cls.getModifiers();
|
|
if (!cls.isAnonymousClass() && Modifier.isPublic(modifiers) && (!cls.isMemberClass() || Modifier.isStatic(modifiers))) {
|
|
fragment.mFragmentManager = this.a;
|
|
if (str != null) {
|
|
String str2 = fragment.mTag;
|
|
if (str2 != null && !str.equals(str2)) {
|
|
throw new IllegalStateException("Can't change tag of fragment " + fragment + ": was " + fragment.mTag + " now " + str);
|
|
}
|
|
fragment.mTag = str;
|
|
}
|
|
if (i != 0) {
|
|
if (i != -1) {
|
|
int i3 = fragment.mFragmentId;
|
|
if (i3 != 0 && i3 != i) {
|
|
throw new IllegalStateException("Can't change container ID of fragment " + fragment + ": was " + fragment.mFragmentId + " now " + i);
|
|
}
|
|
fragment.mFragmentId = i;
|
|
fragment.mContainerId = i;
|
|
} else {
|
|
throw new IllegalArgumentException("Can't add fragment " + fragment + " with tag " + str + " to container view with no id");
|
|
}
|
|
}
|
|
a(new Op(i2, fragment));
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Fragment " + cls.getCanonicalName() + " must be a public static class to be properly recreated from instance state.");
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction a(Fragment fragment) {
|
|
a(new Op(7, fragment));
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public FragmentTransaction a(String str) {
|
|
if (this.j) {
|
|
this.i = true;
|
|
this.k = str;
|
|
return this;
|
|
}
|
|
throw new IllegalStateException("This FragmentTransaction is not allowed to be added to the back stack.");
|
|
}
|
|
|
|
void a(int i) {
|
|
if (this.i) {
|
|
if (FragmentManagerImpl.F) {
|
|
Log.v("FragmentManager", "Bump nesting in " + this + " by " + i);
|
|
}
|
|
int size = this.b.size();
|
|
for (int i2 = 0; i2 < size; i2++) {
|
|
Op op = this.b.get(i2);
|
|
Fragment fragment = op.b;
|
|
if (fragment != null) {
|
|
fragment.mBackStackNesting += i;
|
|
if (FragmentManagerImpl.F) {
|
|
Log.v("FragmentManager", "Bump nesting of " + op.b + " to " + op.b.mBackStackNesting);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentTransaction
|
|
public int a() {
|
|
return a(false);
|
|
}
|
|
|
|
int a(boolean z) {
|
|
if (!this.l) {
|
|
if (FragmentManagerImpl.F) {
|
|
Log.v("FragmentManager", "Commit: " + this);
|
|
PrintWriter printWriter = new PrintWriter(new LogWriter("FragmentManager"));
|
|
a(" ", (FileDescriptor) null, printWriter, (String[]) null);
|
|
printWriter.close();
|
|
}
|
|
this.l = true;
|
|
if (this.i) {
|
|
this.m = this.a.b(this);
|
|
} else {
|
|
this.m = -1;
|
|
}
|
|
this.a.a(this, z);
|
|
return this.m;
|
|
}
|
|
throw new IllegalStateException("commit already called");
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentManagerImpl.OpGenerator
|
|
public boolean a(ArrayList<BackStackRecord> arrayList, ArrayList<Boolean> arrayList2) {
|
|
if (FragmentManagerImpl.F) {
|
|
Log.v("FragmentManager", "Run: " + this);
|
|
}
|
|
arrayList.add(this);
|
|
arrayList2.add(false);
|
|
if (!this.i) {
|
|
return true;
|
|
}
|
|
this.a.a(this);
|
|
return true;
|
|
}
|
|
|
|
boolean a(ArrayList<BackStackRecord> arrayList, int i, int i2) {
|
|
if (i2 == i) {
|
|
return false;
|
|
}
|
|
int size = this.b.size();
|
|
int i3 = -1;
|
|
for (int i4 = 0; i4 < size; i4++) {
|
|
Fragment fragment = this.b.get(i4).b;
|
|
int i5 = fragment != null ? fragment.mContainerId : 0;
|
|
if (i5 != 0 && i5 != i3) {
|
|
for (int i6 = i; i6 < i2; i6++) {
|
|
BackStackRecord backStackRecord = arrayList.get(i6);
|
|
int size2 = backStackRecord.b.size();
|
|
for (int i7 = 0; i7 < size2; i7++) {
|
|
Fragment fragment2 = backStackRecord.b.get(i7).b;
|
|
if ((fragment2 != null ? fragment2.mContainerId : 0) == i5) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
i3 = i5;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
Fragment a(ArrayList<Fragment> arrayList, Fragment fragment) {
|
|
Fragment fragment2 = fragment;
|
|
int i = 0;
|
|
while (i < this.b.size()) {
|
|
Op op = this.b.get(i);
|
|
int i2 = op.a;
|
|
if (i2 != 1) {
|
|
if (i2 == 2) {
|
|
Fragment fragment3 = op.b;
|
|
int i3 = fragment3.mContainerId;
|
|
Fragment fragment4 = fragment2;
|
|
int i4 = i;
|
|
boolean z = false;
|
|
for (int size = arrayList.size() - 1; size >= 0; size--) {
|
|
Fragment fragment5 = arrayList.get(size);
|
|
if (fragment5.mContainerId == i3) {
|
|
if (fragment5 == fragment3) {
|
|
z = true;
|
|
} else {
|
|
if (fragment5 == fragment4) {
|
|
this.b.add(i4, new Op(9, fragment5));
|
|
i4++;
|
|
fragment4 = null;
|
|
}
|
|
Op op2 = new Op(3, fragment5);
|
|
op2.c = op.c;
|
|
op2.e = op.e;
|
|
op2.d = op.d;
|
|
op2.f = op.f;
|
|
this.b.add(i4, op2);
|
|
arrayList.remove(fragment5);
|
|
i4++;
|
|
}
|
|
}
|
|
}
|
|
if (z) {
|
|
this.b.remove(i4);
|
|
i4--;
|
|
} else {
|
|
op.a = 1;
|
|
arrayList.add(fragment3);
|
|
}
|
|
i = i4;
|
|
fragment2 = fragment4;
|
|
} else if (i2 == 3 || i2 == 6) {
|
|
arrayList.remove(op.b);
|
|
Fragment fragment6 = op.b;
|
|
if (fragment6 == fragment2) {
|
|
this.b.add(i, new Op(9, fragment6));
|
|
i++;
|
|
fragment2 = null;
|
|
}
|
|
} else if (i2 != 7) {
|
|
if (i2 == 8) {
|
|
this.b.add(i, new Op(9, fragment2));
|
|
i++;
|
|
fragment2 = op.b;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
arrayList.add(op.b);
|
|
i++;
|
|
}
|
|
return fragment2;
|
|
}
|
|
|
|
void a(Fragment.OnStartEnterTransitionListener onStartEnterTransitionListener) {
|
|
for (int i = 0; i < this.b.size(); i++) {
|
|
Op op = this.b.get(i);
|
|
if (b(op)) {
|
|
op.b.setOnStartEnterTransitionListener(onStartEnterTransitionListener);
|
|
}
|
|
}
|
|
}
|
|
}
|