crystal-wallet-android/app/src/main/java/cy/agorise/crystalwallet/dialogs/material/DialogMaterial.kt

165 lines
3.8 KiB
Kotlin

package cy.agorise.crystalwallet.dialogs.material
import android.app.Activity
import com.afollestad.materialdialogs.MaterialDialog
import cy.agorise.crystalwallet.R
/*
*
* Controls the custom implementarion for all kind of material dialogs
* Reference in: https://github.com/afollestad/material-dialogs
*
* */
open abstract class DialogMaterial{
protected var builder: MaterialDialog.Builder //Contains the builder
protected lateinit var materialDialog: MaterialDialog //Contains the controller for the dialog
/*
* Contains the activity
* */
protected var activity:Activity;
/*
* Contains pointer to myself
* */
protected var dialogMaterial:DialogMaterial;
/*
* Contains the response for positive button click
* */
protected var positiveResponse:PositiveResponse? = null
/*
* Contains the response for negative button click
* */
protected var negativeResponse:NegativeResponse? = null
constructor(activity: Activity) {
/*
* Save the activity
* */
this.activity = activity
dialogMaterial = this;
/*
* Init the builder
* */
builder = MaterialDialog.Builder(activity)
builder.cancelable(false)
}
/*
* Show the dialog
* */
fun show() {
/*
* If user wants positive and negative
* */
if(positiveResponse != null && negativeResponse != null){
/*
* Add positve
* */
builder.positiveText(activity.resources.getString(R.string.ok))
builder.onPositive { dialog, which ->
/*
* If response is not null deliver response
* */
if(positiveResponse != null){
positiveResponse!!.onPositive()
}
}
/*
* Add negative
* */
builder.negativeText(activity.resources.getString(R.string.cancel))
builder.onNegative { dialog, which ->
/*
* If response is not null deliver response
* */
if(negativeResponse != null){
negativeResponse!!.onNegative(dialogMaterial)
}
}
}
/*
* If user wants positive button
* */
if(positiveResponse != null){
builder.positiveText(activity.resources.getString(R.string.ok))
builder.onPositive { dialog, which ->
/*
* If response is not null deliver response
* */
if(positiveResponse != null){
positiveResponse!!.onPositive()
}
}
}
/*
* Build internal material dialog, this lets to show it
* */
this.build()
/*
* Show the dialog
* */
materialDialog.show()
}
/*
* Close the dialog
* */
fun dismiss() {
this.materialDialog.dismiss()
}
/*
* After the class is completed as needed, we need to call this method to join all together after show the
* childs implementations
* */
open fun build() {
this.materialDialog = this.builder.build()
}
/*
* Set indeterminate progress
*
* */
open fun progress(){
this.builder.progress(true, 0)
}
/*
* Setters and getters
* */
fun setText(message: String) {
this.builder.content(message)
}
fun setOnPositive(onPositive:PositiveResponse){
this.positiveResponse = onPositive
}
fun setOnNegative(onNegative:NegativeResponse){
this.negativeResponse = onNegative
}
fun setTitle(title: String) {
this.builder.title(title)
}
/*
* End of setters and getters
* */
}