From 94c817bbd903462f06f277735909e39896154696 Mon Sep 17 00:00:00 2001 From: Paul Woitaschek Date: Sat, 3 Jul 2021 21:40:43 +0200 Subject: [PATCH] Remove support for rxLifecycle2. --- README.md | 3 - conductor-modules/rxlifecycle2/build.gradle | 25 ---- .../rxlifecycle2/gradle.properties | 3 - .../rxlifecycle2/src/main/AndroidManifest.xml | 3 - .../rxlifecycle2/ControllerEvent.java | 14 --- .../ControllerLifecycleSubjectHelper.java | 71 ----------- .../conductor/rxlifecycle2/RxController.java | 49 -------- .../rxlifecycle2/RxControllerLifecycle.java | 43 ------- demo/build.gradle | 1 - .../demo/controllers/CityGridController.kt | 2 +- .../controllers/ExternalModulesController.kt | 15 ++- .../controllers/RxLifecycle2Controller.kt | 110 ------------------ demo/src/main/res/values/strings.xml | 1 - dependencies.gradle | 4 - settings.gradle | 1 - 15 files changed, 8 insertions(+), 337 deletions(-) delete mode 100644 conductor-modules/rxlifecycle2/build.gradle delete mode 100644 conductor-modules/rxlifecycle2/gradle.properties delete mode 100644 conductor-modules/rxlifecycle2/src/main/AndroidManifest.xml delete mode 100644 conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/ControllerEvent.java delete mode 100644 conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/ControllerLifecycleSubjectHelper.java delete mode 100644 conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/RxController.java delete mode 100644 conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/RxControllerLifecycle.java delete mode 100644 demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/RxLifecycle2Controller.kt diff --git a/README.md b/README.md index 436d3f5..7be48b8 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,6 @@ implementation 'com.bluelinelabs:conductor-viewpager:3.1.0' // ViewPager2 Adapter: implementation 'com.bluelinelabs:conductor-viewpager2:3.1.0' -// RxJava2 lifecycle support: -implementation 'com.bluelinelabs:conductor-rxlifecycle2:3.1.0' - // RxJava2 Autodispose support: implementation 'com.bluelinelabs:conductor-autodispose:3.1.0' diff --git a/conductor-modules/rxlifecycle2/build.gradle b/conductor-modules/rxlifecycle2/build.gradle deleted file mode 100644 index e0ab0a2..0000000 --- a/conductor-modules/rxlifecycle2/build.gradle +++ /dev/null @@ -1,25 +0,0 @@ -apply from: rootProject.file('dependencies.gradle') - -apply plugin: 'com.android.library' - -android { - compileSdkVersion rootProject.ext.compileSdkVersion - - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode Integer.parseInt(project.VERSION_CODE) - versionName project.VERSION_NAME - } -} - -dependencies { - api rootProject.ext.rxJava2 - api rootProject.ext.rxLifecycle2 - api rootProject.ext.rxLifecycleAndroid2 - - implementation project(':conductor') -} - -ext.artifactId = 'conductor-rxlifecycle2' -apply from: rootProject.file('gradle/publish.gradle') \ No newline at end of file diff --git a/conductor-modules/rxlifecycle2/gradle.properties b/conductor-modules/rxlifecycle2/gradle.properties deleted file mode 100644 index 217f881..0000000 --- a/conductor-modules/rxlifecycle2/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -POM_NAME=Conductor RxLifecycle2 Extensions -POM_ARTIFACT_ID=conductor-rxlifecycle2 -POM_PACKAGING=aar diff --git a/conductor-modules/rxlifecycle2/src/main/AndroidManifest.xml b/conductor-modules/rxlifecycle2/src/main/AndroidManifest.xml deleted file mode 100644 index c06173f..0000000 --- a/conductor-modules/rxlifecycle2/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/ControllerEvent.java b/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/ControllerEvent.java deleted file mode 100644 index f61d9bd..0000000 --- a/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/ControllerEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.bluelinelabs.conductor.rxlifecycle2; - -public enum ControllerEvent { - - CREATE, - CONTEXT_AVAILABLE, - CREATE_VIEW, - ATTACH, - DETACH, - DESTROY_VIEW, - CONTEXT_UNAVAILABLE, - DESTROY - -} diff --git a/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/ControllerLifecycleSubjectHelper.java b/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/ControllerLifecycleSubjectHelper.java deleted file mode 100644 index 42b6b46..0000000 --- a/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/ControllerLifecycleSubjectHelper.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.bluelinelabs.conductor.rxlifecycle2; - -import android.content.Context; -import androidx.annotation.NonNull; -import android.view.View; - -import com.bluelinelabs.conductor.Controller; -import com.trello.rxlifecycle2.OutsideLifecycleException; - -import io.reactivex.subjects.BehaviorSubject; - -public class ControllerLifecycleSubjectHelper { - private ControllerLifecycleSubjectHelper() { - } - - public static BehaviorSubject create(Controller controller) { - ControllerEvent initialState; - if (controller.isBeingDestroyed() || controller.isDestroyed()) { - throw new OutsideLifecycleException("Cannot bind to Controller lifecycle when outside of it."); - } else if (controller.isAttached()) { - initialState = ControllerEvent.ATTACH; - } else if (controller.getView() != null) { - initialState = ControllerEvent.CREATE_VIEW; - } else if (controller.getActivity() != null) { - initialState = ControllerEvent.CONTEXT_AVAILABLE; - } else { - initialState = ControllerEvent.CREATE; - } - - final BehaviorSubject subject = BehaviorSubject.createDefault(initialState); - - controller.addLifecycleListener(new Controller.LifecycleListener() { - @Override - public void preContextAvailable(@NonNull Controller controller) { - subject.onNext(ControllerEvent.CONTEXT_AVAILABLE); - } - - @Override - public void preCreateView(@NonNull Controller controller) { - subject.onNext(ControllerEvent.CREATE_VIEW); - } - - @Override - public void preAttach(@NonNull Controller controller, @NonNull View view) { - subject.onNext(ControllerEvent.ATTACH); - } - - @Override - public void preDetach(@NonNull Controller controller, @NonNull View view) { - subject.onNext(ControllerEvent.DETACH); - } - - @Override - public void preDestroyView(@NonNull Controller controller, @NonNull View view) { - subject.onNext(ControllerEvent.DESTROY_VIEW); - } - - @Override - public void preContextUnavailable(@NonNull Controller controller, @NonNull Context context) { - subject.onNext(ControllerEvent.CONTEXT_UNAVAILABLE); - } - - @Override - public void preDestroy(@NonNull Controller controller) { - subject.onNext(ControllerEvent.DESTROY); - } - }); - - return subject; - } -} diff --git a/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/RxController.java b/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/RxController.java deleted file mode 100644 index 06c155e..0000000 --- a/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/RxController.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.bluelinelabs.conductor.rxlifecycle2; - -import android.os.Bundle; -import androidx.annotation.CheckResult; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.bluelinelabs.conductor.Controller; -import com.trello.rxlifecycle2.LifecycleProvider; -import com.trello.rxlifecycle2.LifecycleTransformer; -import com.trello.rxlifecycle2.RxLifecycle; -import io.reactivex.Observable; -import io.reactivex.subjects.BehaviorSubject; - -/** - * A base {@link Controller} that can be used to expose lifecycle events using RxJava - */ -public abstract class RxController extends Controller implements LifecycleProvider { - private final BehaviorSubject lifecycleSubject; - - public RxController(){ - this(null); - } - - public RxController(@Nullable Bundle args) { - super(args); - lifecycleSubject = ControllerLifecycleSubjectHelper.create(this); - } - - @Override - @NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@NonNull ControllerEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxControllerLifecycle.bindController(lifecycleSubject); - } -} diff --git a/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/RxControllerLifecycle.java b/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/RxControllerLifecycle.java deleted file mode 100644 index d8bf7bf..0000000 --- a/conductor-modules/rxlifecycle2/src/main/java/com/bluelinelabs/conductor/rxlifecycle2/RxControllerLifecycle.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.bluelinelabs.conductor.rxlifecycle2; - -import androidx.annotation.NonNull; -import com.trello.rxlifecycle2.LifecycleTransformer; -import com.trello.rxlifecycle2.OutsideLifecycleException; -import com.trello.rxlifecycle2.RxLifecycle; -import io.reactivex.Observable; -import io.reactivex.functions.Function; - -public class RxControllerLifecycle { - - /** - * Binds the given source to a Controller lifecycle. This is the Controller version of - * {@link com.trello.rxlifecycle2.android.RxLifecycleAndroid#bindFragment(Observable)}. - * - * @param lifecycle the lifecycle sequence of a Controller - * @return a reusable {@link io.reactivex.ObservableTransformer} that unsubscribes the source during the Controller lifecycle - */ - public static LifecycleTransformer bindController(@NonNull final Observable lifecycle) { - return RxLifecycle.bind(lifecycle, CONTROLLER_LIFECYCLE); - } - - private static final Function CONTROLLER_LIFECYCLE = - new Function() { - @Override - public ControllerEvent apply(ControllerEvent lastEvent) { - switch (lastEvent) { - case CREATE: - return ControllerEvent.DESTROY; - case CONTEXT_AVAILABLE: - return ControllerEvent.CONTEXT_UNAVAILABLE; - case ATTACH: - return ControllerEvent.DETACH; - case CREATE_VIEW: - return ControllerEvent.DESTROY_VIEW; - case DETACH: - return ControllerEvent.DESTROY; - default: - throw new OutsideLifecycleException("Cannot bind to Controller lifecycle when outside of it."); - } - } - }; -} diff --git a/demo/build.gradle b/demo/build.gradle index d7092e0..5dcdee4 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -58,7 +58,6 @@ dependencies { implementation project(':conductor') implementation project(':conductor-modules:viewpager') implementation project(':conductor-modules:viewpager2') - implementation project(':conductor-modules:rxlifecycle2') implementation project(':conductor-modules:autodispose') implementation project(':conductor-modules:arch-components-lifecycle') implementation project(':conductor-modules:androidx-transition') diff --git a/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/CityGridController.kt b/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/CityGridController.kt index f830856..2a961ed 100644 --- a/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/CityGridController.kt +++ b/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/CityGridController.kt @@ -2,10 +2,10 @@ package com.bluelinelabs.conductor.demo.controllers import android.graphics.PorterDuff import android.os.Bundle -import android.support.annotation.DrawableRes import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.annotation.DrawableRes import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import androidx.recyclerview.widget.GridLayoutManager diff --git a/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/ExternalModulesController.kt b/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/ExternalModulesController.kt index efbfd44..f724da1 100644 --- a/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/ExternalModulesController.kt +++ b/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/ExternalModulesController.kt @@ -17,7 +17,9 @@ import com.bluelinelabs.conductor.demo.databinding.RowHomeBinding import com.bluelinelabs.conductor.demo.util.viewBinding class ExternalModulesController : BaseController(R.layout.controller_additional_modules) { - private val binding: ControllerAdditionalModulesBinding by viewBinding(ControllerAdditionalModulesBinding::bind) + private val binding: ControllerAdditionalModulesBinding by viewBinding( + ControllerAdditionalModulesBinding::bind + ) override val title = "External Module Demos" @@ -40,11 +42,6 @@ class ExternalModulesController : BaseController(R.layout.controller_additional_ .pushChangeHandler(FadeChangeHandler()) .popChangeHandler(FadeChangeHandler()) ) - ModuleModel.RX_LIFECYCLE_2 -> router.pushController( - with(RxLifecycle2Controller()) - .pushChangeHandler(FadeChangeHandler()) - .popChangeHandler(FadeChangeHandler()) - ) ModuleModel.ARCH_LIFECYCLE -> router.pushController( with(ArchLifecycleController()) .pushChangeHandler(FadeChangeHandler()) @@ -56,7 +53,6 @@ class ExternalModulesController : BaseController(R.layout.controller_additional_ private enum class ModuleModel(val title: String, @ColorRes val color: Int) { AUTODISPOSE("Autodispose", R.color.purple_300), - RX_LIFECYCLE_2("Rx Lifecycle 2", R.color.blue_grey_300), ARCH_LIFECYCLE("Arch Components Lifecycle", R.color.orange_300); } @@ -83,7 +79,10 @@ private class AdditionalModulesAdapter( ) : RecyclerView.ViewHolder(binding.root) { fun bind(item: ModuleModel) { binding.title.text = item.title - binding.dot.drawable.setColorFilter(ContextCompat.getColor(itemView.context, item.color), PorterDuff.Mode.SRC_ATOP) + binding.dot.drawable.setColorFilter( + ContextCompat.getColor(itemView.context, item.color), + PorterDuff.Mode.SRC_ATOP + ) itemView.setOnClickListener { modelClickListener(item) } } } diff --git a/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/RxLifecycle2Controller.kt b/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/RxLifecycle2Controller.kt deleted file mode 100644 index 0d591c1..0000000 --- a/demo/src/main/java/com/bluelinelabs/conductor/demo/controllers/RxLifecycle2Controller.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.bluelinelabs.conductor.demo.controllers - -import android.os.Bundle -import android.util.Log -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import com.bluelinelabs.conductor.RouterTransaction.Companion.with -import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler -import com.bluelinelabs.conductor.demo.R -import com.bluelinelabs.conductor.demo.ToolbarProvider -import com.bluelinelabs.conductor.demo.controllers.base.watchForLeaks -import com.bluelinelabs.conductor.demo.databinding.ControllerLifecycleBinding -import com.bluelinelabs.conductor.rxlifecycle2.ControllerEvent -import com.bluelinelabs.conductor.rxlifecycle2.RxController -import io.reactivex.Observable -import java.util.concurrent.TimeUnit - -// Shamelessly borrowed from the official RxLifecycle demo by Trello and adapted for Conductor Controllers -// instead of Activities or Fragments. -class RxLifecycle2Controller : RxController() { - - init { - watchForLeaks() - - // suppress is safe because of bindUntilEvent - @Suppress("CheckResult") - Observable.interval(1, TimeUnit.SECONDS) - .doOnDispose { Log.i(TAG, "Disposing from constructor") } - .compose(bindUntilEvent(ControllerEvent.DESTROY)) - .subscribe { num: Long -> - Log.i(TAG, "Started in constructor, running until onDestroy(): $num") - } - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup, - savedViewState: Bundle? - ): View { - Log.i(TAG, "onCreateView() called") - val binding = ControllerLifecycleBinding.inflate(inflater, container, false) - binding.title.text = binding.root.resources.getString(R.string.rxlifecycle_title, TAG) - - binding.nextReleaseView.setOnClickListener { - retainViewMode = RetainViewMode.RELEASE_DETACH - router.pushController( - with(TextController("Logcat should now report that the observables from onAttach() and onViewBound() have been disposed of, while the constructor observable is still running.")) - .pushChangeHandler(HorizontalChangeHandler()) - .popChangeHandler(HorizontalChangeHandler()) - ) - } - - binding.nextRetainView.setOnClickListener { - retainViewMode = RetainViewMode.RETAIN_DETACH - router.pushController( - with(TextController("Logcat should now report that the observables from onAttach() has been disposed of, while the constructor and onViewBound() observables are still running.")) - .pushChangeHandler(HorizontalChangeHandler()) - .popChangeHandler(HorizontalChangeHandler()) - ) - } - - // suppress is safe because of bindUntilEvent - @Suppress("CheckResult") - Observable.interval(1, TimeUnit.SECONDS) - .doOnDispose { Log.i(TAG, "Disposing from onCreateView()") } - .compose(bindUntilEvent(ControllerEvent.DESTROY_VIEW)) - .subscribe { num: Long -> - Log.i(TAG, "Started in onCreateView(), running until onDestroyView(): $num") - } - - return binding.root - } - - override fun onAttach(view: View) { - super.onAttach(view) - Log.i(TAG, "onAttach() called") - - (activity as ToolbarProvider).toolbar.title = "RxLifecycle2 Demo" - - // suppress is safe because of bindUntilEvent - @Suppress("CheckResult") - Observable.interval(1, TimeUnit.SECONDS) - .doOnDispose { Log.i(TAG, "Disposing from onAttach()") } - .compose(bindUntilEvent(ControllerEvent.DETACH)) - .subscribe { num: Long -> - Log.i(TAG, "Started in onAttach(), running until onDetach(): $num") - } - } - - override fun onDestroyView(view: View) { - super.onDestroyView(view) - Log.i(TAG, "onDestroyView() called") - } - - override fun onDetach(view: View) { - super.onDetach(view) - Log.i(TAG, "onDetach() called") - } - - public override fun onDestroy() { - super.onDestroy() - Log.i(TAG, "onDestroy() called") - } - - companion object { - private const val TAG = "RxLifecycleController" - } - -} \ No newline at end of file diff --git a/demo/src/main/res/values/strings.xml b/demo/src/main/res/values/strings.xml index f359294..fd5f113 100644 --- a/demo/src/main/res/values/strings.xml +++ b/demo/src/main/res/values/strings.xml @@ -30,7 +30,6 @@ Elastic scrolling view - scroll past bounds to dismiss. - Watch tag %1$s on logcat for a demo. Push Controller, retaining this View Push Controller, releasing this View diff --git a/dependencies.gradle b/dependencies.gradle index a17a4eb..7599400 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -5,7 +5,6 @@ ext { picassoVersion = '2.5.2' rxJava2Version = '2.1.14' - rxLifecycle2Version = '2.2.1' autodisposeVersion = '1.0.0' archComponentsVersion = '2.3.1' junitVersion = '4.12' @@ -35,9 +34,6 @@ ext { rxJava2 = "io.reactivex.rxjava2:rxjava:$rxJava2Version" - rxLifecycle2 = "com.trello.rxlifecycle2:rxlifecycle:$rxLifecycle2Version" - rxLifecycleAndroid2 = "com.trello.rxlifecycle2:rxlifecycle-android:$rxLifecycle2Version" - autodispose = "com.uber.autodispose:autodispose:$autodisposeVersion" autodisposeLifecycle = "com.uber.autodispose:autodispose-lifecycle:$autodisposeVersion" autodisposeKtx = "com.uber.autodispose:autodispose-ktx:$autodisposeVersion" diff --git a/settings.gradle b/settings.gradle index 4c1f130..8a5575c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,6 @@ include ':conductor' include ':conductor-lint' include ':conductor-modules:viewpager' include ':conductor-modules:viewpager2' -include ':conductor-modules:rxlifecycle2' include ':conductor-modules:autodispose' include ':conductor-modules:arch-components-lifecycle' include ':conductor-modules:androidx-transition'