Added ktlint.

This commit is contained in:
Erik C. Thauvin 2018-11-06 01:14:50 -08:00
parent 1ea0e84239
commit 4c314683c7
19 changed files with 325 additions and 259 deletions

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View file

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Erik's Code Style" />
</state>
</component>

View file

@ -1,3 +1,7 @@
plugins {
id "org.jlleitschuh.gradle.ktlint" version "6.2.1"
}
//noinspection GradleCompatible //noinspection GradleCompatible
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'

View file

@ -25,12 +25,10 @@ import org.acra.ACRA
import org.acra.ReportingInteractionMode import org.acra.ReportingInteractionMode
import org.acra.annotation.ReportsCrashes import org.acra.annotation.ReportsCrashes
@ReportsCrashes(mailTo = "erik@thauvin.net", @ReportsCrashes(mailTo = "erik@thauvin.net",
mode = ReportingInteractionMode.DIALOG, mode = ReportingInteractionMode.DIALOG,
reportSenderFactoryClasses = arrayOf(CrashEmailFactory::class), reportSenderFactoryClasses = arrayOf(CrashEmailFactory::class),
reportDialogClass = CrashReportActivity::class) reportDialogClass = CrashReportActivity::class)
open class App : Application() { open class App : Application() {
override fun attachBaseContext(base: Context) { override fun attachBaseContext(base: Context) {
super.attachBaseContext(base) super.attachBaseContext(base)

View file

@ -27,7 +27,11 @@ import android.graphics.Typeface
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.text.* import android.text.Html
import android.text.InputFilter
import android.text.InputType
import android.text.Spanned
import android.text.TextUtils
import android.util.TypedValue import android.util.TypedValue
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
@ -45,9 +49,22 @@ import net.thauvin.erik.android.tesremoteprogrammer.models.Configurations
import net.thauvin.erik.android.tesremoteprogrammer.util.Dtmf import net.thauvin.erik.android.tesremoteprogrammer.util.Dtmf
import net.thauvin.erik.android.tesremoteprogrammer.util.isDKS import net.thauvin.erik.android.tesremoteprogrammer.util.isDKS
import net.thauvin.erik.android.tesremoteprogrammer.util.isDigits import net.thauvin.erik.android.tesremoteprogrammer.util.isDigits
import org.jetbrains.anko.* import org.jetbrains.anko.AnkoLogger
import org.jetbrains.anko.alert
import org.jetbrains.anko.bottomPadding
import org.jetbrains.anko.cancelButton
import org.jetbrains.anko.design.textInputEditText import org.jetbrains.anko.design.textInputEditText
import org.jetbrains.anko.design.textInputLayout import org.jetbrains.anko.design.textInputLayout
import org.jetbrains.anko.dip
import org.jetbrains.anko.horizontalPadding
import org.jetbrains.anko.info
import org.jetbrains.anko.listView
import org.jetbrains.anko.padding
import org.jetbrains.anko.singleLine
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.textView
import org.jetbrains.anko.topPadding
import org.jetbrains.anko.verticalLayout
import permissions.dispatcher.NeedsPermission import permissions.dispatcher.NeedsPermission
import permissions.dispatcher.RuntimePermissions import permissions.dispatcher.RuntimePermissions
import java.io.FileNotFoundException import java.io.FileNotFoundException
@ -55,7 +72,9 @@ import java.io.InputStreamReader
import java.io.ObjectInputStream import java.io.ObjectInputStream
import java.io.ObjectOutputStream import java.io.ObjectOutputStream
import java.text.DateFormat import java.text.DateFormat
import java.util.* import java.util.ArrayList
import java.util.Date
import java.util.Locale
@RuntimePermissions @RuntimePermissions
class MainActivity : AppCompatActivity(), AnkoLogger { class MainActivity : AppCompatActivity(), AnkoLogger {
@ -340,16 +359,17 @@ class MainActivity : AppCompatActivity(), AnkoLogger {
} }
alert.show() alert.show()
} }
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
} }
@SuppressLint("NeedOnRequestPermissionsResult") @SuppressLint("NeedOnRequestPermissionsResult")
override fun onRequestPermissionsResult(requestCode: Int, override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>, permissions: Array<out String>,
grantResults: IntArray) { grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
onRequestPermissionsResult(requestCode, grantResults) onRequestPermissionsResult(requestCode, grantResults)
} }
@ -397,7 +417,6 @@ class MainActivity : AppCompatActivity(), AnkoLogger {
errors.append(getString(R.string.validate_missing_param, "type")) errors.append(getString(R.string.validate_missing_param, "type"))
} else if (!Dtmf.isValidType(type)) { } else if (!Dtmf.isValidType(type)) {
errors.append(getString(R.string.validate_invalid_param, "type")) errors.append(getString(R.string.validate_invalid_param, "type"))
} }
// size // size

