diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..ab73ccd
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..3b31283
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c9172f4..8ec3835 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,10 +1,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 25
- buildToolsVersion "25.0.2"
+ buildToolsVersion "26.0.0"
defaultConfig {
applicationId "net.thauvin.erik.android.tesremoteprogrammer"
@@ -33,12 +34,12 @@ dependencies {
compile 'com.android.support:support-v13:25.3.1'
compile 'com.android.support:appcompat-v7:25.3.1'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
- compile 'org.jetbrains.anko:anko-sdk23:0.9.1'
- compile 'org.jetbrains.anko:anko-appcompat-v7:0.9.1'
- compile 'org.jetbrains.anko:anko-support-v4:0.9.1'
- compile 'org.jetbrains.anko:anko-design:0.9.1'
+ compile 'org.jetbrains.anko:anko-sdk23:0.10.1'
+ compile 'org.jetbrains.anko:anko-appcompat-v7:0.10.1'
+ compile 'org.jetbrains.anko:anko-support-v4:0.10.1'
+ compile 'org.jetbrains.anko:anko-design:0.10.1'
compile 'com.android.support:design:25.3.1'
- compile group: 'com.google.code.gson', name: 'gson', version: '2.7'
+ compile group: 'com.google.code.gson', name: 'gson', version: '2.8.1'
// https://github.com/JakeWharton/ViewPagerIndicator
compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
diff --git a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/MainActivity.kt b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/MainActivity.kt
index 1d3b05d..3961c8a 100644
--- a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/MainActivity.kt
+++ b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/MainActivity.kt
@@ -22,6 +22,7 @@ import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.content.Intent
+import android.graphics.Color
import android.graphics.Typeface
import android.os.Build
import android.os.Bundle
@@ -38,7 +39,6 @@ import android.view.inputmethod.InputMethodManager
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.EditText
-import android.widget.TextView
import com.google.gson.Gson
import com.google.gson.JsonSyntaxException
import net.thauvin.erik.android.tesremoteprogrammer.models.Config
@@ -143,8 +143,8 @@ class MainActivity : AppCompatActivity(), AnkoLogger {
if (errors.isNotEmpty()) {
alert {
- title(R.string.alert_config_error)
- message(fromHtml("$errors"))
+ title = getString(R.string.alert_config_error)
+ message = fromHtml("$errors")
cancelButton { }
}.show()
}
@@ -283,15 +283,24 @@ class MainActivity : AppCompatActivity(), AnkoLogger {
when (item?.itemId) {
R.id.action_about -> {
val alert = alert {
- title(R.string.app_name)
- message(fromHtml(getString(R.string.about_message, BuildConfig.VERSION_NAME,
- SimpleDateFormat("yyyy-MM-dd", Locale.US).format(Date(BuildConfig.TIMESTAMP)))))
- icon(R.mipmap.ic_launcher)
+ title = getString(R.string.app_name)
+ icon = getDrawable(R.mipmap.ic_launcher)
+ customView {
+ linearLayout {
+ topPadding = dip(16)
+ rightPadding = topPadding
+ leftPadding = topPadding * 2
+ textView(fromHtml(getString(R.string.about_message,
+ BuildConfig.VERSION_NAME,
+ SimpleDateFormat("yyyy-MM-dd", Locale.US).format(Date(BuildConfig.TIMESTAMP))))) {
+ movementMethod = LinkMovementMethod.getInstance()
+ setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18f)
+ setTextColor(Color.BLACK)
+ }
+ }
+ }
okButton {}
}.show()
-
- (alert.dialog?.findViewById(android.R.id.message) as TextView)
- .movementMethod = LinkMovementMethod.getInstance()
}
R.id.action_confs -> {
val confs = loadConfigurations().configs.toSortedMap()
diff --git a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/ProgrammingActivity.kt b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/ProgrammingActivity.kt
index 17b903d..e68e644 100644
--- a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/ProgrammingActivity.kt
+++ b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/ProgrammingActivity.kt
@@ -59,8 +59,8 @@ import java.util.*
class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
val empty = ""
- inline fun ViewManager.autofitTextView(theme: Int = 0, init: AutoResizeTextView.() -> Unit) = ankoView({ AutoResizeTextView(it) }, theme, init)
- inline fun ViewManager.textInputEditText(theme: Int = 0, init: TextInputEditText.() -> Unit) = ankoView({ TextInputEditText(it) }, theme, init)
+ inline fun ViewManager.autofitTextView(theme: Int = 0, init: AutoResizeTextView.() -> Unit) = ankoView(::AutoResizeTextView, theme, init)
+ inline fun ViewManager.textInputEditText(theme: Int = 0, init: TextInputEditText.() -> Unit) = ankoView(::TextInputEditText, theme, init)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -109,7 +109,7 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
val inputFilters: ArrayList = ArrayList()
- val editText = textInputEditText() {
+ val editText = textInputEditText {
hint = field!!.hint
if (field.alpha) {
@@ -171,35 +171,6 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
if (!option.nodial) {
backgroundTintList = ColorStateList.valueOf(Color.GRAY)
}
-
- onClick {
- if (validateFields(params.type, fields, option)) {
- val dtmf = Dtmf.build(params.type, params.master, params.ack, option, fields)
- if (Dtmf.validate(dtmf, "${MainActivity.PAUSE}${params.ack}${params.alt}", option.nodial)) {
- val begin = if (params.begin.isNotBlank()) {
- "${params.begin}${MainActivity.PAUSE}"
- } else {
- empty
- }
-
- val end = if (params.end.isNotBlank()) {
- "${MainActivity.PAUSE}${params.end}"
- } else {
- empty
- }
-
- startActivity(
- StepsActivity.EXTRA_STEPS to "$begin${dtmf.replace(MainActivity.QUOTE, empty)}$end".split(MainActivity.PAUSE))
- } else {
- Snackbar.make(this@coordinatorLayout,
- getString(R.string.error_invalid_dtmf, dtmf),
- Snackbar.LENGTH_LONG).show()
- }
- } else {
- Snackbar.make(this@coordinatorLayout, R.string.error_invalid_field,
- Snackbar.LENGTH_LONG).show()
- }
- }
}.lparams(width = wrapContent, height = wrapContent) {
if (option.nodial) {
gravity = BOTTOM or END
@@ -212,6 +183,33 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
bottomMargin = dip(16)
elevation = dip(6).toFloat()
behavior = ScrollAwareFABBehavior()
+ }.setOnClickListener {
+ if (validateFields(params.type, fields, option)) {
+ val dtmf = Dtmf.build(params.type, params.master, params.ack, option, fields)
+ if (Dtmf.validate(dtmf, "${MainActivity.PAUSE}${params.ack}${params.alt}", option.nodial)) {
+ val begin = if (params.begin.isNotBlank()) {
+ "${params.begin}${MainActivity.PAUSE}"
+ } else {
+ empty
+ }
+
+ val end = if (params.end.isNotBlank()) {
+ "${MainActivity.PAUSE}${params.end}"
+ } else {
+ empty
+ }
+
+ startActivity(
+ StepsActivity.EXTRA_STEPS to "$begin${dtmf.replace(MainActivity.QUOTE, empty)}$end".split(MainActivity.PAUSE))
+ } else {
+ Snackbar.make(this@coordinatorLayout,
+ getString(R.string.error_invalid_dtmf, dtmf),
+ Snackbar.LENGTH_LONG).show()
+ }
+ } else {
+ Snackbar.make(this@coordinatorLayout, R.string.error_invalid_field,
+ Snackbar.LENGTH_LONG).show()
+ }
}
}
@@ -219,28 +217,27 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
if (!option.nodial) {
floatingActionButton {
imageResource = R.drawable.fab_ic_call
- onClick {
- if (validateFields(params.type, fields, option)) {
- val dtmf = Dtmf.build(params.type, params.master, params.ack, option, fields)
- if (Dtmf.validate(dtmf, "${MainActivity.PAUSE}${params.ack}${params.alt}", option.nodial)) {
- ProgrammingActivityPermissionsDispatcher.callWithCheck(
- this@ProgrammingActivity, params.phone, dtmf)
- } else {
- Snackbar.make(this@coordinatorLayout,
- getString(R.string.error_invalid_dtmf, dtmf),
- Snackbar.LENGTH_LONG).show()
- }
- } else {
- Snackbar.make(this@coordinatorLayout, R.string.error_invalid_field,
- Snackbar.LENGTH_LONG).show()
- }
- }
}.lparams(width = wrapContent, height = wrapContent) {
gravity = BOTTOM or END
bottomMargin = dip(16)
rightMargin = dip(16)
elevation = dip(6).toFloat()
behavior = ScrollAwareFABBehavior()
+ }.setOnClickListener {
+ if (validateFields(params.type, fields, option)) {
+ val dtmf = Dtmf.build(params.type, params.master, params.ack, option, fields)
+ if (Dtmf.validate(dtmf, "${MainActivity.PAUSE}${params.ack}${params.alt}", option.nodial)) {
+ ProgrammingActivityPermissionsDispatcher.callWithCheck(
+ this@ProgrammingActivity, params.phone, dtmf)
+ } else {
+ Snackbar.make(this@coordinatorLayout,
+ getString(R.string.error_invalid_dtmf, dtmf),
+ Snackbar.LENGTH_LONG).show()
+ }
+ } else {
+ Snackbar.make(this@coordinatorLayout, R.string.error_invalid_field,
+ Snackbar.LENGTH_LONG).show()
+ }
}
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 00f8a65..0b7c415 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
- <p><b>Version %1$s</b> <small>(%2$s)</small></p><p>Developed by <a href=\"http://erik.thauvin.net/\"><b>Erik C. Thauvin</b></a>. See all my apps <a href=\"http://mobile.thauvin.net/android/\"><b>here</b></a>.</p><a href=\"http://thauv.in/TESRemote\"><b>thauv.in/TESRemote</b></a>
+ <p><b>Version %1$s</b> <small>(%2$s)</small></p><p>Developed by <a href=\"https://erik.thauvin.net/\"><b>Erik C. Thauvin</b></a>. See all my apps <a href=\"http://mobile.thauvin.net/android/\"><b>here</b></a>.</p><a href=\"http://thauv.in/TESRemote\"><b>thauv.in/TESRemote</b></a>
About
Configurations
Configuration Errors
diff --git a/build.gradle b/build.gradle
index 30ebe8c..a8738db 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,12 +1,12 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.1.1'
+ ext.kotlin_version = '1.1.3-2'
repositories {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.1'
+ classpath 'com.android.tools.build:gradle:2.3.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong