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) {