From 0c5f3ecedc433a8b111ee96e756345097fa8fd6e Mon Sep 17 00:00:00 2001 From: zhangmengxiong Date: Tue, 20 Sep 2022 22:50:02 +0800 Subject: [PATCH] 1.5.7 --- LibDialog/build.gradle | 3 +- .../src/main/java/com/mx/dialog/MXDialog.kt | 132 +++++++++++++++++- .../com/mx/dialog/list/MXBaseListDialog.kt | 8 +- README.md | 1 + app/build.gradle | 4 + .../main/java/com/mx/example/MainActivity.kt | 25 ++-- build.gradle | 2 +- 7 files changed, 160 insertions(+), 15 deletions(-) diff --git a/LibDialog/build.gradle b/LibDialog/build.gradle index 89957a3..82ce061 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 9ecb35c..9149f09 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 6b811e8..f901fa2 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 a6a5d59..8a6acd3 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 a7471f5..e9c5e04 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 fe73b66..d385253 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 075920c..67b952d 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 -- Gitee