diff --git a/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/ControllerLifecycleOwner.java b/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/ControllerLifecycleOwner.java new file mode 100644 index 0000000..4ac1320 --- /dev/null +++ b/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/ControllerLifecycleOwner.java @@ -0,0 +1,66 @@ +package com.bluelinelabs.conductor.archlifecycle; + +import android.arch.lifecycle.Lifecycle; +import android.arch.lifecycle.Lifecycle.Event; +import android.arch.lifecycle.LifecycleOwner; +import android.arch.lifecycle.LifecycleRegistry; +import android.content.Context; +import android.support.annotation.NonNull; +import android.view.View; + +import com.bluelinelabs.conductor.Controller; +import com.bluelinelabs.conductor.Controller.LifecycleListener; + +public class ControllerLifecycleOwner implements LifecycleOwner { + + private final LifecycleRegistry mLifecycleRegistry; + + public ControllerLifecycleOwner(@NonNull T lifecycleController) { + mLifecycleRegistry = new LifecycleRegistry(lifecycleController); // --> State.INITIALIZED + lifecycleController.addLifecycleListener(new LifecycleListener() { + + @Override + public void postContextAvailable(@NonNull Controller controller, @NonNull Context context) { + mLifecycleRegistry.handleLifecycleEvent(Event.ON_CREATE); // --> State.CREATED; + } + + @Override + public void postCreateView(@NonNull Controller controller, @NonNull View view) { + mLifecycleRegistry.handleLifecycleEvent(Event.ON_START); // --> State.STARTED; + } + + @Override + public void postAttach(@NonNull Controller controller, @NonNull View view) { + mLifecycleRegistry.handleLifecycleEvent(Event.ON_RESUME); // --> State.RESUMED; + } + + @Override + public void preDetach(@NonNull Controller controller, @NonNull View view) { + mLifecycleRegistry.handleLifecycleEvent(Event.ON_PAUSE); // --> State.STARTED; + } + + @Override + public void preDestroyView(@NonNull Controller controller, @NonNull View view) { + mLifecycleRegistry.handleLifecycleEvent(Event.ON_STOP); // --> State.CREATED; + } + + @Override + public void preContextUnavailable(@NonNull Controller controller, @NonNull Context context) { + // do nothing + } + + @Override + public void preDestroy(@NonNull Controller controller) { + mLifecycleRegistry.handleLifecycleEvent(Event.ON_DESTROY); // --> State.DESTROYED; + } + + }); + } + + @NonNull + @Override + public Lifecycle getLifecycle() { + return mLifecycleRegistry; + } + +} diff --git a/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/ControllerLifecycleRegistryOwner.java b/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/ControllerLifecycleRegistryOwner.java deleted file mode 100644 index efa1e81..0000000 --- a/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/ControllerLifecycleRegistryOwner.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.bluelinelabs.conductor.archlifecycle; - -import android.arch.lifecycle.Lifecycle.Event; -import android.arch.lifecycle.Lifecycle.State; -import android.arch.lifecycle.LifecycleRegistry; -import android.arch.lifecycle.LifecycleRegistryOwner; -import android.support.annotation.NonNull; -import android.view.View; - -import com.bluelinelabs.conductor.Controller; -import com.bluelinelabs.conductor.Controller.LifecycleListener; - -public class ControllerLifecycleRegistryOwner extends LifecycleListener implements LifecycleRegistryOwner { - - final LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this); - - public ControllerLifecycleRegistryOwner(Controller controller) { - lifecycleRegistry.handleLifecycleEvent(Event.ON_CREATE); - lifecycleRegistry.markState(State.CREATED); - - controller.addLifecycleListener(new LifecycleListener() { - @Override - public void preCreateView(@NonNull Controller controller) { - lifecycleRegistry.handleLifecycleEvent(Event.ON_START); - } - - @Override - public void postCreateView(@NonNull Controller controller, @NonNull View view) { - lifecycleRegistry.markState(State.STARTED); - } - - @Override - public void preAttach(@NonNull Controller controller, @NonNull View view) { - lifecycleRegistry.handleLifecycleEvent(Event.ON_RESUME); - } - - @Override - public void postAttach(@NonNull Controller controller, @NonNull View view) { - lifecycleRegistry.markState(State.RESUMED); - } - - @Override - public void preDetach(@NonNull Controller controller, @NonNull View view) { - lifecycleRegistry.handleLifecycleEvent(Event.ON_PAUSE); - } - - @Override - public void postDetach(@NonNull Controller controller, @NonNull View view) { - lifecycleRegistry.markState(State.STARTED); - } - - @Override - public void preDestroyView(@NonNull Controller controller, @NonNull View view) { - lifecycleRegistry.handleLifecycleEvent(Event.ON_STOP); - } - - @Override - public void postDestroyView(@NonNull Controller controller) { - lifecycleRegistry.markState(State.CREATED); - } - - @Override - public void preDestroy(@NonNull Controller controller) { - lifecycleRegistry.handleLifecycleEvent(Event.ON_DESTROY); - } - - @Override - public void postDestroy(@NonNull Controller controller) { - lifecycleRegistry.markState(State.DESTROYED); - } - }); - } - - @Override - public LifecycleRegistry getLifecycle() { - return lifecycleRegistry; - } - -} diff --git a/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/LifecycleController.java b/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/LifecycleController.java index 21dabd8..cd69aca 100644 --- a/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/LifecycleController.java +++ b/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/LifecycleController.java @@ -1,15 +1,16 @@ package com.bluelinelabs.conductor.archlifecycle; -import android.arch.lifecycle.LifecycleRegistry; -import android.arch.lifecycle.LifecycleRegistryOwner; +import android.arch.lifecycle.Lifecycle; +import android.arch.lifecycle.LifecycleOwner; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.bluelinelabs.conductor.Controller; -public abstract class LifecycleController extends Controller implements LifecycleRegistryOwner { +public abstract class LifecycleController extends Controller implements LifecycleOwner { - private final ControllerLifecycleRegistryOwner lifecycleRegistryOwner = new ControllerLifecycleRegistryOwner(this); + private final ControllerLifecycleOwner mLifecycleOwner = new ControllerLifecycleOwner(this); public LifecycleController() { super(); @@ -19,9 +20,10 @@ public abstract class LifecycleController extends Controller implements Lifecycl super(args); } + @NonNull @Override - public LifecycleRegistry getLifecycle() { - return lifecycleRegistryOwner.getLifecycle(); + public Lifecycle getLifecycle() { + return mLifecycleOwner.getLifecycle(); } } diff --git a/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/LifecycleRestoreViewOnCreateController.java b/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/LifecycleRestoreViewOnCreateController.java index 1135ca1..bf9bfa7 100644 --- a/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/LifecycleRestoreViewOnCreateController.java +++ b/conductor-modules/arch-components-lifecycle/src/main/java/com/bluelinelabs/conductor/archlifecycle/LifecycleRestoreViewOnCreateController.java @@ -1,17 +1,29 @@ package com.bluelinelabs.conductor.archlifecycle; -import android.arch.lifecycle.LifecycleRegistry; -import android.arch.lifecycle.LifecycleRegistryOwner; +import android.arch.lifecycle.Lifecycle; +import android.arch.lifecycle.LifecycleOwner; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.bluelinelabs.conductor.RestoreViewOnCreateController; -public abstract class LifecycleRestoreViewOnCreateController extends RestoreViewOnCreateController implements LifecycleRegistryOwner { +public abstract class LifecycleRestoreViewOnCreateController extends RestoreViewOnCreateController implements LifecycleOwner { - private final ControllerLifecycleRegistryOwner lifecycleRegistryOwner = new ControllerLifecycleRegistryOwner(this); + private final ControllerLifecycleOwner mLifecycleOwner = new ControllerLifecycleOwner(this); + public LifecycleRestoreViewOnCreateController() { + super(); + } + + public LifecycleRestoreViewOnCreateController(@Nullable Bundle args) { + super(args); + } + + @NonNull @Override - public LifecycleRegistry getLifecycle() { - return lifecycleRegistryOwner.getLifecycle(); + public Lifecycle getLifecycle() { + return mLifecycleOwner.getLifecycle(); } } diff --git a/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/ArchLifecycleController.java b/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/ArchLifecycleController.java index 099a0a9..7dcad31 100644 --- a/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/ArchLifecycleController.java +++ b/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/ArchLifecycleController.java @@ -2,7 +2,9 @@ package com.bluelinelabs.conductor.demo.controllers; import android.arch.lifecycle.Lifecycle.Event; import android.arch.lifecycle.LifecycleObserver; +import android.arch.lifecycle.LifecycleOwner; import android.arch.lifecycle.OnLifecycleEvent; +import android.content.Context; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.util.Log; @@ -35,47 +37,28 @@ public class ArchLifecycleController extends LifecycleController { private boolean hasExited; public ArchLifecycleController() { - LifecycleObserver lifecycleObserver = new LifecycleObserver() { - @OnLifecycleEvent(Event.ON_CREATE) - void onCreate() { - Log.d(TAG, "LifecycleObserver onCreate() called"); + Log.i(TAG, "Conductor: Constructor called"); + + getLifecycle().addObserver(new LifecycleObserver() { + @OnLifecycleEvent(Event.ON_ANY) + void onLifecycleEvent(@NonNull LifecycleOwner source, @NonNull Event event) { + Log.d(TAG, "Lifecycle: " + source.getClass().getSimpleName() + " emitted event " + event + " and is now in state " + source.getLifecycle().getCurrentState()); } + }); - @OnLifecycleEvent(Event.ON_START) - void onStart() { - Log.d(TAG, "LifecycleObserver onStart() called"); - } + Log.d(TAG, "Lifecycle: " + getClass().getSimpleName() + " is now in state " + getLifecycle().getCurrentState()); + } - @OnLifecycleEvent(Event.ON_RESUME) - void onResume() { - Log.d(TAG, "LifecycleObserver onResume() called"); - } - - @OnLifecycleEvent(Event.ON_PAUSE) - void onPause() { - Log.d(TAG, "LifecycleObserver onPause() called"); - } - - @OnLifecycleEvent(Event.ON_STOP) - void onStop() { - Log.d(TAG, "LifecycleObserver onStop() called"); - } - - @OnLifecycleEvent(Event.ON_DESTROY) - void onDestroy() { - Log.d(TAG, "LifecycleObserver onDestroy() called"); - } - }; - - Log.i(TAG, "constructor called"); - - getLifecycle().addObserver(lifecycleObserver); + @Override + protected void onContextAvailable(@NonNull Context context) { + Log.i(TAG, "Conductor: onContextAvailable() called"); + super.onContextAvailable(context); } @NonNull @Override protected View onCreateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) { - Log.i(TAG, "onCreateView() called"); + Log.i(TAG, "Conductor: onCreateView() called"); View view = inflater.inflate(R.layout.controller_lifecycle, container, false); view.setBackgroundColor(ContextCompat.getColor(container.getContext(), R.color.orange_300)); @@ -88,36 +71,38 @@ public class ArchLifecycleController extends LifecycleController { @Override protected void onAttach(@NonNull View view) { + Log.i(TAG, "Conductor: onAttach() called"); super.onAttach(view); - Log.i(TAG, "onAttach() called"); - (((ActionBarProvider) getActivity()).getSupportActionBar()).setTitle("Arch Components Lifecycle Demo"); } @Override - protected void onDestroyView(@NonNull View view) { - super.onDestroyView(view); + protected void onDetach(@NonNull View view) { + Log.i(TAG, "Conductor: onDetach() called"); + super.onDetach(view); + } - Log.i(TAG, "onDestroyView() called"); + @Override + protected void onDestroyView(@NonNull View view) { + Log.i(TAG, "Conductor: onDestroyView() called"); + super.onDestroyView(view); unbinder.unbind(); unbinder = null; } @Override - protected void onDetach(@NonNull View view) { - super.onDetach(view); - - Log.i(TAG, "onDetach() called"); + protected void onContextUnavailable() { + Log.i(TAG, "Conductor: onContextUnavailable() called"); + super.onContextUnavailable(); } @Override public void onDestroy() { + Log.i(TAG, "Conductor: onDestroy() called"); super.onDestroy(); - Log.i(TAG, "onDestroy() called"); - if (hasExited) { DemoApplication.refWatcher.watch(this); } diff --git a/dependencies.gradle b/dependencies.gradle index 1f2d007..3704874 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -13,7 +13,7 @@ ext { rxLifecycleVersion = '0.8.0' rxLifecycle2Version = '2.0' autodisposeVersion = '0.8.0' - archComponentsVersion = '1.0.0-alpha3' + archComponentsVersion = '1.1.1' junitVersion = '4.11' roboelectricVersion = '3.0' lintVersion = '25.2.0'