FromTo

Additional

Language
Kotlin
Version
v0.5.3 (Feb 25, 2016)
Created
Dec 11, 2015
Updated
Feb 25, 2016 (Retired)
Owner
Jaewe Heo (importre)
Contributor
Jaewe Heo (importre)
1
Activity
Badge
Generate
Download
Source code

Show card

FromTo

FromTo is a helper library that makes it simple to handle asynchronous actions with views for Android and Java/Kotlin.

This library is written in Kotlin. But it's interoperable with Java.

Installation

Set to your build.gradle.

repositories {
    jcenter()
}

dependencies {
    compile 'io.github.importre:fromto:<version>'
}

Getting Started

// make your job
val job = Observable.just(1)
        .subscribeOn(Schedulers.newThread())

// define an action and handlers you want
val action1 = FtAction.Builder<Int>()
        .from(job)
        .to { println(it) }
        .build()

val fromTo = FromTo.create(action1/*, more if you want */)

// attach `view`(FtView) related with fromTo's lifecycle
fromTo.attach(view).execute()

// you can know `loading` state via `view`

// detach when `view` is destroyed
fromTo.detach()

Basically FromTo has an FtAction or more. (You can think that Given some actions, FromTo can execute all actions asynchronously. And FromTo notifies corresponding view of the loading state via FtView interface.FtAction is a wrapper class of rx.Observable.)


  • Synchronous or asynchronous action
    • Actually it's up to observable's schedule as you know.
  • The state is true if one of actions is working.

See details in Kotlin example

Example

See examples.

Test

./gradlew test

Why should I use it?

FromTo is useful when developing an app, which has lifecycle by itself. In Android world, for example, An Activity(or a Fragment) can take some heavy tasks such as Network, DB, File I/O and/or something.

Assume that you are in two conditions.

  • two tasks are working asynchronously,
  • you have to show ProgressBar if started, hide it if finished.

In these cases, how do you resolve this problem if your screen is rotated? I know and you know some solutions.

  • Do nothing.
    • Easy but bad UX. Everything will be always reloaded.
  • Prevent recreating activity.
    • Using android:configChanges of <activity> element. It's very easy but the layout is not flexible(on tablet especially).
  • Use AsyncTask, Handler or whatever. And Store/Restore data
    • Inconvenient, verbose 😭
  • Set Fragment.setRetainInstance(true)
    • The fragment is not recreated/destroyed. So the fragment can store what you want although parent activity is recreated.
    • It's good. But some guys wouldn't like to use Fragment.
  • Use RxJava
    • Observable's cache() is a blessing. 🎉
    • See Lifecycle section of this post.
  • I thought that RxJava is the best solution because it's very simple and convenient. But I realized that there are still boilerplate codes. So I implemented FromTo simply.

    License

    Apache 2.0 © Jaewe Heo