2019-02-19 05:22:45 -08:00
package cash.z.android.wallet.ui.fragment
import android.os.Bundle
import android.view.View
import android.widget.ProgressBar
import androidx.annotation.IdRes
import cash.z.android.wallet.ui.presenter.ProgressPresenter
import cash.z.android.wallet.ui.util.AnimatorCompleteListener
import kotlinx.coroutines.launch
abstract class ProgressFragment ( @IdRes private val progressBarId : Int ) : BaseFragment ( ) ,
ProgressPresenter . ProgressView {
private lateinit var progressPresenter : ProgressPresenter
private lateinit var progressBar : ProgressBar
override fun onViewCreated ( view : View , savedInstanceState : Bundle ? ) {
super . onViewCreated ( view , savedInstanceState )
progressBar = view . findViewById ( progressBarId )
2019-02-19 10:09:53 -08:00
// progressBar.visibility = View.INVISIBLE
2019-02-19 05:22:45 -08:00
}
override fun onActivityCreated ( savedInstanceState : Bundle ? ) {
super . onActivityCreated ( savedInstanceState )
progressPresenter = ProgressPresenter ( this , mainActivity . synchronizer )
}
override fun onResume ( ) {
super . onResume ( )
launch {
progressPresenter . start ( )
}
}
override fun onPause ( ) {
super . onPause ( )
progressPresenter . stop ( )
}
override fun showProgress ( progress : Int ) {
if ( progress >= 100 ) {
onProgressComplete ( )
progressBar . animate ( ) . alpha ( 0.0f ) . apply {
duration = 250L
setListener ( AnimatorCompleteListener {
progressBar . visibility = View . GONE
} )
}
2019-02-19 10:09:53 -08:00
} else if ( progress > 0 && progressBar . visibility != View . VISIBLE ) {
progressBar . visibility = View . VISIBLE
2019-02-19 05:22:45 -08:00
}
progressBar . progress = progress
}
2019-02-19 10:09:53 -08:00
// TODO: replace this quick and dirty logic with something permanent
open fun getProgressText ( progress : Int ) : String {
if ( mainActivity == null ) return " "
// cycle twice
val factor = 100 / ( mainActivity . loadMessages . size * 2 )
val index = ( progress / factor ) . rem ( mainActivity . loadMessages . size )
var message = " $progress % ${mainActivity.nextLoadMessage(index)} "
if ( progress > 98 ) message = " Done! "
if ( progress >= 50 ) message = message . replace ( " Zooko " , " Zooko AGAIN " , true ) . replace ( " Learning to spell " , " Double-checking the spelling of " ) . replace ( " the kool " , " MORE kool " , true ) . replace ( " Making the sausage " , " Getting a little hangry by now! " , true )
return message
}
2019-02-19 05:22:45 -08:00
open fun onProgressComplete ( ) { }
}