mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-08 08:08:45 +01:00
Add @ChecksSdkIntAtLeast
annotation, to be able to remove AndroidVersionTestOverrider
This commit is contained in:
parent
bb2eb56ee6
commit
832a472b57
@ -1,46 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.app
|
||||
|
||||
import android.os.Build
|
||||
import java.lang.reflect.Field
|
||||
|
||||
/**
|
||||
* Used to override [Build.VERSION.SDK_INT]. Ideally an interface should be used instead, but that approach forces us to either add suppress lint annotations
|
||||
* and potentially miss an API version issue or write a custom lint rule, which seems like an overkill.
|
||||
*/
|
||||
object AndroidVersionTestOverrider {
|
||||
|
||||
private var initialValue: Int? = null
|
||||
|
||||
fun override(newVersion: Int) {
|
||||
if (initialValue == null) {
|
||||
initialValue = Build.VERSION.SDK_INT
|
||||
}
|
||||
val field = Build.VERSION::class.java.getField("SDK_INT")
|
||||
setStaticField(field, newVersion)
|
||||
}
|
||||
|
||||
fun restore() {
|
||||
initialValue?.let { override(it) }
|
||||
}
|
||||
|
||||
private fun setStaticField(field: Field, value: Any) {
|
||||
field.isAccessible = true
|
||||
field.set(null, value)
|
||||
}
|
||||
}
|
@ -18,41 +18,36 @@ package im.vector.app.features.voice
|
||||
|
||||
import android.os.Build
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import im.vector.app.AndroidVersionTestOverrider
|
||||
import im.vector.app.TestBuildVersionSdkIntProvider
|
||||
import im.vector.app.features.DefaultVectorFeatures
|
||||
import io.mockk.every
|
||||
import io.mockk.spyk
|
||||
import org.amshove.kluent.shouldBeInstanceOf
|
||||
import org.junit.After
|
||||
import org.junit.Test
|
||||
|
||||
class VoiceRecorderProviderTests {
|
||||
|
||||
private val context = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
private val provider = spyk(VoiceRecorderProvider(context, DefaultVectorFeatures()))
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
AndroidVersionTestOverrider.restore()
|
||||
}
|
||||
private val buildVersionSdkIntProvider = TestBuildVersionSdkIntProvider()
|
||||
private val provider = spyk(VoiceRecorderProvider(context, DefaultVectorFeatures(), buildVersionSdkIntProvider))
|
||||
|
||||
@Test
|
||||
fun provideVoiceRecorderOnAndroidQAndCodecReturnsQRecorder() {
|
||||
AndroidVersionTestOverrider.override(Build.VERSION_CODES.Q)
|
||||
buildVersionSdkIntProvider.value = Build.VERSION_CODES.Q
|
||||
every { provider.hasOpusEncoder() } returns true
|
||||
provider.provideVoiceRecorder().shouldBeInstanceOf(VoiceRecorderQ::class)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun provideVoiceRecorderOnAndroidQButNoCodecReturnsLRecorder() {
|
||||
AndroidVersionTestOverrider.override(Build.VERSION_CODES.Q)
|
||||
buildVersionSdkIntProvider.value = Build.VERSION_CODES.Q
|
||||
every { provider.hasOpusEncoder() } returns false
|
||||
provider.provideVoiceRecorder().shouldBeInstanceOf(VoiceRecorderL::class)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun provideVoiceRecorderOnOlderAndroidVersionReturnsLRecorder() {
|
||||
AndroidVersionTestOverrider.override(Build.VERSION_CODES.LOLLIPOP)
|
||||
buildVersionSdkIntProvider.value = Build.VERSION_CODES.LOLLIPOP
|
||||
provider.provideVoiceRecorder().shouldBeInstanceOf(VoiceRecorderL::class)
|
||||
}
|
||||
}
|
||||
|
@ -20,14 +20,17 @@ import android.content.Context
|
||||
import android.media.MediaCodecList
|
||||
import android.media.MediaFormat
|
||||
import android.os.Build
|
||||
import androidx.annotation.ChecksSdkIntAtLeast
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import im.vector.app.features.VectorFeatures
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import org.matrix.android.sdk.api.util.BuildVersionSdkIntProvider
|
||||
import javax.inject.Inject
|
||||
|
||||
class VoiceRecorderProvider @Inject constructor(
|
||||
private val context: Context,
|
||||
private val vectorFeatures: VectorFeatures,
|
||||
private val buildVersionSdkIntProvider: BuildVersionSdkIntProvider,
|
||||
) {
|
||||
fun provideVoiceRecorder(): VoiceRecorder {
|
||||
return if (useFallbackRecorder()) {
|
||||
@ -37,8 +40,11 @@ class VoiceRecorderProvider @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
@ChecksSdkIntAtLeast(api = 29)
|
||||
private fun useFallbackRecorder(): Boolean {
|
||||
return Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || !hasOpusEncoder() || vectorFeatures.forceUsageOfOpusEncoder()
|
||||
return buildVersionSdkIntProvider.get() < Build.VERSION_CODES.Q ||
|
||||
!hasOpusEncoder() ||
|
||||
vectorFeatures.forceUsageOfOpusEncoder()
|
||||
}
|
||||
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||
|
Loading…
x
Reference in New Issue
Block a user