Added detekt.

This commit is contained in:
Erik C. Thauvin 2019-09-26 18:29:27 -07:00
parent da22420b47
commit 8f06802253
7 changed files with 62 additions and 23 deletions

View file

@ -5,6 +5,7 @@ plugins {
id 'kotlin-kapt' id 'kotlin-kapt'
id 'org.jmailen.kotlinter' version '2.1.1' id 'org.jmailen.kotlinter' version '2.1.1'
id 'com.github.ben-manes.versions' version '0.25.0' id 'com.github.ben-manes.versions' version '0.25.0'
id 'io.gitlab.arturbosch.detekt' version '1.0.1'
} }
android { android {
@ -82,3 +83,9 @@ kotlinter {
experimentalRules = false experimentalRules = false
disabledRules = ['import-ordering'] disabledRules = ['import-ordering']
} }
detekt {
input = files("src/main/java")
filters = ".*/resources/.*,.*/build/.*"
baseline = file("detekt-baseline.xml")
}

35
app/detekt-baseline.xml Normal file
View file

@ -0,0 +1,35 @@
<?xml version="1.0" ?>
<SmellBaseline>
<Blacklist></Blacklist>
<Whitelist>
<ID>ComplexMethod:Dtmf.kt$Dtmf.Companion$private fun dksAlphaToDigits(text: String, ack: String): String</ID>
<ID>ComplexMethod:Dtmf.kt$Dtmf.Companion$private fun linearAlphaToDigits(text: String): String</ID>
<ID>ComplexMethod:MainActivity.kt$MainActivity$private fun validateConfig(config: Config, errors: StringBuilder): Boolean</ID>
<ID>ComplexMethod:ProgrammingActivity.kt$ProgrammingActivity$override fun onCreate(savedInstanceState: Bundle?)</ID>
<ID>ComplexMethod:ProgrammingActivity.kt$ProgrammingActivity$private fun validateFields(type: String, fields: ArrayList&lt;EditText&gt;, option: Option): Boolean</ID>
<ID>LongMethod:MainActivity.kt$MainActivity$override fun onCreate(savedInstanceState: Bundle?)</ID>
<ID>LongMethod:MainActivity.kt$MainActivity$private fun validateConfig(config: Config, errors: StringBuilder): Boolean</ID>
<ID>LongMethod:ProgrammingActivity.kt$ProgrammingActivity$override fun onCreate(savedInstanceState: Bundle?)</ID>
<ID>MagicNumber:MainActivity.kt$MainActivity$10</ID>
<ID>MagicNumber:MainActivity.kt$MainActivity$18f</ID>
<ID>MagicNumber:MainActivity.kt$MainActivity$20</ID>
<ID>MagicNumber:MainActivity.kt$MainActivity$24f</ID>
<ID>MagicNumber:MainActivity.kt$MainActivity$40</ID>
<ID>MagicNumber:MainActivity.kt$MainActivity$42</ID>
<ID>MagicNumber:MainActivity.kt$MainActivity$5</ID>
<ID>MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$16</ID>
<ID>MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$20</ID>
<ID>MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$20f</ID>
<ID>MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$24f</ID>
<ID>MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$40</ID>
<ID>MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$6</ID>
<ID>MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$80</ID>
<ID>MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$84</ID>
<ID>NestedBlockDepth:Dtmf.kt$Dtmf.Companion$fun validate(dtmf: String, extra: String, nodial: Boolean): Boolean</ID>
<ID>NestedBlockDepth:MainActivity.kt$MainActivity$private fun initConfigurations()</ID>
<ID>NestedBlockDepth:MinMaxFilter.kt$MinMaxFilter$private fun isInRange(s: String, size: Int, min: Int, max: Int, zeros: Boolean): Boolean</ID>
<ID>NestedBlockDepth:Strings.kt$fun String.replaceAll(replace: Array&lt;Pair&lt;String, String&gt;&gt;): String</ID>
<ID>ReturnCount:MinMaxFilter.kt$MinMaxFilter$private fun isInRange(s: String, size: Int, min: Int, max: Int, zeros: Boolean): Boolean</ID>
<ID>TooManyFunctions:MainActivity.kt$MainActivity : AppCompatActivityAnkoLogger</ID>
</Whitelist>
</SmellBaseline>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="net.thauvin.erik.android.tesremoteprogrammer"> package="net.thauvin.erik.android.tesremoteprogrammer">
<uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PHONE" />
@ -12,7 +13,8 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity <activity
android:name=".SplashActivity" android:name=".SplashActivity"
android:label="@string/app_name" android:label="@string/app_name"

View file

@ -127,10 +127,12 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
if (field.alpha) { if (field.alpha) {
if (params.type.isDKS()) { if (params.type.isDKS()) {
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
inputFilters.add(AlphaFilter(Dtmf.DKS_EXTRAS)) inputFilters.add(AlphaFilter(Dtmf.DKS_EXTRAS))
} else if (params.type.isLinear()) { } else if (params.type.isLinear()) {
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_WORDS inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_WORDS
inputFilters.add(AlphaFilter(Dtmf.LINEAR_EXTRAS)) inputFilters.add(AlphaFilter(Dtmf.LINEAR_EXTRAS))
} }
} else { } else {
@ -166,7 +168,9 @@ class ProgrammingActivity : AppCompatActivity(), AnkoLogger {
setOnEditorActionListener { _, id, _ -> setOnEditorActionListener { _, id, _ ->
if (id == EditorInfo.IME_ACTION_DONE) { if (id == EditorInfo.IME_ACTION_DONE) {
clearFocus() clearFocus()
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager val imm =
getSystemService(Context.INPUT_METHOD_SERVICE)
as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0) imm.hideSoftInputFromWindow(windowToken, 0)
true true
} else { } else {

View file

@ -44,7 +44,7 @@ class StepsActivity : FragmentActivity() {
fm: FragmentManager, fm: FragmentManager,
steps: ArrayList<String> steps: ArrayList<String>
) : FragmentStatePagerAdapter(fm) { ) : FragmentStatePagerAdapter(fm) {
private val steps = ArrayList<String>(steps) private val steps = ArrayList(steps)
override fun getItem(position: Int): Fragment = StepsFragment.create(position, steps) override fun getItem(position: Int): Fragment = StepsFragment.create(position, steps)

View file

@ -21,6 +21,7 @@ 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.ArrayList import java.util.ArrayList
import java.util.Locale
class Dtmf { class Dtmf {
companion object { companion object {
@ -34,7 +35,7 @@ class Dtmf {
private fun dksAlphaToDigits(text: String, ack: String): String { private fun dksAlphaToDigits(text: String, ack: String): String {
val result = StringBuffer() val result = StringBuffer()
text.toUpperCase().forEach { c -> text.toUpperCase(Locale.getDefault()).forEach { c ->
when (c) { when (c) {
'A' -> result.append("2$ack${MainActivity.PAUSE}") 'A' -> result.append("2$ack${MainActivity.PAUSE}")
'B' -> result.append("22$ack${MainActivity.PAUSE}") 'B' -> result.append("22$ack${MainActivity.PAUSE}")
@ -92,7 +93,7 @@ class Dtmf {
private fun linearAlphaToDigits(text: String): String { private fun linearAlphaToDigits(text: String): String {
val result = StringBuffer() val result = StringBuffer()
text.toUpperCase().forEach { c -> text.toUpperCase(Locale.getDefault()).forEach { c ->
when (c) { when (c) {
'A' -> result.append("1${MainActivity.PAUSE}") 'A' -> result.append("1${MainActivity.PAUSE}")
'B' -> result.append("11${MainActivity.PAUSE}") 'B' -> result.append("11${MainActivity.PAUSE}")
@ -177,10 +178,10 @@ class Dtmf {
} }
fun validate(dtmf: String, extra: String, nodial: Boolean): Boolean { fun validate(dtmf: String, extra: String, nodial: Boolean): Boolean {
dtmf.split(MainActivity.PAUSE).forEach { dtmf.split(MainActivity.PAUSE).forEach { s ->
if (!(nodial && it.endsWith(MainActivity.QUOTE) && it.startsWith(MainActivity.QUOTE))) { if (!(nodial && s.endsWith(MainActivity.QUOTE) && s.startsWith(MainActivity.QUOTE))) {
it.forEach { s.forEach { ch ->
if (!(it.isDigit() || it == ',' || extra.contains(it))) { if (!(ch.isDigit() || ch == ',' || extra.contains(ch))) {
return false return false
} }
} }

View file

@ -17,19 +17,9 @@
*/ */
package net.thauvin.erik.android.tesremoteprogrammer.util package net.thauvin.erik.android.tesremoteprogrammer.util
fun String.isDigits(): Boolean { private val digitPattern = Regex("[0-9]+")
if (isBlank()) {
return false
}
forEach { fun String.isDigits() = isNotBlank() && matches(digitPattern)
if (!it.isDigit()) {
return false
}
}
return true
}
fun String.isDKS(): Boolean = equals(Dtmf.DKS, true) fun String.isDKS(): Boolean = equals(Dtmf.DKS, true)