Fix issue #5063010: Loaders don't seem to be properly...

...retained with compatibility library

Yikes, and also in the main platform...! :(

Change-Id: I76ee3a9a5ba4a220c2f54d0af9cf49e3a736e7bd
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index aeb16f4..8d03ac7 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1593,10 +1593,10 @@
         //Log.v(TAG, "invalidateFragmentIndex: index=" + index);
         if (mAllLoaderManagers != null) {
             LoaderManagerImpl lm = mAllLoaderManagers.get(index);
-            if (lm != null) {
+            if (lm != null && !lm.mRetaining) {
                 lm.doDestroy();
+                mAllLoaderManagers.remove(index);
             }
-            mAllLoaderManagers.remove(index);
         }
     }
     
diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java
index e5a7980..93330a7 100644
--- a/core/java/android/app/BackStackRecord.java
+++ b/core/java/android/app/BackStackRecord.java
@@ -224,6 +224,12 @@
                     writer.print(" mExitAnim=#");
                     writer.println(Integer.toHexString(mExitAnim));
         }
+        if (mPopEnterAnim != 0 || mPopExitAnim !=0) {
+            writer.print(prefix); writer.print("mPopEnterAnim=#");
+                    writer.print(Integer.toHexString(mPopEnterAnim));
+                    writer.print(" mPopExitAnim=#");
+                    writer.println(Integer.toHexString(mPopExitAnim));
+        }
         if (mBreadCrumbTitleRes != 0 || mBreadCrumbTitleText != null) {
             writer.print(prefix); writer.print("mBreadCrumbTitleRes=#");
                     writer.print(Integer.toHexString(mBreadCrumbTitleRes));
@@ -248,13 +254,16 @@
                 writer.print(innerPrefix); writer.print("cmd="); writer.print(op.cmd);
                         writer.print(" fragment="); writer.println(op.fragment);
                 if (op.enterAnim != 0 || op.exitAnim != 0) {
-                    writer.print(prefix); writer.print("enterAnim="); writer.print(op.enterAnim);
-                            writer.print(" exitAnim="); writer.println(op.exitAnim);
+                    writer.print(prefix); writer.print("enterAnim=#");
+                            writer.print(Integer.toHexString(op.enterAnim));
+                            writer.print(" exitAnim=#");
+                            writer.println(Integer.toHexString(op.exitAnim));
                 }
                 if (op.popEnterAnim != 0 || op.popExitAnim != 0) {
-                    writer.print(prefix);
-                            writer.print("popEnterAnim="); writer.print(op.popEnterAnim);
-                            writer.print(" popExitAnim="); writer.println(op.popExitAnim);
+                    writer.print(prefix); writer.print("popEnterAnim=#");
+                            writer.print(Integer.toHexString(op.popEnterAnim));
+                            writer.print(" popExitAnim=#");
+                            writer.println(Integer.toHexString(op.popExitAnim));
                 }
                 if (op.removed != null && op.removed.size() > 0) {
                     for (int i=0; i<op.removed.size(); i++) {
@@ -695,11 +704,13 @@
                 } break;
                 case OP_DETACH: {
                     Fragment f = op.fragment;
+                    f.mNextAnim = op.popEnterAnim;
                     mManager.attachFragment(f,
                             FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle);
                 } break;
                 case OP_ATTACH: {
                     Fragment f = op.fragment;
+                    f.mNextAnim = op.popExitAnim;
                     mManager.detachFragment(f,
                             FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle);
                 } break;