crystal-wallet-android/app/src/main/java/cy/agorise/crystalwallet/activities/LoadingActivity.kt

263 lines
5.9 KiB
Kotlin

package cy.agorise.crystalwallet.activities
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import butterknife.ButterKnife
import kotlinx.android.synthetic.main.loading_activity.*
import android.view.animation.AnimationUtils
import android.widget.ImageView
import butterknife.BindView
import cy.agorise.crystalwallet.R
/*
* This activity is to show a loading window when it is needed
* */
class LoadingActivity : CustomActivity() {
@BindView(R.id.imageviewLoading)
lateinit var imageviewLoading:ImageView
override fun onCreate(savedInstanceState: Bundle?) {
/*
* Construct the parent
* */
super.onCreate(savedInstanceState)
/*
* If the window was closed before be created so finish it
* */
if(destroyWindow!!){
finish()
}
/*
* Assign the view to this controller
* */
setContentView(cy.agorise.crystalwallet.R.layout.loading_activity)
/*
* Save the current activity
* */
currentActivity = this
/*
* If has to manage timer
* */
if(LoadingActivity.seconds != -1){
/*
* */
Handler().postDelayed({
/*
* Reset flag
* */
LoadingActivity.seconds = -1
finish() //Finish the current window
}, (LoadingActivity.seconds * 1000).toLong())
}
/*
* Initialice butterknife MVC
* */
ButterKnife.bind(this)
/*
* If has to change the loading sizes so
* */
if(loadinIconChangeSize){
imageviewLoading.layoutParams.width = loadingIconWidth
imageviewLoading.layoutParams.height = loadingIconHeigt
}
/*
* Rotate the image
* */
val rotation = AnimationUtils.loadAnimation(this, cy.agorise.crystalwallet.R.anim.rotate360)
imageviewLoading.startAnimation(rotation)
/*
* If listener is set deliver response
* */
if(onLoadingReady != null){
onLoadingReady!!.onLoadingReady()
}
}
/*
* This events hires when the window is destroyed
* */
override fun onDestroy() {
super.onDestroy()
/*
* If listener is set deliver response
* */
if(onLoadingClosed != null){
onLoadingClosed?.onLoadingClosed()
}
}
override fun onResume() {
super.onResume()
/*
* If the window was closed before be created so finish it
* */
if(destroyWindow!!){
finish()
}
}
/*
* Static methods
* */
companion object {
/*
* Contains the activity shown
* */
private var currentActivity: Activity? = null
/*
* Flag to validate if the window has to finish or not
* */
private var destroyWindow:Boolean? = false
/*
* Listener when the loading window is closed
* */
private var onLoadingClosed:LoadingClosed? = null
/*
* Listener when the loading window is resume
* */
private var onLoadingReady:LoadingReady? = null
/*
* Contains the seconds to finish the window in case of timer
* */
private var seconds:Int = -1
/*
* Contains the icon loading size
* */
private var loadingIconWidth:Int = -1
private var loadingIconHeigt:Int = -1
private var loadinIconChangeSize:Boolean = false
/*
* Show the loading activity
* */
@JvmStatic
open fun show(activity: Activity) {
if(activity!=null){
/*
* If it is not visible
* */
if(currentActivity==null){
/*
* Reset flags
* */
destroyWindow = false
/*
* Show the loading activity
* */
val intent = Intent(activity, LoadingActivity::class.java)
activity.startActivity(intent)
}
}
}
/*
* Dismiss the loading activity
* */
@JvmStatic
open fun dismiss() {
if(currentActivity!=null){
/*
* Close the activity
* */
currentActivity?.finish()
/*
* Reset flags
* */
loadinIconChangeSize = false
currentActivity = null
destroyWindow = true
}
}
/*
* Change the loading icon size
* */
@JvmStatic
open fun loadingIconSize(width:Int,heigth:Int) {
/*
* The loading icon size wil change
* */
loadinIconChangeSize = true
/*
* Save the sizes
* */
loadingIconWidth = width
loadingIconHeigt = heigth
}
/*
* When the loading window is closed
* */
@JvmStatic
open fun onLoadingClosed(onLoadingClose: LoadingClosed) {
this.onLoadingClosed = onLoadingClose
}
/*
* When the loading window is up and visible
* */
@JvmStatic
open fun onLoadingReady(onLoadingResume:LoadingReady) {
this.onLoadingReady = onLoadingResume
}
/*
* Timer to close the window
* */
@JvmStatic
open fun closeOnTime(seconds:Int) {
LoadingActivity.seconds = seconds
}
}
/*
* Interface for all the events
* */
interface LoadingClosed{
fun onLoadingClosed()
}
interface LoadingReady{
fun onLoadingReady()
}
}