View file

@ -32,7 +32,9 @@ import android.text.SpannableString
import android.text.TextUtils import android.text.TextUtils
import android.text.style.ImageSpan import android.text.style.ImageSpan
import android.util.TypedValue import android.util.TypedValue
import android.view.Gravity.* import android.view.Gravity.BOTTOM
import android.view.Gravity.END
import android.view.Gravity.START
import android.view.ViewManager import android.view.ViewManager
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
@ -47,16 +49,29 @@ import net.thauvin.erik.android.tesremoteprogrammer.util.Dtmf
import net.thauvin.erik.android.tesremoteprogrammer.util.isDKS import net.thauvin.erik.android.tesremoteprogrammer.util.isDKS
import net.thauvin.erik.android.tesremoteprogrammer.util.isLinear import net.thauvin.erik.android.tesremoteprogrammer.util.isLinear
import net.thauvin.erik.android.tesremoteprogrammer.widget.ScrollAwareFABBehavior import net.thauvin.erik.android.tesremoteprogrammer.widget.ScrollAwareFABBehavior
import org.jetbrains.anko.* import org.jetbrains.anko.AnkoLogger
import org.jetbrains.anko.bottomPadding
import org.jetbrains.anko.custom.ankoView import org.jetbrains.anko.custom.ankoView
import org.jetbrains.anko.design.coordinatorLayout import org.jetbrains.anko.design.coordinatorLayout
import org.jetbrains.anko.design.floatingActionButton import org.jetbrains.anko.design.floatingActionButton
import org.jetbrains.anko.design.textInputEditText import org.jetbrains.anko.design.textInputEditText
import org.jetbrains.anko.design.textInputLayout import org.jetbrains.anko.design.textInputLayout
import org.jetbrains.anko.dip
import org.jetbrains.anko.horizontalPadding
import org.jetbrains.anko.imageResource
import org.jetbrains.anko.info
import org.jetbrains.anko.makeCall
import org.jetbrains.anko.matchParent
import org.jetbrains.anko.padding
import org.jetbrains.anko.singleLine
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.support.v4.nestedScrollView import org.jetbrains.anko.support.v4.nestedScrollView
import org.jetbrains.anko.topPadding
import org.jetbrains.anko.verticalLayout
import org.jetbrains.anko.wrapContent
import permissions.dispatcher.NeedsPermission import permissions.dispatcher.NeedsPermission
import permissions.dispatcher.RuntimePermissions import permissions.dispatcher.RuntimePermissions
import java.util.* import java.util.ArrayList
@RuntimePermissions @RuntimePermissions
class ProgrammingActivity : AppCompatActivity(), AnkoLogger { class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
@ -100,7 +115,6 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
typeface = Typeface.create(Typeface.DEFAULT, Typeface.ITALIC) typeface = Typeface.create(Typeface.DEFAULT, Typeface.ITALIC)
freezesText = true freezesText = true
}.lparams(width = matchParent, height = matchParent) }.lparams(width = matchParent, height = matchParent)
} else { } else {
val it = option.fields.iterator() val it = option.fields.iterator()
while (it.hasNext()) { while (it.hasNext()) {
@ -252,9 +266,11 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
} }
@SuppressLint("NeedOnRequestPermissionsResult") @SuppressLint("NeedOnRequestPermissionsResult")
override fun onRequestPermissionsResult(requestCode: Int, override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>, permissions: Array<out String>,
grantResults: IntArray) { grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
onRequestPermissionsResult(requestCode, grantResults) onRequestPermissionsResult(requestCode, grantResults)
} }

