From 6f0134895651eed50f72a1beeedb824f9a71ecc7 Mon Sep 17 00:00:00 2001 From: thetwom Date: Mon, 15 May 2023 21:16:24 +0200 Subject: [PATCH] - Use chromatic tuner without string view, when instrument has no strings - Update dependencies --- .idea/compiler.xml | 2 +- app/build.gradle | 22 +++++++++++-------- .../tuner/fragments/TunerFragmentSimple.kt | 1 + .../moekadu/tuner/models/PitchHistoryModel.kt | 2 +- .../de/moekadu/tuner/models/StringsModel.kt | 4 ++++ .../tuner/notedetection/TuningTarget.kt | 19 +++++++++++----- .../tuner/viewmodels/TunerViewModel.kt | 7 +++++- build.gradle | 4 ++-- gradle.properties | 3 +++ gradle/wrapper/gradle-wrapper.properties | 2 +- 10 files changed, 46 insertions(+), 20 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index fb7f4a8a..b589d56e 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0c330470..f6bc0f43 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,11 +10,11 @@ android { applicationId "de.moekadu.tuner" minSdkVersion 23 targetSdkVersion 33 - versionCode 26 - versionName "6.0.0" + versionCode 27 + versionName "6.1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true - resConfigs "cs", "de", "en", "fr" + resourceConfigurations += ['cs', 'de', 'en', 'fr'] } buildTypes { release { @@ -23,6 +23,10 @@ android { } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } kotlinOptions { jvmTarget = "11" } @@ -31,16 +35,16 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.core:core-ktx:1.10.1' implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'androidx.activity:activity-ktx:1.6.1' - implementation 'androidx.fragment:fragment-ktx:1.5.5' + implementation 'androidx.activity:activity-ktx:1.7.1' + implementation 'androidx.fragment:fragment-ktx:1.5.7' implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4" - implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.5.1" + implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1" implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.preference:preference-ktx:1.2.0' - implementation 'com.google.android.material:material:1.9.0-alpha02' - implementation("androidx.recyclerview:recyclerview:1.2.1") + implementation 'com.google.android.material:material:1.9.0' + implementation("androidx.recyclerview:recyclerview:1.3.0") implementation("androidx.recyclerview:recyclerview-selection:1.1.0") testImplementation 'junit:junit:4.13.2' testImplementation 'android.arch.core:core-testing:1.1.1' diff --git a/app/src/main/java/de/moekadu/tuner/fragments/TunerFragmentSimple.kt b/app/src/main/java/de/moekadu/tuner/fragments/TunerFragmentSimple.kt index 5b705206..91f6cf57 100644 --- a/app/src/main/java/de/moekadu/tuner/fragments/TunerFragmentSimple.kt +++ b/app/src/main/java/de/moekadu/tuner/fragments/TunerFragmentSimple.kt @@ -131,6 +131,7 @@ class TunerFragmentSimple : Fragment() { stringViewChangeId = -1 if (model.settingsChangeId > stringViewChangeId) { + stringView?.visibility = if (model.isVisible) View.VISIBLE else View.GONE stringView?.enableExtraPadding = model.useExtraPadding val printer = model.noteNamePrinter if (model.instrument.isChromatic && printer != null) { diff --git a/app/src/main/java/de/moekadu/tuner/models/PitchHistoryModel.kt b/app/src/main/java/de/moekadu/tuner/models/PitchHistoryModel.kt index 727e9dde..34acbd9a 100644 --- a/app/src/main/java/de/moekadu/tuner/models/PitchHistoryModel.kt +++ b/app/src/main/java/de/moekadu/tuner/models/PitchHistoryModel.kt @@ -126,7 +126,7 @@ class PitchHistoryModel { // handle tuning target if (tuningTarget != null) { // Log.v("Tuner", "PitchHistoryModel.changeSettings: tuningTarget=$tuningTarget") - targetNote = if (tuningTarget.isPartOfInstrument) tuningTarget.note else null + targetNote = if (tuningTarget.isPartOfInstrument || tuningTarget.instrumentHasNoStrings) tuningTarget.note else null targetNoteFrequency = tuningTarget.frequency recomputeYRange = true recomputeToleranceBounds = true diff --git a/app/src/main/java/de/moekadu/tuner/models/StringsModel.kt b/app/src/main/java/de/moekadu/tuner/models/StringsModel.kt index 8062053d..6173cdad 100644 --- a/app/src/main/java/de/moekadu/tuner/models/StringsModel.kt +++ b/app/src/main/java/de/moekadu/tuner/models/StringsModel.kt @@ -39,6 +39,9 @@ class StringsModel { var highlightChangeId = 0 private set + var isVisible = true + private set + fun changeSettings( instrument: Instrument? = null, musicalScale: MusicalScale? = null, @@ -54,6 +57,7 @@ class StringsModel { if (this.instrument != it) { settingsChangeId = changeId doCheckInstrumentCompatibility = true + isVisible = !(!instrument.isChromatic && instrument.strings.isEmpty()) this.instrument = it } } diff --git a/app/src/main/java/de/moekadu/tuner/notedetection/TuningTarget.kt b/app/src/main/java/de/moekadu/tuner/notedetection/TuningTarget.kt index 8d18b6ad..494a3e69 100644 --- a/app/src/main/java/de/moekadu/tuner/notedetection/TuningTarget.kt +++ b/app/src/main/java/de/moekadu/tuner/notedetection/TuningTarget.kt @@ -7,7 +7,8 @@ import de.moekadu.tuner.temperaments.MusicalScale data class TuningTarget( val note: MusicalNote, val frequency: Float, - val isPartOfInstrument: Boolean + val isPartOfInstrument: Boolean, + val instrumentHasNoStrings: Boolean ) class TuningTargetComputer( @@ -32,7 +33,8 @@ class TuningTargetComputer( return TuningTarget( userDefinedTargetNote, musicalScale.getNoteFrequency(index), - sortedAndDistinctInstrumentStrings.isNotePartOfInstrument(userDefinedTargetNote) + isPartOfInstrument = sortedAndDistinctInstrumentStrings.isNotePartOfInstrument(userDefinedTargetNote), + instrumentHasNoStrings = !instrument.isChromatic && instrument.strings.isEmpty() ) } } @@ -42,7 +44,8 @@ class TuningTargetComputer( return TuningTarget( musicalScale.referenceNote, musicalScale.referenceFrequency, - sortedAndDistinctInstrumentStrings.isNotePartOfInstrument(musicalScale.referenceNote) + isPartOfInstrument = sortedAndDistinctInstrumentStrings.isNotePartOfInstrument(musicalScale.referenceNote), + instrumentHasNoStrings = !instrument.isChromatic && instrument.strings.isEmpty() ) } @@ -54,7 +57,8 @@ class TuningTargetComputer( return TuningTarget( detectedTargetNote, musicalScale.getNoteFrequency(index), - true + isPartOfInstrument = true, + instrumentHasNoStrings = !instrument.isChromatic && instrument.strings.isEmpty() ) } @@ -62,6 +66,11 @@ class TuningTargetComputer( val chromaticTargetNote = targetNoteAutoDetectionChromatic.detect(frequency, previousTargetNote) // the returned note will always be non null for chromatic instruments and non-zero frequencies val index = musicalScale.getNoteIndex(chromaticTargetNote!!) - return TuningTarget(chromaticTargetNote, musicalScale.getNoteFrequency(index), false) + return TuningTarget( + chromaticTargetNote, + musicalScale.getNoteFrequency(index), + isPartOfInstrument = false, + instrumentHasNoStrings = !instrument.isChromatic && instrument.strings.isEmpty() + ) } } diff --git a/app/src/main/java/de/moekadu/tuner/viewmodels/TunerViewModel.kt b/app/src/main/java/de/moekadu/tuner/viewmodels/TunerViewModel.kt index 36d09e3a..09ddaf76 100644 --- a/app/src/main/java/de/moekadu/tuner/viewmodels/TunerViewModel.kt +++ b/app/src/main/java/de/moekadu/tuner/viewmodels/TunerViewModel.kt @@ -81,7 +81,12 @@ class TunerViewModel( /** Current tuning target. */ private val _tuningTarget = MutableStateFlow( - TuningTarget(pref.musicalScale.value.referenceNote, pref.musicalScale.value.referenceFrequency, false) + TuningTarget( + pref.musicalScale.value.referenceNote, + pref.musicalScale.value.referenceFrequency, + isPartOfInstrument = false, + instrumentHasNoStrings = !instrument.value.instrument.isChromatic && instrument.value.instrument.strings.isEmpty() + ) ) private val tuningTarget = _tuningTarget.asStateFlow() diff --git a/build.gradle b/build.gradle index 97e7f32c..8508f405 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.7.20' + ext.kotlin_version = '1.8.21' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.3.1' + classpath 'com.android.tools.build:gradle:8.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle.properties b/gradle.properties index 23339e0d..9e73ebcb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,3 +19,6 @@ android.useAndroidX=true android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6c7bd382..26f60ad2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip