Merge "Turn of fragment operation optimization by default." into nyc-support-25.1-dev
diff --git a/fragment/java/android/support/v4/app/BackStackRecord.java b/fragment/java/android/support/v4/app/BackStackRecord.java
index 75cae8a..acfa924 100644
--- a/fragment/java/android/support/v4/app/BackStackRecord.java
+++ b/fragment/java/android/support/v4/app/BackStackRecord.java
@@ -216,7 +216,7 @@
ArrayList<String> mSharedElementSourceNames;
ArrayList<String> mSharedElementTargetNames;
- boolean mAllowOptimization = true;
+ boolean mAllowOptimization = false;
@Override
public String toString() {
diff --git a/fragment/java/android/support/v4/app/FragmentTransaction.java b/fragment/java/android/support/v4/app/FragmentTransaction.java
index b03f002..0171681 100644
--- a/fragment/java/android/support/v4/app/FragmentTransaction.java
+++ b/fragment/java/android/support/v4/app/FragmentTransaction.java
@@ -296,7 +296,7 @@
* With optimization, fragment B cannot expect fragment A to exist when
* it has been created because fragment A's add/remove will be optimized out.
* <p>
- * The default is {@code true}.
+ * The default is {@code false}.
*
* @param allowOptimization {@code true} to enable optimizing operations
* or {@code false} to disable optimizing
diff --git a/fragment/tests/java/android/support/v4/app/FragmentAnimationTest.java b/fragment/tests/java/android/support/v4/app/FragmentAnimationTest.java
index 9f6b263..873e36d 100644
--- a/fragment/tests/java/android/support/v4/app/FragmentAnimationTest.java
+++ b/fragment/tests/java/android/support/v4/app/FragmentAnimationTest.java
@@ -234,6 +234,7 @@
.setCustomAnimations(ENTER, EXIT, POP_ENTER, POP_EXIT)
.add(R.id.fragmentContainer, fragment)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -258,6 +259,7 @@
.setCustomAnimations(ENTER, EXIT, POP_ENTER, POP_EXIT)
.remove(fragment)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -274,6 +276,7 @@
fm.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -284,6 +287,7 @@
.setCustomAnimations(ENTER, EXIT, POP_ENTER, POP_EXIT)
.replace(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -307,6 +311,7 @@
final AnimatorFragment fragment1 = new AnimatorFragment();
fm.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
assertEquals(0, fragment1.numAnimators);
@@ -318,6 +323,7 @@
.setCustomAnimations(ENTER, EXIT, POP_ENTER, POP_EXIT)
.replace(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
diff --git a/fragment/tests/java/android/support/v4/app/FragmentOptimizationTest.java b/fragment/tests/java/android/support/v4/app/FragmentOptimizationTest.java
index 39dbf11..08be463 100644
--- a/fragment/tests/java/android/support/v4/app/FragmentOptimizationTest.java
+++ b/fragment/tests/java/android/support/v4/app/FragmentOptimizationTest.java
@@ -62,10 +62,12 @@
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.beginTransaction()
.replace(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.executePendingTransactions();
}
@@ -90,7 +92,11 @@
public void startWithPop() throws Throwable {
// Start with a single fragment on the back stack
final CountCallsFragment fragment1 = new CountCallsFragment();
- mFM.beginTransaction().add(R.id.fragmentContainer, fragment1).addToBackStack(null).commit();
+ mFM.beginTransaction()
+ .add(R.id.fragmentContainer, fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(mContainer, fragment1);
@@ -103,6 +109,7 @@
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.executePendingTransactions();
}
@@ -126,11 +133,13 @@
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.popBackStack();
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.executePendingTransactions();
}
@@ -156,9 +165,18 @@
id[0] = mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
- mFM.beginTransaction().hide(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().remove(fragment1).addToBackStack(null).commit();
+ mFM.beginTransaction()
+ .hide(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .remove(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
mFM.executePendingTransactions();
}
});
@@ -186,6 +204,7 @@
int id = mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
assertEquals(1, fragment1.onCreateViewCount);
@@ -196,10 +215,12 @@
mFM.beginTransaction()
.remove(fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.executePendingTransactions();
}
@@ -223,6 +244,7 @@
int id = mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
assertEquals(1, fragment1.onAttachCount);
@@ -231,9 +253,21 @@
mInstrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
- mFM.beginTransaction().detach(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().hide(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().attach(fragment1).addToBackStack(null).commit();
+ mFM.beginTransaction()
+ .detach(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .hide(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .attach(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
mFM.executePendingTransactions();
}
});
@@ -268,6 +302,7 @@
.add(R.id.fragmentContainer, fragment1)
.detach(fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
@@ -281,9 +316,21 @@
mInstrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
- mFM.beginTransaction().attach(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().hide(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().detach(fragment1).addToBackStack(null).commit();
+ mFM.beginTransaction()
+ .attach(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .hide(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .detach(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
mFM.executePendingTransactions();
}
});
@@ -316,6 +363,7 @@
.add(R.id.fragmentContainer, fragment1)
.hide(fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
assertEquals(0, fragment1.onShowCount);
@@ -328,18 +376,22 @@
mFM.beginTransaction()
.show(fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.beginTransaction()
.remove(fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.beginTransaction()
.hide(fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.executePendingTransactions();
}
@@ -360,8 +412,16 @@
mInstrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
- mFM.beginTransaction().show(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().hide(fragment1).addToBackStack(null).commit();
+ mFM.beginTransaction()
+ .show(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .hide(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
mFM.executePendingTransactions();
}
});
@@ -380,10 +440,26 @@
mInstrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
- mFM.beginTransaction().show(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().detach(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().attach(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().hide(fragment1).addToBackStack(null).commit();
+ mFM.beginTransaction()
+ .show(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .detach(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .attach(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .hide(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
mFM.executePendingTransactions();
}
});
@@ -406,6 +482,7 @@
int id = mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
assertEquals(0, fragment1.onShowCount);
@@ -415,10 +492,26 @@
mInstrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
- mFM.beginTransaction().hide(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().detach(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().attach(fragment1).addToBackStack(null).commit();
- mFM.beginTransaction().show(fragment1).addToBackStack(null).commit();
+ mFM.beginTransaction()
+ .hide(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .detach(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .attach(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
+ mFM.beginTransaction()
+ .show(fragment1)
+ .addToBackStack(null)
+ .setAllowOptimization(true)
+ .commit();
mFM.executePendingTransactions();
}
});
@@ -443,6 +536,7 @@
int id = mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.executePendingTransactions(mActivityRule);
FragmentTestUtil.assertChildren(mContainer, fragment1);
@@ -455,10 +549,12 @@
mFM.beginTransaction()
.replace(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.executePendingTransactions();
@@ -480,6 +576,7 @@
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.popBackStack();
mFM.executePendingTransactions();
@@ -503,9 +600,11 @@
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.beginTransaction()
.replace(R.id.fragmentContainer, fragment2)
+ .setAllowOptimization(true)
.commit();
mFM.popBackStack();
mFM.executePendingTransactions();
@@ -529,6 +628,7 @@
mFM.beginTransaction()
.add(R.id.fragmentContainer, fragment1)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
mFM.beginTransaction()
.replace(R.id.fragmentContainer, fragment2)
diff --git a/fragment/tests/java/android/support/v4/app/FragmentTransitionTest.java b/fragment/tests/java/android/support/v4/app/FragmentTransitionTest.java
index 71e5d2f..ab319b7 100644
--- a/fragment/tests/java/android/support/v4/app/FragmentTransitionTest.java
+++ b/fragment/tests/java/android/support/v4/app/FragmentTransitionTest.java
@@ -442,6 +442,7 @@
.addSharedElement(startGreen, "greenSquare")
.replace(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
diff --git a/fragment/tests/java/android/support/v4/app/PostponedTransitionTest.java b/fragment/tests/java/android/support/v4/app/PostponedTransitionTest.java
index b20298d..fe41976 100644
--- a/fragment/tests/java/android/support/v4/app/PostponedTransitionTest.java
+++ b/fragment/tests/java/android/support/v4/app/PostponedTransitionTest.java
@@ -61,6 +61,7 @@
mBeginningFragment = new PostponedFragment1();
fm.beginTransaction()
.add(R.id.fragmentContainer, mBeginningFragment)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -81,6 +82,7 @@
.addSharedElement(startBlue, "blueSquare")
.replace(R.id.fragmentContainer, fragment)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -126,12 +128,14 @@
.addSharedElement(startBlue, "blueSquare")
.replace(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
fm.beginTransaction()
.addSharedElement(startBlue, "blueSquare")
.replace(R.id.fragmentContainer, fragment3)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
}
});
@@ -176,6 +180,7 @@
.addSharedElement(startBlue, "blueSquare")
.replace(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -187,6 +192,7 @@
.addSharedElement(startBlue, "blueSquare")
.replace(R.id.fragmentContainer, fragment3)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
// This should cancel the mBeginningFragment -> fragment2 transition
@@ -238,6 +244,7 @@
.attach(fragment2)
.show(fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -266,7 +273,10 @@
@Test
public void differentContainers() throws Throwable {
final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager();
- fm.beginTransaction().remove(mBeginningFragment).commit();
+ fm.beginTransaction()
+ .remove(mBeginningFragment)
+ .setAllowOptimization(true)
+ .commit();
FragmentTestUtil.waitForExecution(mActivityRule);
FragmentTestUtil.setContentView(mActivityRule, R.layout.double_container);
@@ -276,6 +286,7 @@
fm.beginTransaction()
.add(R.id.fragmentContainer1, fragment1)
.add(R.id.fragmentContainer2, fragment2)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
fragment1.startPostponedEnterTransition();
@@ -294,6 +305,7 @@
.addSharedElement(startBlue1, "blueSquare")
.replace(R.id.fragmentContainer1, fragment3)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -306,6 +318,7 @@
.addSharedElement(startBlue2, "blueSquare")
.replace(R.id.fragmentContainer2, fragment4)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -358,7 +371,10 @@
@Test
public void outOfOrderContainers() throws Throwable {
final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager();
- fm.beginTransaction().remove(mBeginningFragment).commit();
+ fm.beginTransaction()
+ .remove(mBeginningFragment)
+ .setAllowOptimization(true)
+ .commit();
FragmentTestUtil.waitForExecution(mActivityRule);
FragmentTestUtil.setContentView(mActivityRule, R.layout.double_container);
@@ -368,6 +384,7 @@
fm.beginTransaction()
.add(R.id.fragmentContainer1, fragment1)
.add(R.id.fragmentContainer2, fragment2)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
fragment1.startPostponedEnterTransition();
@@ -386,6 +403,7 @@
.addSharedElement(startBlue1, "blueSquare")
.replace(R.id.fragmentContainer1, fragment3)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -398,6 +416,7 @@
.addSharedElement(startBlue2, "blueSquare")
.replace(R.id.fragmentContainer2, fragment4)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -450,7 +469,10 @@
@Test
public void commitNowNoEffect() throws Throwable {
final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager();
- fm.beginTransaction().remove(mBeginningFragment).commit();
+ fm.beginTransaction()
+ .remove(mBeginningFragment)
+ .setAllowOptimization(true)
+ .commit();
FragmentTestUtil.waitForExecution(mActivityRule);
FragmentTestUtil.setContentView(mActivityRule, R.layout.double_container);
@@ -460,6 +482,7 @@
fm.beginTransaction()
.add(R.id.fragmentContainer1, fragment1)
.add(R.id.fragmentContainer2, fragment2)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
fragment1.startPostponedEnterTransition();
@@ -480,6 +503,7 @@
.replace(R.id.fragmentContainer1, fragment3)
.add(strictFragment1, "1")
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -497,6 +521,7 @@
.replace(R.id.fragmentContainer2, fragment4)
.remove(strictFragment1)
.add(strictFragment2, "2")
+ .setAllowOptimization(true)
.commitNow();
}
});
@@ -534,6 +559,7 @@
.addSharedElement(startBlue1, "blueSquare")
.replace(R.id.fragmentContainer, fragment2)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -545,6 +571,7 @@
fm.beginTransaction()
.addSharedElement(startBlue2, "blueSquare")
.replace(R.id.fragmentContainer, fragment1)
+ .setAllowOptimization(true)
.commitNow();
}
});
@@ -562,7 +589,10 @@
@Test
public void noAccidentalRemoval() throws Throwable {
final FragmentManager fm = mActivityRule.getActivity().getSupportFragmentManager();
- fm.beginTransaction().remove(mBeginningFragment).commit();
+ fm.beginTransaction()
+ .remove(mBeginningFragment)
+ .setAllowOptimization(true)
+ .commit();
FragmentTestUtil.waitForExecution(mActivityRule);
FragmentTestUtil.setContentView(mActivityRule, R.layout.double_container);
@@ -570,6 +600,7 @@
fm.beginTransaction()
.add(R.id.fragmentContainer1, fragment1)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
fragment1.startPostponedEnterTransition();
@@ -580,6 +611,7 @@
// Create a postponed transaction that removes a view
fm.beginTransaction()
.replace(R.id.fragmentContainer1, fragment2)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
assertPostponedTransition(fragment1, fragment2, null);
@@ -588,6 +620,7 @@
// Create a transaction that doesn't interfere with the previously postponed one
fm.beginTransaction()
.replace(R.id.fragmentContainer2, fragment3)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -613,6 +646,7 @@
.addSharedElement(startBlue, "blueSquare")
.replace(R.id.fragmentContainer, fragment)
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);
@@ -646,6 +680,7 @@
fm1.beginTransaction()
.add(R.id.fragmentContainer, fragment1, "1")
.addToBackStack(null)
+ .setAllowOptimization(true)
.commit();
FragmentTestUtil.waitForExecution(mActivityRule);