View file

@ -22,8 +22,9 @@ import android.app.FragmentManager
import android.os.Bundle import android.os.Bundle
import android.support.v13.app.FragmentStatePagerAdapter import android.support.v13.app.FragmentStatePagerAdapter
import android.support.v4.app.FragmentActivity import android.support.v4.app.FragmentActivity
import kotlinx.android.synthetic.main.activity_steps.* import kotlinx.android.synthetic.main.activity_steps.indicator
import java.util.* import kotlinx.android.synthetic.main.activity_steps.pager
import java.util.ArrayList
class StepsActivity : FragmentActivity() { class StepsActivity : FragmentActivity() {
companion object { companion object {
@ -39,8 +40,10 @@ class StepsActivity : FragmentActivity() {
indicator.fades = false indicator.fades = false
} }
private inner class StepsAdapter(fm: FragmentManager, private inner class StepsAdapter(
steps: ArrayList<String>) : FragmentStatePagerAdapter(fm) { fm: FragmentManager,
steps: ArrayList<String>
) : FragmentStatePagerAdapter(fm) {
private val steps = ArrayList<String>(steps) private val steps = ArrayList<String>(steps)
override fun getItem(position: Int): Fragment = StepsFragment.create(position, steps) override fun getItem(position: Int): Fragment = StepsFragment.create(position, steps)

View file

@ -22,8 +22,9 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import kotlinx.android.synthetic.main.fragment_steps.* import kotlinx.android.synthetic.main.fragment_steps.frag_steps
import java.util.* import kotlinx.android.synthetic.main.fragment_steps.frag_steps_title
import java.util.ArrayList
class StepsFragment : Fragment() { class StepsFragment : Fragment() {
private var pageNumber: Int = 0 private var pageNumber: Int = 0
@ -51,9 +52,11 @@ class StepsFragment : Fragment() {
pageNumber = arguments.getInt(ARG_PAGE) pageNumber = arguments.getInt(ARG_PAGE)
} }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, override fun onCreateView(
savedInstanceState: Bundle?): View? = inflater: LayoutInflater,
inflater.inflate(R.layout.fragment_steps, container, false) as ViewGroup container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.fragment_steps, container, false) as ViewGroup
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)

View file

@ -22,13 +22,14 @@ import android.text.SpannableStringBuilder
import android.text.Spanned import android.text.Spanned
class AlphaFilter(private val extras: String) : InputFilter { class AlphaFilter(private val extras: String) : InputFilter {
override fun filter(source: CharSequence, override fun filter(
source: CharSequence,
start: Int, start: Int,
end: Int, end: Int,
dest: Spanned, dest: Spanned,
dstart: Int, dstart: Int,
dend: Int): CharSequence? { dend: Int
): CharSequence? {
if (source is SpannableStringBuilder) { if (source is SpannableStringBuilder) {
for (i in end - 1 downTo start) { for (i in end - 1 downTo start) {
val c = source[i] val c = source[i]

View file

@ -27,13 +27,14 @@ class NumberFilter(allowed: String, alt: String) : InputFilter, AnkoLogger {
private val allowed: String private val allowed: String
private val digits = "0123456789" private val digits = "0123456789"
override fun filter(source: CharSequence, override fun filter(
source: CharSequence,
start: Int, start: Int,
end: Int, end: Int,
dest: Spanned, dest: Spanned,
dstart: Int, dstart: Int,
dend: Int): CharSequence? { dend: Int
): CharSequence? {
if (source is SpannableStringBuilder) { if (source is SpannableStringBuilder) {
for (i in end - 1 downTo start) { for (i in end - 1 downTo start) {
val c = source[i] val c = source[i]

View file

@ -23,9 +23,11 @@ import java.io.Serializable
data class Config(var params: Params, var opts: List<Option>) : Parcelable, Serializable, Comparable<Config> { data class Config(var params: Params, var opts: List<Option>) : Parcelable, Serializable, Comparable<Config> {
companion object { companion object {
private @JvmStatic val serialVersionUID: Long = 1 @JvmStatic
private val serialVersionUID: Long = 1
@JvmField val CREATOR: Parcelable.Creator<Config> = object : Parcelable.Creator<Config> { @JvmField
val CREATOR: Parcelable.Creator<Config> = object : Parcelable.Creator<Config> {
override fun createFromParcel(source: Parcel): Config = Config(source) override fun createFromParcel(source: Parcel): Config = Config(source)
override fun newArray(size: Int): Array<Config?> = arrayOfNulls(size) override fun newArray(size: Int): Array<Config?> = arrayOfNulls(size)
} }

View file

@ -18,11 +18,12 @@
package net.thauvin.erik.android.tesremoteprogrammer.models package net.thauvin.erik.android.tesremoteprogrammer.models
import java.io.Serializable import java.io.Serializable
import java.util.* import java.util.HashMap
class Configurations : Serializable { class Configurations : Serializable {
companion object { companion object {
private @JvmStatic val serialVersionUID: Long = 1 @JvmStatic
private val serialVersionUID: Long = 1
} }
val configs = HashMap<String, Config>() val configs = HashMap<String, Config>()

View file

@ -21,7 +21,8 @@ import android.os.Parcel
import android.os.Parcelable import android.os.Parcelable
import java.io.Serializable import java.io.Serializable
data class Field(var hint: String, data class Field(
var hint: String,
var digits: String, var digits: String,
var alpha: Boolean, var alpha: Boolean,
val alt: Boolean, val alt: Boolean,
@ -29,12 +30,14 @@ data class Field(var hint: String,
var minSize: Int, var minSize: Int,
var size: Int, var size: Int,
var min: Int, var min: Int,
var max: Int) : Parcelable, Serializable { var max: Int
) : Parcelable, Serializable {
companion object { companion object {
private @JvmStatic val serialVersionUID: Long = 1 @JvmStatic
private val serialVersionUID: Long = 1
@JvmField val CREATOR: Parcelable.Creator<Field> = object : Parcelable.Creator<Field> { @JvmField
val CREATOR: Parcelable.Creator<Field> = object : Parcelable.Creator<Field> {
override fun createFromParcel(source: Parcel): Field = Field(source) override fun createFromParcel(source: Parcel): Field = Field(source)
override fun newArray(size: Int): Array<Field?> = arrayOfNulls(size) override fun newArray(size: Int): Array<Field?> = arrayOfNulls(size)
} }

View file

@ -21,16 +21,19 @@ import android.os.Parcel
import android.os.Parcelable import android.os.Parcelable
import java.io.Serializable import java.io.Serializable
data class Option(var title: String, data class Option(
var title: String,
var fields: List<Field?>, var fields: List<Field?>,
var nodial: Boolean, var nodial: Boolean,
var nosteps: Boolean, var nosteps: Boolean,
var dtmf: String) : Parcelable, Serializable, Comparable<Option> { var dtmf: String
) : Parcelable, Serializable, Comparable<Option> {
companion object { companion object {
private @JvmStatic val serialVersionUID: Long = 1 @JvmStatic
private val serialVersionUID: Long = 1
@JvmField val CREATOR: Parcelable.Creator<Option> = object : Parcelable.Creator<Option> { @JvmField
val CREATOR: Parcelable.Creator<Option> = object : Parcelable.Creator<Option> {
override fun createFromParcel(source: Parcel): Option = Option(source) override fun createFromParcel(source: Parcel): Option = Option(source)
override fun newArray(size: Int): Array<Option?> = arrayOfNulls(size) override fun newArray(size: Int): Array<Option?> = arrayOfNulls(size)
} }
@ -56,5 +59,4 @@ data class Option(var title: String,
dest?.writeInt((if (nosteps) 1 else 0)) dest?.writeInt((if (nosteps) 1 else 0))
dest?.writeString(dtmf) dest?.writeString(dtmf)
} }
} }

View file

@ -21,7 +21,8 @@ import android.os.Parcel
import android.os.Parcelable import android.os.Parcelable
import java.io.Serializable import java.io.Serializable
data class Params(var name: String, data class Params(
var name: String,
var type: String, var type: String,
var phone: String, var phone: String,
var master: String, var master: String,
@ -29,12 +30,14 @@ data class Params(var name: String,
var ack: String, var ack: String,
var alt: String, var alt: String,
var begin: String, var begin: String,
var end: String) : Parcelable, Serializable { var end: String
) : Parcelable, Serializable {
companion object { companion object {
private @JvmStatic val serialVersionUID: Long = 1 @JvmStatic
private val serialVersionUID: Long = 1
@JvmField val CREATOR: Parcelable.Creator<Params> = object : Parcelable.Creator<Params> { @JvmField
val CREATOR: Parcelable.Creator<Params> = object : Parcelable.Creator<Params> {
override fun createFromParcel(source: Parcel): Params = Params(source) override fun createFromParcel(source: Parcel): Params = Params(source)
override fun newArray(size: Int): Array<Params?> = arrayOfNulls(size) override fun newArray(size: Int): Array<Params?> = arrayOfNulls(size)
} }

View file

@ -20,7 +20,7 @@ package net.thauvin.erik.android.tesremoteprogrammer.util
import android.widget.EditText import android.widget.EditText
import net.thauvin.erik.android.tesremoteprogrammer.MainActivity import net.thauvin.erik.android.tesremoteprogrammer.MainActivity
import net.thauvin.erik.android.tesremoteprogrammer.models.Option import net.thauvin.erik.android.tesremoteprogrammer.models.Option
import java.util.* import java.util.ArrayList
class Dtmf { class Dtmf {
companion object { companion object {
@ -89,7 +89,6 @@ class Dtmf {
fun isValidType(type: String): Boolean = type.equals(DKS, true) || type.equals(LINEAR, true) fun isValidType(type: String): Boolean = type.equals(DKS, true) || type.equals(LINEAR, true)
private fun linearAlphaToDigits(text: String): String { private fun linearAlphaToDigits(text: String): String {
val result = StringBuffer() val result = StringBuffer()
@ -150,11 +149,13 @@ class Dtmf {
return result.toString() return result.toString()
} }
fun build(type: String, fun build(
type: String,
master: String, master: String,
ack: String, ack: String,
option: Option, option: Option,
fields: ArrayList<EditText>): String { fields: ArrayList<EditText>
): String {
val replace = arrayListOf(Pair(DTMF_MASTER, master)) val replace = arrayListOf(Pair(DTMF_MASTER, master))
fields.forEachIndexed { i, field -> fields.forEachIndexed { i, field ->

View file

@ -23,24 +23,28 @@ import android.support.v4.view.ViewCompat
import android.view.View import android.view.View
class ScrollAwareFABBehavior : FloatingActionButton.Behavior() { class ScrollAwareFABBehavior : FloatingActionButton.Behavior() {
override fun onStartNestedScroll(coordinatorLayout: CoordinatorLayout, override fun onStartNestedScroll(
coordinatorLayout: CoordinatorLayout,
child: FloatingActionButton, child: FloatingActionButton,
directTargetChild: View, directTargetChild: View,
target: View, target: View,
nestedScrollAxes: Int, nestedScrollAxes: Int,
type: Int): Boolean = type: Int
): Boolean =
nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL || nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL ||
super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target,
nestedScrollAxes, type) nestedScrollAxes, type)
override fun onNestedScroll(coordinatorLayout: CoordinatorLayout, override fun onNestedScroll(
coordinatorLayout: CoordinatorLayout,
child: FloatingActionButton, child: FloatingActionButton,
target: View, target: View,
dxConsumed: Int, dxConsumed: Int,
dyConsumed: Int, dyConsumed: Int,
dxUnconsumed: Int, dxUnconsumed: Int,
dyUnconsumed: Int, dyUnconsumed: Int,
type: Int) { type: Int
) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed,
dxUnconsumed, dyUnconsumed, type) dxUnconsumed, dyUnconsumed, type)
if (dyConsumed > 0 && child.visibility == View.VISIBLE) { if (dyConsumed > 0 && child.visibility == View.VISIBLE) {