NekoX/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/AlertUtil.kt

341 lines
8.5 KiB
Kotlin
Raw Normal View History

2020-06-25 17:25:17 +02:00
package tw.nekomimi.nekogram.utils
import android.content.Context
2020-07-27 06:42:12 +02:00
import android.content.Intent
import android.net.Uri
2020-06-25 17:25:17 +02:00
import android.widget.LinearLayout
import android.widget.Toast
import org.telegram.messenger.AndroidUtilities
import org.telegram.messenger.ApplicationLoader
import org.telegram.messenger.LocaleController
import org.telegram.messenger.R
import org.telegram.tgnet.TLRPC
import org.telegram.ui.ActionBar.AlertDialog
import org.telegram.ui.Components.EditTextBoldCursor
import org.telegram.ui.Components.NumberPicker
import tw.nekomimi.nekogram.BottomBuilder
import tw.nekomimi.nekogram.NekoConfig
2020-06-26 05:10:18 +02:00
import tw.nekomimi.nekogram.PopupBuilder
2020-06-25 17:25:17 +02:00
import java.util.*
import java.util.concurrent.atomic.AtomicReference
object AlertUtil {
2020-07-27 06:42:12 +02:00
@JvmStatic
fun copyAndAlert(text: String) {
AndroidUtilities.addToClipboard(text)
AlertUtil.showToast(LocaleController.getString("TextCopied", R.string.TextCopied))
}
2020-10-13 16:53:22 +02:00
@JvmStatic
fun copyLinkAndAlert(text: String) {
AndroidUtilities.addToClipboard(text)
AlertUtil.showToast(LocaleController.getString("LinkCopied", R.string.LinkCopied))
}
2020-07-27 06:42:12 +02:00
@JvmStatic
fun call(number: String) {
runCatching {
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:+" + number))
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
ApplicationLoader.applicationContext.startActivity(intent)
}.onFailure {
showToast(it)
}
}
2020-06-25 17:25:17 +02:00
@JvmStatic
fun showToast(e: Throwable) = showToast(e.message ?: e.javaClass.simpleName)
@JvmStatic
2021-02-04 18:59:00 +01:00
fun showToast(e: TLRPC.TL_error?) {
if (e == null) return
showToast("${e.code}: ${e.text}")
}
2020-06-25 17:25:17 +02:00
@JvmStatic
fun showToast(text: String) = UIUtil.runOnUIThread(Runnable {
Toast.makeText(
ApplicationLoader.applicationContext,
text.takeIf { it.isNotBlank() }
2020-07-27 06:42:12 +02:00
?: "喵 !",
2020-06-25 17:25:17 +02:00
Toast.LENGTH_LONG
).show()
})
2020-07-10 12:10:21 +02:00
@JvmStatic
fun showSimpleAlert(ctx: Context?, error: Throwable) {
2020-07-27 06:42:12 +02:00
showSimpleAlert(ctx, null, error.message ?: error.javaClass.simpleName) {}
2020-07-10 12:10:21 +02:00
}
2020-06-25 17:25:17 +02:00
@JvmStatic
@JvmOverloads
fun showSimpleAlert(ctx: Context?, text: String, listener: ((AlertDialog.Builder) -> Unit)? = null) {
2020-07-27 06:42:12 +02:00
showSimpleAlert(ctx, null, text, listener)
2020-06-25 17:25:17 +02:00
}
@JvmStatic
@JvmOverloads
2020-07-27 06:42:12 +02:00
fun showSimpleAlert(ctx: Context?, title: String?, text: String, listener: ((AlertDialog.Builder) -> Unit)? = null) = UIUtil.runOnUIThread(Runnable {
2020-06-25 17:25:17 +02:00
2020-07-27 06:42:12 +02:00
if (ctx == null) return@Runnable
2020-06-25 17:25:17 +02:00
val builder = AlertDialog.Builder(ctx)
builder.setTitle(title ?: LocaleController.getString("NekoX", R.string.NekoX))
builder.setMessage(text)
if (listener != null) {
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK)) { _, _ ->
builder.dismissRunnable.run()
}
}
builder.show()
})
@JvmStatic
fun showCopyAlert(ctx: Context, text: String) = UIUtil.runOnUIThread(Runnable {
val builder = AlertDialog.Builder(ctx)
builder.setTitle(LocaleController.getString("Translate", R.string.Translate))
builder.setMessage(text)
builder.setNegativeButton(LocaleController.getString("Copy", R.string.Copy)) { _, _ ->
AndroidUtilities.addToClipboard(text)
AlertUtil.showToast(LocaleController.getString("TextCopied", R.string.TextCopied))
builder.dismissRunnable.run()
}
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK)) { _, _ ->
builder.dismissRunnable.run()
}
builder.show()
})
@JvmOverloads
@JvmStatic
fun showProgress(ctx: Context, text: String = LocaleController.getString("Loading", R.string.Loading)): AlertDialog {
return AlertDialog.Builder(ctx, 1).apply {
setMessage(text)
}.create()
}
fun showInput(ctx: Context, title: String, hint: String, onInput: (AlertDialog.Builder, String) -> String) = UIUtil.runOnUIThread(Runnable {
val builder = AlertDialog.Builder(ctx)
builder.setTitle(title)
builder.setView(EditTextBoldCursor(ctx).apply {
setHintText(hint)
})
})
@JvmStatic
@JvmOverloads
fun showConfirm(ctx: Context, title: String, text: String? = null, icon: Int, button: String, red: Boolean, listener: Runnable) = UIUtil.runOnUIThread(Runnable {
/*
val builder = AlertDialog.Builder(ctx)
builder.setTitle(title)
builder.setMessage(AndroidUtilities.replaceTags(text))
builder.setPositiveButton(button, listener)
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null)
val alertDialog = builder.show()
if (red) {
(alertDialog.getButton(DialogInterface.BUTTON_POSITIVE) as TextView?)?.setTextColor(Theme.getColor(Theme.key_dialogTextRed2))
}
*/
val builder = BottomBuilder(ctx)
if (text != null) {
builder.addTitle(title, text)
} else {
builder.addTitle(title)
}
builder.addItem(button, icon, red) {
listener.run()
}
builder.addCancelItem()
builder.show()
})
@JvmStatic
@JvmOverloads
2020-06-26 06:54:48 +02:00
fun showTransFailedDialog(ctx: Context, noRetry: Boolean, message: String, retryRunnable: Runnable) = UIUtil.runOnUIThread(Runnable {
2020-06-25 17:25:17 +02:00
ctx.setTheme(R.style.Theme_TMessages)
val builder = AlertDialog.Builder(ctx)
builder.setTitle(LocaleController.getString("TranslateFailed", R.string.TranslateFailed))
builder.setMessage(message)
val reference = AtomicReference<AlertDialog>()
builder.setNeutralButton(LocaleController.getString("ChangeTranslateProvider", R.string.ChangeTranslateProvider)) {
_, _ ->
val view = reference.get().getButton(AlertDialog.BUTTON_NEUTRAL)
val popup = PopupBuilder(view, true)
val items = LinkedList<String>()
items.addAll(arrayOf(
LocaleController.getString("ProviderGoogleTranslate", R.string.ProviderGoogleTranslate),
LocaleController.getString("ProviderGoogleTranslateCN", R.string.ProviderGoogleTranslateCN),
LocaleController.getString("ProviderYandexTranslate", R.string.ProviderYandexTranslate),
2021-01-13 09:27:23 +01:00
LocaleController.getString("ProviderLingocloud", R.string.ProviderLingocloud),
LocaleController.getString("ProviderMicrosoftTranslator", R.string.ProviderMicrosoftTranslator),
LocaleController.getString("ProviderMicrosoftTranslator", R.string.ProviderYouDao),
LocaleController.getString("ProviderMicrosoftTranslator", R.string.ProviderDeepLTranslate)
2020-06-25 17:25:17 +02:00
))
popup.setItems(items.toTypedArray()) { item, _ ->
reference.get().dismiss()
2020-06-26 06:54:48 +02:00
NekoConfig.setTranslationProvider(item + 1)
2020-06-25 17:25:17 +02:00
retryRunnable.run()
}
popup.show()
}
if (noRetry) {
builder.setPositiveButton(LocaleController.getString("Cancel", R.string.Cancel)) { _, _ ->
reference.get().dismiss()
}
} else {
builder.setPositiveButton(LocaleController.getString("Retry", R.string.Retry)) { _, _ ->
reference.get().dismiss()
retryRunnable.run()
}
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel)) { _, _ ->
reference.get().dismiss()
}
}
reference.set(builder.create().apply {
setDismissDialogByButtons(false)
show()
})
})
fun showTimePicker(ctx: Context, title: String, callback: (Long) -> Unit) {
ctx.setTheme(R.style.Theme_TMessages)
val builder = AlertDialog.Builder(ctx)
builder.setTitle(title)
builder.setView(LinearLayout(ctx).apply {
orientation = LinearLayout.HORIZONTAL
addView(NumberPicker(ctx).apply {
minValue = 0
maxValue = 60
}, LinearLayout.LayoutParams(-2, -2).apply {
weight = 1F
})
addView(NumberPicker(ctx).apply {
minValue = 0
maxValue = 60
}, LinearLayout.LayoutParams(-2, -2).apply {
weight = 1F
})
})
}
}