From ad87605951ae8033d278b04a7fc91bc2223cb476 Mon Sep 17 00:00:00 2001 From: Dell <2307vivek@gmail.com> Date: Wed, 30 Sep 2020 19:35:09 +0530 Subject: [PATCH 1/5] updated dependencies and configured kotlin. --- MaterialDialogLibrary/build.gradle | 8 +++++++- app/build.gradle | 22 ++++++++++++++-------- build.gradle | 6 ++++-- gradle/wrapper/gradle-wrapper.properties | 2 +- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/MaterialDialogLibrary/build.gradle b/MaterialDialogLibrary/build.gradle index 3742b51..8c8e874 100644 --- a/MaterialDialogLibrary/build.gradle +++ b/MaterialDialogLibrary/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' apply plugin: 'com.github.dcendents.android-maven' apply plugin: "com.jfrog.bintray" @@ -41,6 +42,8 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation "androidx.core:core-ktx:+" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } ext { bintrayRepo = 'maven' @@ -159,4 +162,7 @@ bintray { } apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' -apply plugin: 'com.jfrog.bintray' \ No newline at end of file +apply plugin: 'com.jfrog.bintray' +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f0827cc..17a03c4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,12 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' android { - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { applicationId "com.shreyaspatil.MaterialDialogExample" minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -20,20 +21,25 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation "androidx.core:core-ktx:1.3.1" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.1' // Material Dialog Library implementation 'com.shreyaspatil:MaterialDialog:2.1' // Material Design Library - implementation 'com.google.android.material:material:1.0.0' + implementation 'com.google.android.material:material:1.2.1' // Lottie Animation Library implementation 'com.airbnb.android:lottie:3.3.0' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + testImplementation 'junit:junit:4.13' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' //implementation project(path: ':MaterialDialogLibrary') } +repositories { + mavenCentral() +} diff --git a/build.gradle b/build.gradle index 87c06c0..8808e21 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,16 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext.kotlin_version = '1.4.10' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' - + classpath 'com.android.tools.build:gradle:4.0.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2124f08..228c789 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip From 5e92ae29aee827ad7ca8b32244674a0cc89f3d81 Mon Sep 17 00:00:00 2001 From: Dell <2307vivek@gmail.com> Date: Wed, 30 Sep 2020 19:54:33 +0530 Subject: [PATCH 2/5] updated dependencies and configured kotlin (library module). --- MaterialDialogLibrary/build.gradle | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/MaterialDialogLibrary/build.gradle b/MaterialDialogLibrary/build.gradle index 8c8e874..0d05e9e 100644 --- a/MaterialDialogLibrary/build.gradle +++ b/MaterialDialogLibrary/build.gradle @@ -29,21 +29,21 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation "androidx.core:core-ktx:1.3.1" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.1' implementation 'androidx.annotation:annotation:1.1.0' // Material Design Library - implementation 'com.google.android.material:material:1.0.0' + implementation 'com.google.android.material:material:1.2.1' // Lottie Animation Library implementation 'com.airbnb.android:lottie:3.3.0' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - implementation "androidx.core:core-ktx:+" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + testImplementation 'junit:junit:4.13' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } ext { bintrayRepo = 'maven' From afdc790a9853b9774c77960e3907b65350ca2457 Mon Sep 17 00:00:00 2001 From: Dell <2307vivek@gmail.com> Date: Thu, 1 Oct 2020 14:56:36 +0530 Subject: [PATCH 3/5] migrated the project to kotlin. --- MaterialDialogLibrary/build.gradle | 5 +- .../MaterialDialog/AbstractDialog.java | 330 ------------------ .../MaterialDialog/AbstractDialog.kt | 254 ++++++++++++++ .../BottomSheetMaterialDialog.java | 224 ------------ .../BottomSheetMaterialDialog.kt | 83 +++++ .../shreyaspatil/MaterialDialog/DslBuilder.kt | 31 ++ .../MaterialDialog/MaterialDialog.java | 169 --------- .../MaterialDialog/MaterialDialog.kt | 49 +++ .../interfaces/DialogInterface.java | 6 - .../interfaces/DialogInterface.kt | 6 + .../interfaces/OnCancelListener.java | 5 - .../interfaces/OnCancelListener.kt | 5 + .../interfaces/OnDismissListener.java | 5 - .../interfaces/OnDismissListener.kt | 5 + .../interfaces/OnShowListener.java | 5 - .../interfaces/OnShowListener.kt | 5 + .../MaterialDialog/model/DialogBuilder.kt | 85 +++++ .../MaterialDialog/model/DialogButton.java | 27 -- .../MaterialDialog/model/DialogButton.kt | 10 + .../main/res/layout/layout_alert_dialog.xml | 12 +- app/build.gradle | 5 +- .../MaterialDialogExample/MainActivity.java | 161 --------- .../MaterialDialogExample/MainActivity.kt | 113 ++++++ 23 files changed, 662 insertions(+), 938 deletions(-) delete mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/AbstractDialog.java create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/AbstractDialog.kt delete mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/BottomSheetMaterialDialog.java create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/BottomSheetMaterialDialog.kt create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/DslBuilder.kt delete mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/MaterialDialog.java create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/MaterialDialog.kt delete mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/DialogInterface.java create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/DialogInterface.kt delete mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnCancelListener.java create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnCancelListener.kt delete mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnDismissListener.java create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnDismissListener.kt delete mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnShowListener.java create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnShowListener.kt create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogBuilder.kt delete mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogButton.java create mode 100644 MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogButton.kt delete mode 100644 app/src/main/java/com/shreyaspatil/MaterialDialogExample/MainActivity.java create mode 100644 app/src/main/java/com/shreyaspatil/MaterialDialogExample/MainActivity.kt diff --git a/MaterialDialogLibrary/build.gradle b/MaterialDialogLibrary/build.gradle index 0d05e9e..728e078 100644 --- a/MaterialDialogLibrary/build.gradle +++ b/MaterialDialogLibrary/build.gradle @@ -1,16 +1,17 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' apply plugin: 'com.github.dcendents.android-maven' apply plugin: "com.jfrog.bintray" version = "2.1" android { - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { minSdkVersion 19 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName version diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/AbstractDialog.java b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/AbstractDialog.java deleted file mode 100644 index 601e3ba..0000000 --- a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/AbstractDialog.java +++ /dev/null @@ -1,330 +0,0 @@ -package com.shreyaspatil.MaterialDialog; - -import android.app.Activity; -import android.app.Dialog; -import android.content.res.ColorStateList; -import android.content.res.Configuration; -import android.content.res.TypedArray; -import android.os.Build; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RawRes; -import androidx.core.content.ContextCompat; - -import com.airbnb.lottie.LottieAnimationView; -import com.google.android.material.button.MaterialButton; -import com.shreyaspatil.MaterialDialog.interfaces.DialogInterface; -import com.shreyaspatil.MaterialDialog.interfaces.OnCancelListener; -import com.shreyaspatil.MaterialDialog.interfaces.OnDismissListener; -import com.shreyaspatil.MaterialDialog.interfaces.OnShowListener; -import com.shreyaspatil.MaterialDialog.model.DialogButton; - -public class AbstractDialog implements DialogInterface { - - //Constants - public static final int BUTTON_POSITIVE = 1; - public static final int BUTTON_NEGATIVE = -1; - public static final int NO_ICON = -111; - public static final int NO_ANIMATION = -111; - - protected Dialog mDialog; - protected Activity mActivity; - protected String title; - protected String message; - protected boolean mCancelable; - protected DialogButton mPositiveButton; - protected DialogButton mNegativeButton; - protected int mAnimationResId; - protected String mAnimationFile; - protected LottieAnimationView mAnimationView; - - protected OnDismissListener mOnDismissListener; - protected OnCancelListener mOnCancelListener; - protected OnShowListener mOnShowListener; - - - protected AbstractDialog(@NonNull Activity mActivity, - @NonNull String title, - @NonNull String message, - boolean mCancelable, - @NonNull DialogButton mPositiveButton, - @NonNull DialogButton mNegativeButton, - @RawRes int mAnimationResId, - @NonNull String mAnimationFile) { - this.mActivity = mActivity; - this.title = title; - this.message = message; - this.mCancelable = mCancelable; - this.mPositiveButton = mPositiveButton; - this.mNegativeButton = mNegativeButton; - this.mAnimationResId = mAnimationResId; - this.mAnimationFile = mAnimationFile; - } - - protected View createView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) { - // Inflate and set the layout for the dialog - // Pass null as the parent view because its going in the dialog layout - final View dialogView = inflater.inflate(R.layout.layout_alert_dialog, container, false); - - // Initialize Views - TextView mTitleView = dialogView.findViewById(R.id.textView_title); - TextView mMessageView = dialogView.findViewById(R.id.textView_message); - MaterialButton mPositiveButtonView = dialogView.findViewById(R.id.button_positive); - MaterialButton mNegativeButtonView = dialogView.findViewById(R.id.button_negative); - mAnimationView = dialogView.findViewById(R.id.animation_view); - - // Set Title - if (title != null) { - mTitleView.setVisibility(View.VISIBLE); - mTitleView.setText(title); - } else { - mTitleView.setVisibility(View.GONE); - } - - // Set Message - if (message != null) { - mMessageView.setVisibility(View.VISIBLE); - mMessageView.setText(message); - } else { - mMessageView.setVisibility(View.GONE); - } - - // Set Positive Button - if (mPositiveButton != null) { - mPositiveButtonView.setVisibility(View.VISIBLE); - mPositiveButtonView.setText(mPositiveButton.getTitle()); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && mPositiveButton.getIcon() != NO_ICON) { - mPositiveButtonView.setIcon(mActivity.getDrawable(mPositiveButton.getIcon())); - } - - mPositiveButtonView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - mPositiveButton.getOnClickListener().onClick(AbstractDialog.this, BUTTON_POSITIVE); - } - }); - } else { - mPositiveButtonView.setVisibility(View.INVISIBLE); - } - - // Set Negative Button - if (mNegativeButton != null) { - mNegativeButtonView.setVisibility(View.VISIBLE); - mNegativeButtonView.setText(mNegativeButton.getTitle()); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && mNegativeButton.getIcon() != NO_ICON) { - mNegativeButtonView.setIcon(mActivity.getDrawable(mNegativeButton.getIcon())); - } - - mNegativeButtonView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - mNegativeButton.getOnClickListener().onClick(AbstractDialog.this, BUTTON_NEGATIVE); - } - }); - } else { - mNegativeButtonView.setVisibility(View.INVISIBLE); - } - - // If Orientation is Horizontal, Hide AnimationView - int orientation = mActivity.getResources().getConfiguration().orientation; - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { - mAnimationView.setVisibility(View.GONE); - } else { - // Set Animation from Resource - if (mAnimationResId != NO_ANIMATION) { - mAnimationView.setVisibility(View.VISIBLE); - mAnimationView.setAnimation(mAnimationResId); - mAnimationView.playAnimation(); - - // Set Animation from Assets File - } else if (mAnimationFile != null) { - mAnimationView.setVisibility(View.VISIBLE); - mAnimationView.setAnimation(mAnimationFile); - mAnimationView.playAnimation(); - - } else { - mAnimationView.setVisibility(View.GONE); - } - } - - // Apply Styles - TypedArray a = mActivity.getTheme().obtainStyledAttributes(R.styleable.MaterialDialog); - - try { - // Set Dialog Background - dialogView.setBackgroundColor( - a.getColor(R.styleable.MaterialDialog_material_dialog_background, - mActivity.getResources().getColor(R.color.material_dialog_background))); - - // Set Title Text Color - mTitleView.setTextColor( - a.getColor(R.styleable.MaterialDialog_material_dialog_title_text_color, - mActivity.getResources().getColor(R.color.material_dialog_title_text_color))); - - // Set Message Text Color - mMessageView.setTextColor( - a.getColor(R.styleable.MaterialDialog_material_dialog_message_text_color, - mActivity.getResources().getColor((R.color.material_dialog_message_text_color)))); - - // Set Positive Button Icon Tint - ColorStateList mPositiveButtonTint = a.getColorStateList( - R.styleable.MaterialDialog_material_dialog_positive_button_text_color); - - if (mPositiveButtonTint == null) { - mPositiveButtonTint = ContextCompat.getColorStateList( - mActivity.getApplicationContext(), - R.color.material_dialog_positive_button_text_color); - } - mPositiveButtonView.setTextColor(mPositiveButtonTint); - mPositiveButtonView.setIconTint(mPositiveButtonTint); - - // Set Negative Button Icon & Text Tint - ColorStateList mNegativeButtonTint = a.getColorStateList( - R.styleable.MaterialDialog_material_dialog_negative_button_text_color); - - if (mNegativeButtonTint == null) { - mNegativeButtonTint = ContextCompat.getColorStateList( - mActivity.getApplicationContext(), - R.color.material_dialog_negative_button_text_color); - } - mNegativeButtonView.setIconTint(mNegativeButtonTint); - mNegativeButtonView.setTextColor(mNegativeButtonTint); - - // Set Positive Button Background Tint - ColorStateList mBackgroundTint = a.getColorStateList( - R.styleable.MaterialDialog_material_dialog_positive_button_color); - - if (mBackgroundTint == null) { - mBackgroundTint = ContextCompat.getColorStateList( - mActivity.getApplicationContext(), - R.color.material_dialog_positive_button_color); - } - mPositiveButtonView.setBackgroundTintList(mBackgroundTint); - if (mBackgroundTint != null) { - mNegativeButtonView.setRippleColor(mBackgroundTint.withAlpha(75)); - } - - } catch (Exception e) { - e.printStackTrace(); - } finally { - a.recycle(); - } - - return dialogView; - } - - /** - * Displays the Dialog - */ - public void show() { - if (mDialog != null) { - mDialog.show(); - } else { - throwNullDialog(); - } - } - - /** - * Cancels the Dialog - */ - @Override - public void cancel() { - if (mDialog != null) { - mDialog.cancel(); - } else { - throwNullDialog(); - } - } - - /** - * Dismisses the Dialog - */ - @Override - public void dismiss() { - if (mDialog != null) { - mDialog.dismiss(); - } else { - throwNullDialog(); - } - } - - /** - * @param onShowListener interface for callback events when dialog is showed. - */ - public void setOnShowListener(@NonNull final OnShowListener onShowListener) { - this.mOnShowListener = onShowListener; - - mDialog.setOnShowListener(new android.content.DialogInterface.OnShowListener() { - @Override - public void onShow(android.content.DialogInterface dialogInterface) { - showCallback(); - } - }); - } - - /** - * @param onCancelListener interface for callback events when dialog is cancelled. - */ - public void setOnCancelListener(@NonNull final OnCancelListener onCancelListener) { - this.mOnCancelListener = onCancelListener; - - mDialog.setOnCancelListener(new android.content.DialogInterface.OnCancelListener() { - @Override - public void onCancel(android.content.DialogInterface dialogInterface) { - cancelCallback(); - } - }); - } - - /** - * @param onDismissListener interface for callback events when dialog is dismissed; - */ - public void setOnDismissListener(@NonNull final OnDismissListener onDismissListener) { - this.mOnDismissListener = onDismissListener; - - mDialog.setOnDismissListener(new android.content.DialogInterface.OnDismissListener() { - @Override - public void onDismiss(android.content.DialogInterface dialogInterface) { - dismissCallback(); - } - }); - } - - /** - * @return {@link LottieAnimationView} from the Dialog. - */ - public LottieAnimationView getAnimationView() { - return mAnimationView; - } - - private void showCallback() { - if (mOnShowListener != null) { - mOnShowListener.onShow(this); - } - } - - private void dismissCallback() { - if (mOnDismissListener != null) { - mOnDismissListener.onDismiss(this); - } - } - - private void cancelCallback() { - if (mOnCancelListener != null) { - mOnCancelListener.onCancel(this); - } - } - - private void throwNullDialog() { - throw new NullPointerException("Called method on null Dialog. Create dialog using `Builder` before calling on Dialog"); - } - - public interface OnClickListener { - void onClick(DialogInterface dialogInterface, int which); - } -} diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/AbstractDialog.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/AbstractDialog.kt new file mode 100644 index 0000000..9c83398 --- /dev/null +++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/AbstractDialog.kt @@ -0,0 +1,254 @@ +package com.shreyaspatil.MaterialDialog + +import android.app.Activity +import android.app.Dialog +import android.content.res.Configuration +import android.os.Build +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.content.ContextCompat +import com.airbnb.lottie.LottieAnimationView +import com.shreyaspatil.MaterialDialog.interfaces.DialogInterface +import com.shreyaspatil.MaterialDialog.interfaces.OnCancelListener +import com.shreyaspatil.MaterialDialog.interfaces.OnDismissListener +import com.shreyaspatil.MaterialDialog.interfaces.OnShowListener +import com.shreyaspatil.MaterialDialog.model.DialogButton +import kotlinx.android.synthetic.main.layout_alert_dialog.view.* + +abstract class AbstractDialog( + private val mActivity: Activity, + private val title: String?, + private val message: String?, + private val mPositiveButton: DialogButton?, + private val mNegativeButton: DialogButton?, + private val mAnimationResId: Int?, + private val mAnimationFile: String? +) : DialogInterface { + + companion object { + //Constants + const val BUTTON_POSITIVE = 1 + const val BUTTON_NEGATIVE = -1 + const val NO_ICON = -111 + const val NO_ANIMATION = -111 + } + + private lateinit var mAnimationView: LottieAnimationView + protected var mDialog: Dialog? = null + + private lateinit var mOnDismissListener: OnDismissListener + private lateinit var mOnCancelListener: OnCancelListener + private lateinit var mOnShowListener: OnShowListener + + protected fun createView(inflater: LayoutInflater, container: ViewGroup?): View { + // Inflate and set the layout for the dialog + // Pass null as the parent view because its going in the dialog layout + val dialogView = inflater.inflate(R.layout.layout_alert_dialog, container, false) + + // Initialize Views + val mTitleView = dialogView.textView_title + val mMessageView = dialogView.textView_message + val mPositiveButtonView = dialogView.button_positive + val mNegativeButtonView = dialogView.button_negative + mAnimationView = dialogView.animation_view + + // Set Title + title?.let { + mTitleView.apply { + visibility = View.VISIBLE + text = it + } + } + + // set message + message?.let { + mMessageView.apply { + visibility = View.VISIBLE + text = it + } + } + + // Set positive button + mPositiveButton?.let { + mPositiveButtonView.apply { + visibility = View.VISIBLE + text = it.title + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && it.icon != NO_ICON) { + icon = ContextCompat.getDrawable(mActivity, it.icon) + } + setOnClickListener { mPositiveButton.onClick(this@AbstractDialog, BUTTON_POSITIVE) } + } + } + + // Set negative button + mNegativeButton?.let { + mNegativeButtonView.apply { + visibility = View.VISIBLE + text = it.title + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && it.icon != NO_ICON) { + icon = ContextCompat.getDrawable(mActivity, it.icon) + } + setOnClickListener { mNegativeButton.onClick(this@AbstractDialog, BUTTON_NEGATIVE) } + } + } + + // If Orientation is Horizontal, Hide AnimationView + val orientation = mActivity.resources.configuration.orientation + mAnimationView.apply { + if (orientation == Configuration.ORIENTATION_LANDSCAPE){ + visibility = View.GONE + } else { + // Set Animation from Resource + when { + mAnimationResId != NO_ANIMATION -> { + visibility = View.VISIBLE + setAnimation(mAnimationResId!!) + playAnimation() + + } + mAnimationFile != null -> { + // Set Animation from Assets File + visibility = View.VISIBLE + setAnimation(mAnimationFile) + playAnimation() + } + else -> visibility = View.GONE + } + } + } + + // Apply Styles + val a = mActivity.theme.obtainStyledAttributes(R.styleable.MaterialDialog) + + try { + // Set Dialog Background + dialogView.setBackgroundColor( + a.getColor(R.styleable.MaterialDialog_material_dialog_background, + ContextCompat.getColor(mActivity, R.color.material_dialog_background))) + + // Set Title Text Color + mTitleView.setTextColor( + a.getColor(R.styleable.MaterialDialog_material_dialog_title_text_color, + ContextCompat.getColor(mActivity, R.color.material_dialog_title_text_color))) + + // Set Message Text Color + mMessageView.setTextColor( + a.getColor(R.styleable.MaterialDialog_material_dialog_message_text_color, + ContextCompat.getColor(mActivity, R.color.material_dialog_message_text_color))) + + // Set Positive Button Icon Tint + var mPositiveButtonTint = a.getColorStateList( + R.styleable.MaterialDialog_material_dialog_positive_button_text_color) + if (mPositiveButtonTint == null) { + mPositiveButtonTint = ContextCompat.getColorStateList( + mActivity.applicationContext, + R.color.material_dialog_positive_button_text_color) + } + mPositiveButtonView.setTextColor(mPositiveButtonTint) + mPositiveButtonView.iconTint = mPositiveButtonTint + + // Set Negative Button Icon & Text Tint + var mNegativeButtonTint = a.getColorStateList( + R.styleable.MaterialDialog_material_dialog_negative_button_text_color) + if (mNegativeButtonTint == null) { + mNegativeButtonTint = ContextCompat.getColorStateList( + mActivity.applicationContext, + R.color.material_dialog_negative_button_text_color) + } + mNegativeButtonView.iconTint = mNegativeButtonTint + mNegativeButtonView.setTextColor(mNegativeButtonTint) + + // Set Positive Button Background Tint + var mBackgroundTint = a.getColorStateList( + R.styleable.MaterialDialog_material_dialog_positive_button_color) + if (mBackgroundTint == null) { + mBackgroundTint = ContextCompat.getColorStateList( + mActivity.applicationContext, + R.color.material_dialog_positive_button_color) + } + mPositiveButtonView.backgroundTintList = mBackgroundTint + if (mBackgroundTint != null) { + mNegativeButtonView.rippleColor = mBackgroundTint.withAlpha(75) + } + } catch (e: Exception) { + e.printStackTrace() + } finally { + a.recycle() + } + + return dialogView + } + + /** + * Displays the Dialog + */ + fun show() { + mDialog?.show() ?: throwNullDialog() + } + + /** + * Cancels the Dialog + */ + override fun cancel() { + mDialog?.cancel() ?: throwNullDialog() + } + + /** + * Dismisses the Dialog + */ + override fun dismiss() { + mDialog?.dismiss() ?: throwNullDialog() + } + + /** + * @param onShowListener interface for callback events when dialog is showed. + */ + fun setOnShowListener(onShowListener: OnShowListener) { + mOnShowListener = onShowListener + mDialog?.setOnShowListener { showCallback() } + } + + /** + * @param onCancelListener interface for callback events when dialog is cancelled. + */ + fun setOnCancelListener(onCancelListener: OnCancelListener) { + mOnCancelListener = onCancelListener + mDialog?.setOnCancelListener { cancelCallback() } + } + + /** + * @param onDismissListener interface for callback events when dialog is dismissed; + */ + fun setOnDismissListener(onDismissListener: OnDismissListener) { + mOnDismissListener = onDismissListener + mDialog?.setOnDismissListener { dismissCallback() } + } + + /** + * @return [LottieAnimationView] from the Dialog. + */ + fun getAnimationView(): LottieAnimationView? { + return mAnimationView + } + + private fun showCallback() { + mOnShowListener.onShow(this) + } + + private fun dismissCallback() { + mOnDismissListener.onDismiss(this) + } + + private fun cancelCallback() { + mOnCancelListener.onCancel(this) + } + + private fun throwNullDialog() { + throw NullPointerException("Called method on null Dialog. Create dialog using `Builder` before calling on Dialog") + } + + interface OnClickListener { + fun onClick(dialogInterface: DialogInterface?, which: Int) + } +} \ No newline at end of file diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/BottomSheetMaterialDialog.java b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/BottomSheetMaterialDialog.java deleted file mode 100644 index 0416db1..0000000 --- a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/BottomSheetMaterialDialog.java +++ /dev/null @@ -1,224 +0,0 @@ -package com.shreyaspatil.MaterialDialog; - -import android.app.Activity; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Outline; -import android.os.Build; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewOutlineProvider; -import android.widget.FrameLayout; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RawRes; - -import com.google.android.material.bottomsheet.BottomSheetBehavior; -import com.shreyaspatil.MaterialDialog.model.DialogButton; - -/** - * Creates BottomSheet Material Dialog with 2 buttons. - *
- * Use {@link BottomSheetMaterialDialog.Builder} to create a new instance. - */ -public class BottomSheetMaterialDialog extends AbstractDialog { - - protected BottomSheetMaterialDialog(@NonNull final Activity mActivity, - @NonNull String title, - @NonNull String message, - boolean mCancelable, - @NonNull DialogButton mPositiveButton, - @NonNull DialogButton mNegativeButton, - @RawRes int mAnimationResId, - @NonNull String mAnimationFile) { - super(mActivity, title, message, mCancelable, mPositiveButton, mNegativeButton, mAnimationResId, mAnimationFile); - - // Init Dialog, Create Bottom Sheet Dialog - mDialog = new BottomSheetDialog(mActivity); - - LayoutInflater inflater = mActivity.getLayoutInflater(); - - View dialogView = createView(inflater, null); - mDialog.setContentView(dialogView); - - // Set Cancelable property - mDialog.setCancelable(mCancelable); - - // Clip AnimationView to round Corners - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - dialogView.setOutlineProvider(new ViewOutlineProvider() { - @Override - public void getOutline(View view, Outline outline) { - float radius = mActivity.getResources().getDimension(R.dimen.radiusTop); - outline.setRoundRect(0, 0, view.getWidth(), view.getHeight() + (int) radius, radius); - } - }); - dialogView.setClipToOutline(true); - } else { - dialogView.findViewById(R.id.relative_layout_dialog).setPadding(0, (int) mActivity.getResources().getDimension(R.dimen.paddingTop), 0, 0); - } - - // Expand Bottom Sheet after showing. - mDialog.setOnShowListener(new DialogInterface.OnShowListener() { - @Override - public void onShow(DialogInterface dialog) { - BottomSheetDialog d = (BottomSheetDialog) dialog; - - FrameLayout bottomSheet = d.findViewById(com.google.android.material.R.id.design_bottom_sheet); - - if (bottomSheet != null) { - BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED); - } - } - }); - } - - @Override - protected View createView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) { - return super.createView(inflater, container); - } - - /** - * Builder for {@link BottomSheetMaterialDialog}. - */ - public static class Builder { - private Activity activity; - private String title; - private String message; - private boolean isCancelable; - private DialogButton positiveButton; - private DialogButton negativeButton; - private int animationResId = NO_ANIMATION; - private String animationFile; - - /** - * @param activity where BottomSheet Material Dialog is to be built. - */ - public Builder(@NonNull Activity activity) { - this.activity = activity; - } - - /** - * @param title Sets the Title of BottomSheet Material Dialog. - * @return this, for chaining. - */ - @NonNull - public Builder setTitle(@NonNull String title) { - this.title = title; - return this; - } - - /** - * @param message Sets the Message of BottomSheet Material Dialog. - * @return this, for chaining. - */ - @NonNull - public Builder setMessage(@NonNull String message) { - this.message = message; - return this; - } - - /** - * @param isCancelable Sets cancelable property of BottomSheet Material Dialog. - * @return this, for chaining. - */ - @NonNull - public Builder setCancelable(boolean isCancelable) { - this.isCancelable = isCancelable; - return this; - } - - /** - * Sets the Positive Button to BottomSheet Material Dialog without icon - * - * @param name sets the name/label of button. - * @param onClickListener interface for callback event on click of button. - * @return this, for chaining. - */ - @NonNull - public Builder setPositiveButton(@NonNull String name, @NonNull OnClickListener onClickListener) { - return setPositiveButton(name, NO_ICON, onClickListener); - } - - /** - * Sets the Positive Button to BottomSheet Material Dialog with icon - * - * @param name sets the name/label of button. - * @param icon sets the resource icon for button. - * @param onClickListener interface for callback event on click of button. - * @return this, for chaining. - */ - @NonNull - public Builder setPositiveButton(@NonNull String name, int icon, @NonNull OnClickListener onClickListener) { - positiveButton = new DialogButton(name, icon, onClickListener); - return this; - } - - /** - * Sets the Negative Button to BottomSheet Material Dialog without icon. - * - * @param name sets the name/label of button. - * @param onClickListener interface for callback event on click of button. - * @see this, for chaining. - */ - @NonNull - public Builder setNegativeButton(@NonNull String name, @NonNull OnClickListener onClickListener) { - return setNegativeButton(name, NO_ICON, onClickListener); - } - - /** - * Sets the Negative Button to BottomSheet Material Dialog with icon - * - * @param name sets the name/label of button. - * @param icon sets the resource icon for button. - * @param onClickListener interface for callback event on click of button. - * @return this, for chaining. - */ - @NonNull - public Builder setNegativeButton(@NonNull String name, int icon, @NonNull OnClickListener onClickListener) { - negativeButton = new DialogButton(name, icon, onClickListener); - return this; - } - - /** - * It sets the resource json to the {@link com.airbnb.lottie.LottieAnimationView}. - * - * @param animationResId sets the resource to {@link com.airbnb.lottie.LottieAnimationView}. - * @return this, for chaining. - */ - @NonNull - public Builder setAnimation(@RawRes int animationResId) { - this.animationResId = animationResId; - return this; - } - - /** - * It sets the json file to the {@link com.airbnb.lottie.LottieAnimationView} from assets. - * - * @param fileName sets the file from assets to {@link com.airbnb.lottie.LottieAnimationView}. - * @return this, for chaining. - */ - @NonNull - public Builder setAnimation(@NonNull String fileName) { - this.animationFile = fileName; - return this; - } - - /** - * Build the {@link BottomSheetMaterialDialog}. - */ - @NonNull - public BottomSheetMaterialDialog build() { - return new BottomSheetMaterialDialog(activity, title, message, isCancelable, positiveButton, negativeButton, animationResId, animationFile); - } - } - - class BottomSheetDialog extends com.google.android.material.bottomsheet.BottomSheetDialog { - - BottomSheetDialog(@NonNull Context context) { - super(context, R.style.BottomSheetDialogTheme); - } - } -} diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/BottomSheetMaterialDialog.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/BottomSheetMaterialDialog.kt new file mode 100644 index 0000000..56ccb09 --- /dev/null +++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/BottomSheetMaterialDialog.kt @@ -0,0 +1,83 @@ +package com.shreyaspatil.MaterialDialog + +import android.app.Activity +import android.graphics.Outline +import android.os.Build +import android.view.View +import android.view.ViewOutlineProvider +import android.widget.FrameLayout +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.shreyaspatil.MaterialDialog.model.DialogBuilder +import com.shreyaspatil.MaterialDialog.model.DialogButton +import kotlinx.android.synthetic.main.layout_alert_dialog.view.* + +/** + * Creates BottomSheet Material Dialog with 2 buttons. + *
+ * Use {@link BottomSheetMaterialDialog.Builder} to create a new instance.
+ */
+class BottomSheetMaterialDialog(
+ mActivity: Activity,
+ title: String?,
+ message: String?,
+ mCancelable: Boolean?,
+ mPositiveButton: DialogButton?,
+ mNegativeButton: DialogButton?,
+ mAnimationResId: Int?,
+ mAnimationFile: String?
+) : AbstractDialog(mActivity, title, message, mPositiveButton, mNegativeButton, mAnimationResId, mAnimationFile) {
+
+ init {
+
+ val dialogView = createView(mActivity.layoutInflater, null)
+ .apply {
+ // Clip AnimationView to round Corners
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ outlineProvider = object : ViewOutlineProvider() {
+ override fun getOutline(view: View?, outline: Outline?) {
+ val radius = mActivity.resources.getDimension(R.dimen.radiusTop)
+ outline!!.setRoundRect(0, 0, view!!.width, view.height + radius.toInt(), radius)
+ }
+ }
+ clipToOutline = true
+ } else {
+ relative_layout_dialog.setPadding(
+ 0,
+ mActivity.resources.getDimension(R.dimen.paddingTop).toInt(),
+ 0,
+ 0
+ )
+ }
+ }
+
+ // Init Dialog, Create Bottom Sheet Dialog
+ mDialog = BottomSheetDialog(mActivity, R.style.BottomSheetDialogTheme)
+ .apply {
+ setContentView(dialogView)
+ setCancelable(mCancelable!!)
+
+ setOnShowListener {
+ val d = it as BottomSheetDialog
+ val bottomSheet = d.findViewById
+ * Use {@link Builder} to create a new instance.
+ *
+ * @param activity where Material Dialog is to be built.
+ * @param block a lambda function for configuration
+ */
+fun materialDialog(
+ activity: Activity,
+ block: MaterialDialog.Builder.() -> Unit
+) = MaterialDialog.Builder(activity)
+ .also(block).build()
+
+/**
+ * Creates BottomSheet Material Dialog with 2 buttons.
+ *
+ * Use {@link BottomSheetMaterialDialog.Builder} to create a new instance.
+ *
+ * @param activity where Material Dialog is to be built.
+ * @param block a lambda function for configuration
+ */
+fun bottomSheetMaterialDialog(
+ activity: Activity,
+ block: BottomSheetMaterialDialog.Builder.() -> Unit
+) = BottomSheetMaterialDialog.Builder(activity)
+ .also(block).build()
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/MaterialDialog.java b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/MaterialDialog.java
deleted file mode 100644
index 453a872..0000000
--- a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/MaterialDialog.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package com.shreyaspatil.MaterialDialog;
-
-import android.app.Activity;
-import android.view.LayoutInflater;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RawRes;
-import androidx.appcompat.app.AlertDialog;
-
-import com.shreyaspatil.MaterialDialog.model.DialogButton;
-
-/**
- * Creates a Material Dialog with 2 buttons.
- *
- * Use {@link Builder} to create a new instance.
- */
-public class MaterialDialog extends AbstractDialog {
-
-
- protected MaterialDialog(@NonNull final Activity mActivity,
- @NonNull String title,
- @NonNull String message,
- boolean mCancelable,
- @NonNull DialogButton mPositiveButton,
- @NonNull DialogButton mNegativeButton,
- @RawRes int mAnimationResId,
- @NonNull String mAnimationFile) {
- super(mActivity, title, message, mCancelable, mPositiveButton, mNegativeButton, mAnimationResId, mAnimationFile);
-
- // Init Dialog
- final AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
-
- LayoutInflater inflater = mActivity.getLayoutInflater();
-
- View dialogView = createView(inflater, null);
-
- builder.setView(dialogView);
-
- // Set Cancelable property
- builder.setCancelable(mCancelable);
-
- // Create and show dialog
- mDialog = builder.create();
- }
-
- /**
- * Builder for {@link MaterialDialog}.
- */
- public static class Builder {
- private Activity activity;
- private String title;
- private String message;
- private boolean isCancelable;
- private DialogButton positiveButton;
- private DialogButton negativeButton;
- private int animationResId = NO_ANIMATION;
- private String animationFile;
-
- /**
- * @param activity where Material Dialog is to be built.
- */
- public Builder(@NonNull Activity activity) {
- this.activity = activity;
- }
-
- /**
- * @param title Sets the Title of Material Dialog.
- * @return this, for chaining.
- */
- @NonNull
- public Builder setTitle(@NonNull String title) {
- this.title = title;
- return this;
- }
-
- /**
- * @param message Sets the Message of Material Dialog.
- * @return this, for chaining.
- */
- @NonNull
- public Builder setMessage(@NonNull String message) {
- this.message = message;
- return this;
- }
-
- /**
- * @param isCancelable Sets cancelable property of Material Dialog.
- * @return this, for chaining.
- */
- @NonNull
- public Builder setCancelable(boolean isCancelable) {
- this.isCancelable = isCancelable;
- return this;
- }
-
- /** Sets the Positive Button to Material Dialog without icon
- * @param name sets the name/label of button.
- * @param onClickListener interface for callback event on click of button.
- * @see this, for chaining.
- */
- @NonNull
- public Builder setPositiveButton(@NonNull String name, @NonNull OnClickListener onClickListener) {
- return setPositiveButton(name, NO_ICON, onClickListener);
- }
-
- /** Sets the Positive Button to Material Dialog with icon
- * @param name sets the name/label of button.
- * @param icon sets the resource icon for button.
- * @param onClickListener interface for callback event on click of button.
- * @return this, for chaining.
- */
- @NonNull
- public Builder setPositiveButton(@NonNull String name, int icon, @NonNull OnClickListener onClickListener) {
- positiveButton = new DialogButton(name, icon, onClickListener);
- return this;
- }
-
- /** Sets the Negative Button to Material Dialog without icon.
- * @param name sets the name/label of button.
- * @param onClickListener interface for callback event on click of button.
- * @see this, for chaining.
- */
- @NonNull
- public Builder setNegativeButton(@NonNull String name, @NonNull OnClickListener onClickListener) {
- return setNegativeButton(name, NO_ICON, onClickListener);
- }
-
- /** Sets the Negative Button to Material Dialog with icon
- * @param name sets the name/label of button.
- * @param icon sets the resource icon for button.
- * @param onClickListener interface for callback event on click of button.
- * @return this, for chaining.
- */
- @NonNull
- public Builder setNegativeButton(@NonNull String name, int icon, @NonNull OnClickListener onClickListener) {
- negativeButton = new DialogButton(name, icon, onClickListener);
- return this;
- }
-
- /** It sets the resource json to the {@link com.airbnb.lottie.LottieAnimationView}.
- * @param animationResId sets the resource to {@link com.airbnb.lottie.LottieAnimationView}.
- * @return this, for chaining.
- */
- @NonNull
- public Builder setAnimation(@RawRes int animationResId) {
- this.animationResId = animationResId;
- return this;
- }
-
- /** It sets the json file to the {@link com.airbnb.lottie.LottieAnimationView} from assets.
- * @param fileName sets the file from assets to {@link com.airbnb.lottie.LottieAnimationView}.
- * @return this, for chaining.
- */
- @NonNull
- public Builder setAnimation(@NonNull String fileName) {
- this.animationFile = fileName;
- return this;
- }
-
- /**
- * Build the {@link MaterialDialog}.
- */
- @NonNull
- public MaterialDialog build() {
- return new MaterialDialog(activity, title, message, isCancelable, positiveButton, negativeButton, animationResId, animationFile);
- }
- }
-}
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/MaterialDialog.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/MaterialDialog.kt
new file mode 100644
index 0000000..fb83ad1
--- /dev/null
+++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/MaterialDialog.kt
@@ -0,0 +1,49 @@
+package com.shreyaspatil.MaterialDialog
+
+import android.app.Activity
+import androidx.appcompat.app.AlertDialog
+import com.shreyaspatil.MaterialDialog.model.DialogBuilder
+import com.shreyaspatil.MaterialDialog.model.DialogButton
+
+/**
+ * Creates a Material Dialog with 2 buttons.
+ *
+ * Use {@link Builder} to create a new instance.
+ */
+class MaterialDialog(
+ mActivity: Activity,
+ title: String?,
+ message: String?,
+ mCancelable: Boolean?,
+ mPositiveButton: DialogButton?,
+ mNegativeButton: DialogButton?,
+ mAnimationResId: Int?,
+ mAnimationFile: String?
+) : AbstractDialog(mActivity, title, message, mPositiveButton, mNegativeButton, mAnimationResId, mAnimationFile)
+{
+
+ init {
+
+ val dialogView = createView(mActivity.layoutInflater, null)
+
+ //init dialog
+ mDialog = AlertDialog.Builder(mActivity).run {
+ setView(dialogView)
+ setCancelable(mCancelable!!)
+ create()
+ }
+ }
+
+ /**
+ * Builder for {@link MaterialDialog}.
+ * @param activity where Material Dialog is to be built.
+ */
+ class Builder(private val activity: Activity) : DialogBuilder(){
+
+ /**
+ * Build the {@link MaterialDialog}.
+ */
+ fun build() : MaterialDialog =
+ MaterialDialog(activity, title, message, isCancelable, mPositiveButton, mNegativeButton, animationResId, mAnimationFile)
+ }
+}
\ No newline at end of file
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/DialogInterface.java b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/DialogInterface.java
deleted file mode 100644
index 7d9d20d..0000000
--- a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/DialogInterface.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.shreyaspatil.MaterialDialog.interfaces;
-
-public interface DialogInterface {
- void cancel();
- void dismiss();
-}
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/DialogInterface.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/DialogInterface.kt
new file mode 100644
index 0000000..8f57c02
--- /dev/null
+++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/DialogInterface.kt
@@ -0,0 +1,6 @@
+package com.shreyaspatil.MaterialDialog.interfaces
+
+interface DialogInterface {
+ fun cancel()
+ fun dismiss()
+}
\ No newline at end of file
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnCancelListener.java b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnCancelListener.java
deleted file mode 100644
index ffdc6c6..0000000
--- a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnCancelListener.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.shreyaspatil.MaterialDialog.interfaces;
-
-public interface OnCancelListener {
- void onCancel(DialogInterface dialogInterface);
-}
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnCancelListener.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnCancelListener.kt
new file mode 100644
index 0000000..7a69ce0
--- /dev/null
+++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnCancelListener.kt
@@ -0,0 +1,5 @@
+package com.shreyaspatil.MaterialDialog.interfaces
+
+interface OnCancelListener {
+ fun onCancel(dialogInterface: DialogInterface)
+}
\ No newline at end of file
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnDismissListener.java b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnDismissListener.java
deleted file mode 100644
index 6c71309..0000000
--- a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnDismissListener.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.shreyaspatil.MaterialDialog.interfaces;
-
-public interface OnDismissListener {
- void onDismiss(DialogInterface dialogInterface);
-}
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnDismissListener.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnDismissListener.kt
new file mode 100644
index 0000000..04dcabb
--- /dev/null
+++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnDismissListener.kt
@@ -0,0 +1,5 @@
+package com.shreyaspatil.MaterialDialog.interfaces
+
+interface OnDismissListener {
+ fun onDismiss(dialogInterface: DialogInterface)
+}
\ No newline at end of file
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnShowListener.java b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnShowListener.java
deleted file mode 100644
index 6ffeba6..0000000
--- a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnShowListener.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.shreyaspatil.MaterialDialog.interfaces;
-
-public interface OnShowListener {
- void onShow(DialogInterface dialogInterface);
-}
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnShowListener.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnShowListener.kt
new file mode 100644
index 0000000..8ce2fa3
--- /dev/null
+++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/interfaces/OnShowListener.kt
@@ -0,0 +1,5 @@
+package com.shreyaspatil.MaterialDialog.interfaces
+
+interface OnShowListener {
+ fun onShow(dialogInterface: DialogInterface)
+}
\ No newline at end of file
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogBuilder.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogBuilder.kt
new file mode 100644
index 0000000..55ce518
--- /dev/null
+++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogBuilder.kt
@@ -0,0 +1,85 @@
+package com.shreyaspatil.MaterialDialog.model
+
+import com.shreyaspatil.MaterialDialog.AbstractDialog
+import com.shreyaspatil.MaterialDialog.interfaces.DialogInterface
+
+/**
+ * Builder for Dialog.
+ */
+open class DialogBuilder() {
+ var title: String? = null
+ var message: String? = null
+ var isCancelable: Boolean? = true
+ protected var mPositiveButton: DialogButton? = null
+ protected var mNegativeButton: DialogButton? = null
+ protected var animationResId: Int? = AbstractDialog.NO_ANIMATION
+ protected var mAnimationFile: String? = null
+
+// /**
+// * @param title Sets the Title of Dialog.
+// */
+// fun setTitle(title: String) {
+// mTitle = title
+// }
+//
+// /**
+// * @param message Sets the Message of Dialog.
+// */
+// fun setMessage(message: String) {
+// mMessage = message
+// }
+//
+// /**
+// * @param isCancelable Sets cancelable property of Dialog.
+// */
+// fun isCancelable(isCancelable: Boolean) {
+// cancelable = isCancelable
+// }
+
+ /** Sets the Positive Button to Dialog without icon
+ * @param name sets the name/label of button.
+ * @param onClick higher order function for callback event on click of button.
+ */
+ fun setPositiveButton(name: String, icon: Int, onClick: (DialogInterface, Int) -> Unit) {
+ mPositiveButton = DialogButton(name, icon, onClick)
+ }
+
+ /** Sets the Positive Button to Dialog without icon
+ * @param name sets the name/label of button.
+ * @param onClick higher order function for callback event on click of button.
+ */
+ fun setPositiveButton(name: String, onClick: (DialogInterface, Int) -> Unit) {
+ mPositiveButton = DialogButton(name, AbstractDialog.NO_ICON, onClick)
+ }
+
+ /** Sets the Positive Button to Dialog with icon
+ * @param name sets the name/label of button.
+ * @param icon sets the resource icon for button.
+ * @param onClick higher order function for callback event on click of button.
+ */
+ fun setNegativeButton(name: String, icon: Int, onClick: (DialogInterface, Int) -> Unit) {
+ mNegativeButton = DialogButton(name, icon, onClick)
+ }
+
+ /** Sets the Positive Button to Dialog without icon
+ * @param name sets the name/label of button.
+ * @param onClick higher order function for callback event on click of button.
+ */
+ fun setNegativeButton(name: String, onClick: (DialogInterface, Int) -> Unit) {
+ mNegativeButton = DialogButton(name, AbstractDialog.NO_ICON, onClick)
+ }
+
+ /** It sets the resource json to the {@link com.airbnb.lottie.LottieAnimationView}.
+ * @param animationResId sets the resource to {@link com.airbnb.lottie.LottieAnimationView}.
+ */
+ fun setAnimation(animationResId: Int) {
+ this.animationResId = animationResId
+ }
+
+ /** It sets the json file to the {@link com.airbnb.lottie.LottieAnimationView} from assets.
+ * @param fileName sets the file from assets to {@link com.airbnb.lottie.LottieAnimationView}.
+ */
+ fun setAnimation(fileName: String) {
+ this.mAnimationFile = fileName
+ }
+}
\ No newline at end of file
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogButton.java b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogButton.java
deleted file mode 100644
index 6837deb..0000000
--- a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogButton.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.shreyaspatil.MaterialDialog.model;
-
-import com.shreyaspatil.MaterialDialog.AbstractDialog;
-
-public class DialogButton {
- private String title;
- private int icon;
- private AbstractDialog.OnClickListener onClickListener;
-
- public DialogButton(String title, int icon, AbstractDialog.OnClickListener onClickListener) {
- this.title = title;
- this.icon = icon;
- this.onClickListener = onClickListener;
- }
-
- public String getTitle() {
- return title;
- }
-
- public int getIcon() {
- return icon;
- }
-
- public AbstractDialog.OnClickListener getOnClickListener() {
- return onClickListener;
- }
-}
diff --git a/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogButton.kt b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogButton.kt
new file mode 100644
index 0000000..ceb28fa
--- /dev/null
+++ b/MaterialDialogLibrary/src/main/java/com/shreyaspatil/MaterialDialog/model/DialogButton.kt
@@ -0,0 +1,10 @@
+package com.shreyaspatil.MaterialDialog.model
+
+import com.shreyaspatil.MaterialDialog.interfaces.DialogInterface
+
+data class DialogButton(
+ val title: String,
+ val icon: Int,
+ val onClick: (DialogInterface, Int) -> Unit
+)
+
diff --git a/MaterialDialogLibrary/src/main/res/layout/layout_alert_dialog.xml b/MaterialDialogLibrary/src/main/res/layout/layout_alert_dialog.xml
index cf5b30a..1b88e61 100644
--- a/MaterialDialogLibrary/src/main/res/layout/layout_alert_dialog.xml
+++ b/MaterialDialogLibrary/src/main/res/layout/layout_alert_dialog.xml
@@ -32,15 +32,19 @@
android:layout_below="@id/animation_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:visibility="gone"
style="@style/MaterialDialog.Title"
- tools:text="Title" />
+ tools:text="Title"
+ tools:visibility="visible"/>