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
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|