From c5d5b54671b2d7406b0815f92489b4e9b3721f6b Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 5 Jun 2020 18:05:29 +0300 Subject: [PATCH] Dialog improvements. --- .../kotlin/com/tutpro/baresip/MainActivity.kt | 69 ++++++++++--------- .../main/kotlin/com/tutpro/baresip/Utils.kt | 23 ++++--- app/src/main/res/layout/alert_title.xml | 10 +++ app/src/main/res/layout/password_dialog.xml | 18 +++-- 4 files changed, 77 insertions(+), 43 deletions(-) create mode 100644 app/src/main/res/layout/alert_title.xml diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 6da5c660..b59abc6f 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -197,10 +197,13 @@ class MainActivity : AppCompatActivity() { getString(R.string.peer_not_verified)) } "green" -> { - val unverifyDialog = AlertDialog.Builder(this) - unverifyDialog.setTitle(getString(R.string.info)) - unverifyDialog.setMessage(getString(R.string.call_is_secure)) - unverifyDialog.setPositiveButton(getString(R.string.unverify)) { dialog, _ -> + val inflater = this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val titleView = inflater.inflate(R.layout.alert_title, null) as TextView + titleView.text = getString(R.string.info) + val builder = AlertDialog.Builder(this) + builder.setCustomTitle(titleView) + builder.setMessage(getString(R.string.call_is_secure)) + builder.setPositiveButton(getString(R.string.unverify)) { dialog, _ -> val calls = Call.uaCalls(UserAgent.uas()[aorSpinner.selectedItemPosition], "") if (calls.size > 0) { if (Api.cmd_exec("zrtp_unverify " + calls[0].zid) != 0) { @@ -213,10 +216,10 @@ class MainActivity : AppCompatActivity() { } dialog.dismiss() } - unverifyDialog.setNegativeButton(getString(R.string.no)) { dialog, _ -> + builder.setNegativeButton(getString(R.string.no)) { dialog, _ -> dialog.dismiss() } - unverifyDialog.create().show() + builder.create().show() } } } @@ -585,17 +588,16 @@ class MainActivity : AppCompatActivity() { if (event == "stopped") { Log.d("Baresip", "Handling service event 'stopped' with param '${params[0]}'") if (params[0] != "") { - val alertDialog = AlertDialog.Builder(this).create() - alertDialog.setTitle(getString(R.string.notice)) - alertDialog.setMessage(getString(R.string.start_failed)) - alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.ok) - ) { dialog, _ -> + val inflater = this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val titleView = inflater.inflate(R.layout.alert_title, null) as TextView + titleView.text = getString(R.string.notice) + val builder = AlertDialog.Builder(this) + builder.setCustomTitle(titleView) + builder.setMessage(getString(R.string.start_failed)) + builder.setNeutralButton(getString(R.string.ok)) { dialog, _ -> dialog.dismiss() - //quitTimer.cancel() - //finishAndRemoveTask() - //System.exit(0) } - alertDialog.show() + builder.create().show() } else { quitTimer.cancel() finishAndRemoveTask() @@ -679,11 +681,14 @@ class MainActivity : AppCompatActivity() { Log.w("Baresip", "Call $callp to be verified is not found") return } - val verifyDialog = AlertDialog.Builder(this@MainActivity) - verifyDialog.setTitle(getString(R.string.verify)) - verifyDialog.setMessage(String.format(getString(R.string.verify_sas), + val inflater = this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val titleView = inflater.inflate(R.layout.alert_title, null) as TextView + titleView.text = getString(R.string.verify) + val builder = AlertDialog.Builder(this) + builder.setCustomTitle(titleView) + builder.setMessage(String.format(getString(R.string.verify_sas), ev[1], ev[2])) - verifyDialog.setPositiveButton(getString(R.string.yes)) { dialog, _ -> + builder.setPositiveButton(getString(R.string.yes)) { dialog, _ -> val security: Int if (Api.cmd_exec("zrtp_verify ${ev[3]}") != 0) { Log.e("Baresip", "Command 'zrtp_verify ${ev[3]}' failed") @@ -700,7 +705,7 @@ class MainActivity : AppCompatActivity() { dialog.dismiss() } } - verifyDialog.setNegativeButton(getString(R.string.no)) { dialog, _ -> + builder.setNegativeButton(getString(R.string.no)) { dialog, _ -> call.security = R.drawable.box_yellow call.zid = ev[3] if (aor == aorSpinner.tag) { @@ -710,7 +715,7 @@ class MainActivity : AppCompatActivity() { } dialog.dismiss() } - if (!isFinishing()) verifyDialog.create().show() + if (!isFinishing()) builder.create().show() } "call verified", "call secure" -> { val callp = params[1] @@ -1011,19 +1016,20 @@ class MainActivity : AppCompatActivity() { private fun askPassword(title: String, ua: UserAgent? = null) { val builder = AlertDialog.Builder(this) - builder.setTitle(title) - val viewInflated = LayoutInflater.from(this) + val layout = LayoutInflater.from(this) .inflate(R.layout.password_dialog, findViewById(android.R.id.content) as ViewGroup, false) - val input = viewInflated.findViewById(R.id.password) as EditText - val checkBox = viewInflated.findViewById(R.id.checkbox) as CheckBox + val titleView = layout.findViewById(R.id.title) as TextView + titleView.text = title + val input = layout.findViewById(R.id.password) as EditText + val checkBox = layout.findViewById(R.id.checkbox) as CheckBox checkBox.setOnCheckedChangeListener { _, isChecked -> if (isChecked) input.transformationMethod = HideReturnsTransformationMethod() else input.transformationMethod = PasswordTransformationMethod() } - builder.setView(viewInflated) + builder.setView(layout) builder.setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.dismiss() var password = input.text.toString().trim() @@ -1055,19 +1061,20 @@ class MainActivity : AppCompatActivity() { (Utils.paramValue(params, "auth_pass") == "")) { val aor = account.substringAfter("<").substringBefore(">") val builder = AlertDialog.Builder(this) - builder.setTitle(String.format(getString(R.string.account_password), Utils.plainAor(aor))) - val viewInflated = LayoutInflater.from(this) + val layout = LayoutInflater.from(this) .inflate(R.layout.password_dialog, findViewById(android.R.id.content) as ViewGroup, false) - val input = viewInflated.findViewById(R.id.password) as EditText - val checkBox = viewInflated.findViewById(R.id.checkbox) as CheckBox + val titleView = layout.findViewById(R.id.title) as TextView + titleView.text = String.format(getString(R.string.account_password), Utils.plainAor(aor)) + val input = layout.findViewById(R.id.password) as EditText + val checkBox = layout.findViewById(R.id.checkbox) as CheckBox checkBox.setOnCheckedChangeListener { _, isChecked -> if (isChecked) input.transformationMethod = HideReturnsTransformationMethod() else input.transformationMethod = PasswordTransformationMethod() } - builder.setView(viewInflated) + builder.setView(layout) builder.setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.dismiss() val password = input.text.toString().trim() diff --git a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt index 075d37a4..0c8b6c8a 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt @@ -1,9 +1,9 @@ package com.tutpro.baresip +import android.annotation.SuppressLint import android.app.Activity import android.app.ActivityManager import android.content.Context -import androidx.appcompat.app.AlertDialog import android.content.Intent import android.content.pm.PackageManager import android.graphics.Bitmap @@ -12,18 +12,20 @@ import android.graphics.Color import android.net.LinkAddress import android.net.LinkProperties import android.os.Bundle -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat import android.text.Editable import android.text.TextWatcher - -import kotlin.collections.ArrayList -import kotlin.Exception +import android.view.LayoutInflater +import android.widget.TextView +import androidx.appcompat.app.AlertDialog +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat import java.io.* import java.security.SecureRandom import java.util.* -import java.util.zip.* +import java.util.zip.ZipEntry +import java.util.zip.ZipFile +import java.util.zip.ZipOutputStream import javax.crypto.Cipher import javax.crypto.SecretKeyFactory @@ -31,6 +33,8 @@ import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.PBEKeySpec import javax.crypto.spec.SecretKeySpec +import kotlin.collections.ArrayList + object Utils { fun getNameValue(string: String, name: String): ArrayList { @@ -50,9 +54,12 @@ object Utils { return result } + @SuppressLint("InflateParams") fun alertView(context: Context, title: String, message: String, action: () -> (Unit) = {}) { + val titleView = LayoutInflater.from(context).inflate(R.layout.alert_title, null) as TextView + titleView.text = title val builder = AlertDialog.Builder(context) - builder.setTitle(title) + builder.setCustomTitle(titleView) .setMessage(message) .setPositiveButton(R.string.ok) { dialog, _ -> diff --git a/app/src/main/res/layout/alert_title.xml b/app/src/main/res/layout/alert_title.xml new file mode 100644 index 00000000..4136548d --- /dev/null +++ b/app/src/main/res/layout/alert_title.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/layout/password_dialog.xml b/app/src/main/res/layout/password_dialog.xml index 79a51b3f..357fd029 100644 --- a/app/src/main/res/layout/password_dialog.xml +++ b/app/src/main/res/layout/password_dialog.xml @@ -1,12 +1,22 @@ - + android:orientation="vertical" > + + + android:layout_height="wrap_content" + android:padding="?dialogPreferredPadding" > - \ No newline at end of file + \ No newline at end of file