diff --git a/LibDialog/build.gradle b/LibDialog/build.gradle index 89957a34aaf35223afa27997ee6330fd95a3fc82..82ce061f1872d77cddbae38f2c3fe432329f25de 100644 --- a/LibDialog/build.gradle +++ b/LibDialog/build.gradle @@ -33,7 +33,7 @@ afterEvaluate { groupId = 'com.mx.dialog' artifactId = 'MXDialog' - version = '1.0.9' + version = '1.5.7' } } } @@ -41,4 +41,5 @@ afterEvaluate { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' } \ No newline at end of file diff --git a/LibDialog/src/main/java/com/mx/dialog/MXDialog.kt b/LibDialog/src/main/java/com/mx/dialog/MXDialog.kt index 9ecb35c4ff788f460a69788a50f0de356d6b1cad..9149f0974400e69377d33f9983f503c651d5c48d 100644 --- a/LibDialog/src/main/java/com/mx/dialog/MXDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/MXDialog.kt @@ -8,6 +8,9 @@ import com.mx.dialog.tip.MXDialogType import com.mx.dialog.tip.MXTipDialog import com.mx.dialog.utils.IMXLifecycle import com.mx.dialog.utils.MXUtils +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.withContext object MXDialog { fun setDebug(debug: Boolean) { @@ -64,6 +67,37 @@ object MXDialog { dialog.show() } + suspend fun confirmSync( + context: Context, + message: CharSequence, + title: CharSequence? = null, + actionButtonText: CharSequence? = null, + cancelButtonText: CharSequence? = null, + cancelable: Boolean = true, + maxContentRatio: Float = 1f + ): Boolean = withContext(Dispatchers.Main) { + var hasConfirm = false + var dialogFinish = false + confirm( + context, + message, + title, + actionButtonText, + cancelButtonText, + cancelable, + maxContentRatio + ) { confirm -> + hasConfirm = confirm + dialogFinish = true + } + return@withContext withContext(Dispatchers.IO) { + while (!dialogFinish) { + delay(100) + } + hasConfirm ?: false + } + } + /** * 显示提示信息,不需要返回操作 * @param message 内容 @@ -103,7 +137,7 @@ object MXDialog { contentMaxHeightRatio: Float = 1f, contentRadiusDP: Float = 10f, contentMarginDP: Float = 20f, - position: MXDialogPosition = MXDialogPosition.BOTTOM, + position: MXDialogPosition = MXDialogPosition.CENTER, textColor: Int? = null, textSizeSP: Float? = null, textGravity: Int? = Gravity.LEFT or Gravity.CENTER_VERTICAL, @@ -127,6 +161,54 @@ object MXDialog { }.show() } + suspend fun selectSync( + context: Context, + list: List, + selectIndex: Int? = null, + title: CharSequence? = null, + cancelable: Boolean = true, + contentMaxHeightRatio: Float = 1f, + contentRadiusDP: Float = 10f, + contentMarginDP: Float = 20f, + position: MXDialogPosition = MXDialogPosition.CENTER, + textColor: Int? = null, + textSizeSP: Float? = null, + textGravity: Int? = Gravity.LEFT or Gravity.CENTER_VERTICAL + ): Int? = withContext(Dispatchers.Main) { + var checkedIndex: Int? = null + var dialogFinish = false + MXListDialog(context).apply { + setTitle(title) + setContentMaxHeightRatio(contentMaxHeightRatio) + setContentCornerRadius(contentRadiusDP) + setContentPosition(position) + setContentMargin(contentMarginDP) + setCancelable(cancelable) + setItems( + list, + selectIndex = selectIndex, + textColor = textColor, + textSizeSP = textSizeSP, + textGravity = textGravity, + onSelect = { index -> + checkedIndex = index + dialogFinish = true + } + ) + setOnCancelListener { + if (!dialogFinish) { + dialogFinish = true + } + } + }.show() + return@withContext withContext(Dispatchers.IO) { + while (!dialogFinish) { + delay(100) + } + checkedIndex + } + } + fun selectMulti( context: Context, list: List, @@ -160,4 +242,52 @@ object MXDialog { }.show() } + suspend fun selectMultiSync( + context: Context, + list: List, + selectIndexList: List? = null, + title: CharSequence? = null, + cancelable: Boolean = true, + contentMaxHeightRatio: Float = 1.2f, + contentRadiusDP: Float = 10f, + contentMarginDP: Float = 20f, + position: MXDialogPosition = MXDialogPosition.BOTTOM, + textColor: Int? = null, + textSizeSP: Float? = null, + textGravity: Int? = Gravity.LEFT or Gravity.CENTER_VERTICAL + ): List? = withContext(Dispatchers.Main) { + var checkedIndex: List? = null + var dialogFinish = false + MXListDialog(context).apply { + setTitle(title) + setContentMaxHeightRatio(contentMaxHeightRatio) + setContentCornerRadius(contentRadiusDP) + setContentPosition(position) + setContentMargin(contentMarginDP) + setCancelable(cancelable) + setMultipleItems( + list, + selectIndexList = selectIndexList, + textColor = textColor, + textSizeSP = textSizeSP, + textGravity = textGravity, + onSelect = { index -> + checkedIndex = index + dialogFinish = true + } + ) + setOnCancelListener { + if (!dialogFinish) { + dialogFinish = true + } + } + }.show() + return@withContext withContext(Dispatchers.IO) { + while (!dialogFinish) { + delay(100) + } + checkedIndex + } + } + } \ No newline at end of file diff --git a/LibDialog/src/main/java/com/mx/dialog/list/MXBaseListDialog.kt b/LibDialog/src/main/java/com/mx/dialog/list/MXBaseListDialog.kt index 6b811e85c85b7904859aa054fa1a22e58089351a..f901fa2f768b9b2d0d6cc502260effbf65d62e78 100644 --- a/LibDialog/src/main/java/com/mx/dialog/list/MXBaseListDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/list/MXBaseListDialog.kt @@ -69,7 +69,6 @@ open class MXBaseListDialog(context: Context) : MXBaseDialog(context) { protected open fun initDialog() { if (listView == null) return - if (titleStr != null) { titleTxv?.text = titleStr titleLay?.visibility = View.VISIBLE @@ -92,6 +91,11 @@ open class MXBaseListDialog(context: Context) : MXBaseDialog(context) { } else { btnDivider?.visibility = View.GONE } + if (cancelBtn?.visibility != View.VISIBLE && okBtn?.visibility != View.VISIBLE) { + btnLay?.visibility = View.GONE + } else { + btnLay?.visibility = View.VISIBLE + } } if (contentCornerRadiusDP >= 0) { @@ -277,8 +281,6 @@ open class MXBaseListDialog(context: Context) : MXBaseDialog(context) { protected fun setActionClick(click: (() -> Unit)? = null) { actionProp.onclick = click - - initDialog() } /** diff --git a/README.md b/README.md index a6a5d59735564f587e8bf92a48727a701bdbb5fb..8a6acd38fc652c76e47c8ad6ffed1ca199ebee56 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ ```groovy dependencies { + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' implementation 'com.gitee.zhangmengxiong:MXDialog:x.x.x' } ``` diff --git a/app/build.gradle b/app/build.gradle index a7471f5f4932c81961434cdb211d8985ab4d1921..e9c5e044dab427d32f528723b4bdd91cfc47b070 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,6 +34,10 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' + implementation 'androidx.core:core-ktx:1.8.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.4.0' diff --git a/app/src/main/java/com/mx/example/MainActivity.kt b/app/src/main/java/com/mx/example/MainActivity.kt index fe73b66262fa4bc5655b37ade24cc71997812c24..d385253ea6437c2332c56915900b8e98318f1694 100644 --- a/app/src/main/java/com/mx/example/MainActivity.kt +++ b/app/src/main/java/com/mx/example/MainActivity.kt @@ -10,12 +10,14 @@ import android.text.Html import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.lifecycleScope import com.gyf.immersionbar.BarHide import com.gyf.immersionbar.ImmersionBar import com.mx.dialog.MXDialog import com.mx.dialog.tip.MXDialogType import com.mx.dialog.upgrade.MXUpgradeDialog import com.mx.dialog.utils.IMXLifecycle +import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { protected val immersionBar: ImmersionBar by lazy { @@ -85,8 +87,12 @@ class MainActivity : AppCompatActivity() { } fun showConfirm(view: View) { - MXDialog.confirm(this, "请确认") { confirm -> - Toast.makeText(this@MainActivity, "操作回调 confirm=$confirm", Toast.LENGTH_SHORT).show() +// MXDialog.confirm(this, "请确认") { confirm -> +// Toast.makeText(this@MainActivity, "操作回调 confirm=$confirm", Toast.LENGTH_SHORT).show() +// } + lifecycleScope.launch { + val confirm = MXDialog.confirmSync(this@MainActivity, "请确认") + MXDialog.tip(this@MainActivity, "确认:$confirm") } } @@ -124,13 +130,14 @@ class MainActivity : AppCompatActivity() { } fun showSelect(view: View) { - MXDialog.select( - this, - list = ('A'..'Z').toMutableList().map { it.toString() }, - selectIndex = 0, -// cancelable = false - ) { index -> - MXDialog.confirm(this@MainActivity, "点击了:$index") + lifecycleScope.launch { + val index = MXDialog.selectMultiSync( + this@MainActivity, + list = ('A'..'Z').toMutableList().map { it.toString() }, + selectIndexList = arrayListOf(0, 1), +// cancelable = false + ) + MXDialog.tip(this@MainActivity, "点击了:$index") } } } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 075920c5a0ce2ff4628dc507e2f961be31f3cf10..67b952d9f876eaba40505c69cf38ec90c505d991 100644 --- a/build.gradle +++ b/build.gradle @@ -34,5 +34,5 @@ ext { minSdkVersion = 19 versionCode = 1 - versionName = "1.0.9" + versionName = "1.5.7" } \ No newline at end of file