Merge "Simplify LifecycleDispatcher" into pi-preview1-androidx-dev am: 7de896df9e
am: 1f18562d7a

Change-Id: I189f5d86c346e80ba22ca8d445c02c6de1e1aecf
diff --git a/lifecycle/extensions/src/main/java/androidx/lifecycle/LifecycleDispatcher.java b/lifecycle/extensions/src/main/java/androidx/lifecycle/LifecycleDispatcher.java
index fa1550b..4bed5f2 100644
--- a/lifecycle/extensions/src/main/java/androidx/lifecycle/LifecycleDispatcher.java
+++ b/lifecycle/extensions/src/main/java/androidx/lifecycle/LifecycleDispatcher.java
@@ -16,26 +16,13 @@
 
 package androidx.lifecycle;
 
-import static androidx.lifecycle.Lifecycle.Event.ON_CREATE;
-import static androidx.lifecycle.Lifecycle.Event.ON_DESTROY;
-import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
-import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
-import static androidx.lifecycle.Lifecycle.Event.ON_START;
-import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
-import static androidx.lifecycle.Lifecycle.State.CREATED;
-
 import android.app.Activity;
 import android.app.Application;
 import android.content.Context;
 import android.os.Bundle;
 
 import androidx.annotation.VisibleForTesting;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
-import androidx.fragment.app.FragmentManager;
-import androidx.lifecycle.Lifecycle.State;
 
-import java.util.Collection;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
@@ -47,9 +34,6 @@
  */
 class LifecycleDispatcher {
 
-    private static final String REPORT_FRAGMENT_TAG = "androidx.lifecycle"
-            + ".LifecycleDispatcher.report_fragment_tag";
-
     private static AtomicBoolean sInitialized = new AtomicBoolean(false);
 
     static void init(Context context) {
@@ -63,121 +47,18 @@
     @SuppressWarnings("WeakerAccess")
     @VisibleForTesting
     static class DispatcherActivityCallback extends EmptyActivityLifecycleCallbacks {
-        private final FragmentCallback mFragmentCallback;
-
-        DispatcherActivityCallback() {
-            mFragmentCallback = new FragmentCallback();
-        }
 
         @Override
         public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
-            if (activity instanceof FragmentActivity) {
-                ((FragmentActivity) activity).getSupportFragmentManager()
-                        .registerFragmentLifecycleCallbacks(mFragmentCallback, true);
-            }
             ReportFragment.injectIfNeededIn(activity);
         }
 
         @Override
         public void onActivityStopped(Activity activity) {
-            if (activity instanceof FragmentActivity) {
-                markState((FragmentActivity) activity, CREATED);
-            }
         }
 
         @Override
         public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
-            if (activity instanceof FragmentActivity) {
-                markState((FragmentActivity) activity, CREATED);
-            }
-        }
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    public static class DestructionReportFragment extends Fragment {
-        @Override
-        public void onPause() {
-            super.onPause();
-            dispatch(ON_PAUSE);
-        }
-
-        @Override
-        public void onStop() {
-            super.onStop();
-            dispatch(ON_STOP);
-        }
-
-        @Override
-        public void onDestroy() {
-            super.onDestroy();
-            dispatch(ON_DESTROY);
-        }
-
-        protected void dispatch(Lifecycle.Event event) {
-            dispatchIfLifecycleOwner(getParentFragment(), event);
-        }
-    }
-
-    private static void markState(FragmentManager manager, State state) {
-        Collection<Fragment> fragments = manager.getFragments();
-        if (fragments == null) {
-            return;
-        }
-        for (Fragment fragment : fragments) {
-            if (fragment == null) {
-                continue;
-            }
-            markStateIn(fragment, state);
-            if (fragment.isAdded()) {
-                markState(fragment.getChildFragmentManager(), state);
-            }
-        }
-    }
-
-    private static void markStateIn(Object object, State state) {
-        if (object instanceof LifecycleRegistryOwner) {
-            LifecycleRegistry registry = ((LifecycleRegistryOwner) object).getLifecycle();
-            registry.markState(state);
-        }
-    }
-
-    private static void markState(FragmentActivity activity, State state) {
-        markStateIn(activity, state);
-        markState(activity.getSupportFragmentManager(), state);
-    }
-
-    private static void dispatchIfLifecycleOwner(Fragment fragment, Lifecycle.Event event) {
-        if (fragment instanceof LifecycleRegistryOwner) {
-            ((LifecycleRegistryOwner) fragment).getLifecycle().handleLifecycleEvent(event);
-        }
-    }
-
-    @SuppressWarnings("WeakerAccess")
-    @VisibleForTesting
-    static class FragmentCallback extends FragmentManager.FragmentLifecycleCallbacks {
-
-        @Override
-        public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
-            dispatchIfLifecycleOwner(f, ON_CREATE);
-
-            if (!(f instanceof LifecycleRegistryOwner)) {
-                return;
-            }
-
-            if (f.getChildFragmentManager().findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
-                f.getChildFragmentManager().beginTransaction().add(new DestructionReportFragment(),
-                        REPORT_FRAGMENT_TAG).commit();
-            }
-        }
-
-        @Override
-        public void onFragmentStarted(FragmentManager fm, Fragment f) {
-            dispatchIfLifecycleOwner(f, ON_START);
-        }
-
-        @Override
-        public void onFragmentResumed(FragmentManager fm, Fragment f) {
-            dispatchIfLifecycleOwner(f, ON_RESUME);
         }
     }
 
diff --git a/lifecycle/extensions/src/test/java/androidx/lifecycle/DispatcherActivityCallbackTest.java b/lifecycle/extensions/src/test/java/androidx/lifecycle/DispatcherActivityCallbackTest.java
index dba2488..0ed40bb 100644
--- a/lifecycle/extensions/src/test/java/androidx/lifecycle/DispatcherActivityCallbackTest.java
+++ b/lifecycle/extensions/src/test/java/androidx/lifecycle/DispatcherActivityCallbackTest.java
@@ -18,7 +18,6 @@
 
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -29,9 +28,6 @@
 import android.app.FragmentTransaction;
 import android.os.Bundle;
 
-import androidx.fragment.app.FragmentActivity;
-import androidx.fragment.app.FragmentManager;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -46,21 +42,6 @@
         checkReportFragment(callback, activity);
     }
 
-    @Test
-    public void onCreateFragmentActivity() {
-        LifecycleDispatcher.DispatcherActivityCallback callback =
-                new LifecycleDispatcher.DispatcherActivityCallback();
-        FragmentActivity activity = mock(FragmentActivity.class);
-        FragmentManager fragmentManager = mock(FragmentManager.class);
-        when(activity.getSupportFragmentManager()).thenReturn(fragmentManager);
-
-        checkReportFragment(callback, activity);
-
-        verify(activity).getSupportFragmentManager();
-        verify(fragmentManager).registerFragmentLifecycleCallbacks(
-                any(FragmentManager.FragmentLifecycleCallbacks.class), eq(true));
-    }
-
     @SuppressLint("CommitTransaction")
     private void checkReportFragment(LifecycleDispatcher.DispatcherActivityCallback callback,
             Activity activity) {