diff --git a/app/build.gradle b/app/build.gradle index 579e0ef..bf86a16 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,6 +5,7 @@ plugins { id 'kotlin-kapt' id 'org.jmailen.kotlinter' version '2.1.1' id 'com.github.ben-manes.versions' version '0.25.0' + id 'io.gitlab.arturbosch.detekt' version '1.0.1' } android { @@ -82,3 +83,9 @@ kotlinter { experimentalRules = false disabledRules = ['import-ordering'] } + +detekt { + input = files("src/main/java") + filters = ".*/resources/.*,.*/build/.*" + baseline = file("detekt-baseline.xml") +} diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml new file mode 100644 index 0000000..34dac38 --- /dev/null +++ b/app/detekt-baseline.xml @@ -0,0 +1,35 @@ + + + + + ComplexMethod:Dtmf.kt$Dtmf.Companion$private fun dksAlphaToDigits(text: String, ack: String): String + ComplexMethod:Dtmf.kt$Dtmf.Companion$private fun linearAlphaToDigits(text: String): String + ComplexMethod:MainActivity.kt$MainActivity$private fun validateConfig(config: Config, errors: StringBuilder): Boolean + ComplexMethod:ProgrammingActivity.kt$ProgrammingActivity$override fun onCreate(savedInstanceState: Bundle?) + ComplexMethod:ProgrammingActivity.kt$ProgrammingActivity$private fun validateFields(type: String, fields: ArrayList<EditText>, option: Option): Boolean + LongMethod:MainActivity.kt$MainActivity$override fun onCreate(savedInstanceState: Bundle?) + LongMethod:MainActivity.kt$MainActivity$private fun validateConfig(config: Config, errors: StringBuilder): Boolean + LongMethod:ProgrammingActivity.kt$ProgrammingActivity$override fun onCreate(savedInstanceState: Bundle?) + MagicNumber:MainActivity.kt$MainActivity$10 + MagicNumber:MainActivity.kt$MainActivity$18f + MagicNumber:MainActivity.kt$MainActivity$20 + MagicNumber:MainActivity.kt$MainActivity$24f + MagicNumber:MainActivity.kt$MainActivity$40 + MagicNumber:MainActivity.kt$MainActivity$42 + MagicNumber:MainActivity.kt$MainActivity$5 + MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$16 + MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$20 + MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$20f + MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$24f + MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$40 + MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$6 + MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$80 + MagicNumber:ProgrammingActivity.kt$ProgrammingActivity$84 + NestedBlockDepth:Dtmf.kt$Dtmf.Companion$fun validate(dtmf: String, extra: String, nodial: Boolean): Boolean + NestedBlockDepth:MainActivity.kt$MainActivity$private fun initConfigurations() + NestedBlockDepth:MinMaxFilter.kt$MinMaxFilter$private fun isInRange(s: String, size: Int, min: Int, max: Int, zeros: Boolean): Boolean + NestedBlockDepth:Strings.kt$fun String.replaceAll(replace: Array<Pair<String, String>>): String + ReturnCount:MinMaxFilter.kt$MinMaxFilter$private fun isInRange(s: String, size: Int, min: Int, max: Int, zeros: Boolean): Boolean + TooManyFunctions:MainActivity.kt$MainActivity : AppCompatActivityAnkoLogger + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 471b7aa..5858a6f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -12,7 +13,8 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + tools:ignore="GoogleAppIndexingWarning"> if (id == EditorInfo.IME_ACTION_DONE) { clearFocus() - val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + val imm = + getSystemService(Context.INPUT_METHOD_SERVICE) + as InputMethodManager imm.hideSoftInputFromWindow(windowToken, 0) true } else { diff --git a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/StepsActivity.kt b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/StepsActivity.kt index ad0ca39..de39907 100644 --- a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/StepsActivity.kt +++ b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/StepsActivity.kt @@ -44,7 +44,7 @@ class StepsActivity : FragmentActivity() { fm: FragmentManager, steps: ArrayList ) : FragmentStatePagerAdapter(fm) { - private val steps = ArrayList(steps) + private val steps = ArrayList(steps) override fun getItem(position: Int): Fragment = StepsFragment.create(position, steps) diff --git a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/util/Dtmf.kt b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/util/Dtmf.kt index e9d1eb6..745bf11 100644 --- a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/util/Dtmf.kt +++ b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/util/Dtmf.kt @@ -21,6 +21,7 @@ import android.widget.EditText import net.thauvin.erik.android.tesremoteprogrammer.MainActivity import net.thauvin.erik.android.tesremoteprogrammer.models.Option import java.util.ArrayList +import java.util.Locale class Dtmf { companion object { @@ -34,7 +35,7 @@ class Dtmf { private fun dksAlphaToDigits(text: String, ack: String): String { val result = StringBuffer() - text.toUpperCase().forEach { c -> + text.toUpperCase(Locale.getDefault()).forEach { c -> when (c) { 'A' -> result.append("2$ack${MainActivity.PAUSE}") 'B' -> result.append("22$ack${MainActivity.PAUSE}") @@ -92,7 +93,7 @@ class Dtmf { private fun linearAlphaToDigits(text: String): String { val result = StringBuffer() - text.toUpperCase().forEach { c -> + text.toUpperCase(Locale.getDefault()).forEach { c -> when (c) { 'A' -> result.append("1${MainActivity.PAUSE}") 'B' -> result.append("11${MainActivity.PAUSE}") @@ -177,10 +178,10 @@ class Dtmf { } fun validate(dtmf: String, extra: String, nodial: Boolean): Boolean { - dtmf.split(MainActivity.PAUSE).forEach { - if (!(nodial && it.endsWith(MainActivity.QUOTE) && it.startsWith(MainActivity.QUOTE))) { - it.forEach { - if (!(it.isDigit() || it == ',' || extra.contains(it))) { + dtmf.split(MainActivity.PAUSE).forEach { s -> + if (!(nodial && s.endsWith(MainActivity.QUOTE) && s.startsWith(MainActivity.QUOTE))) { + s.forEach { ch -> + if (!(ch.isDigit() || ch == ',' || extra.contains(ch))) { return false } } diff --git a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/util/Strings.kt b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/util/Strings.kt index 52a16f0..b828b99 100644 --- a/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/util/Strings.kt +++ b/app/src/main/java/net/thauvin/erik/android/tesremoteprogrammer/util/Strings.kt @@ -17,19 +17,9 @@ */ package net.thauvin.erik.android.tesremoteprogrammer.util -fun String.isDigits(): Boolean { - if (isBlank()) { - return false - } +private val digitPattern = Regex("[0-9]+") - forEach { - if (!it.isDigit()) { - return false - } - } - - return true -} +fun String.isDigits() = isNotBlank() && matches(digitPattern) fun String.isDKS(): Boolean = equals(Dtmf.DKS, true)