Drop support for Android 5.x

This commit is contained in:
arkon 2021-04-19 15:29:00 -04:00
parent 6aff438a16
commit 89619b7836
15 changed files with 40 additions and 81 deletions

View File

@ -114,10 +114,7 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
latch.countDown()
}
// HTTP error codes are only received since M
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
url == origRequestUrl && !challengeFound
) {
if (url == origRequestUrl && !challengeFound) {
// The first request didn't return the challenge, abort.
latch.countDown()
}

View File

@ -21,11 +21,9 @@ fun Router.popControllerWithTag(tag: String): Boolean {
fun Controller.requestPermissionsSafe(permissions: Array<String>, requestCode: Int) {
val activity = activity ?: return
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
permissions.forEach { permission ->
if (ContextCompat.checkSelfPermission(activity, permission) != PERMISSION_GRANTED) {
requestPermissions(arrayOf(permission), requestCode)
}
permissions.forEach { permission ->
if (ContextCompat.checkSelfPermission(activity, permission) != PERMISSION_GRANTED) {
requestPermissions(arrayOf(permission), requestCode)
}
}
}

View File

@ -298,23 +298,17 @@ class MangaController :
fab.setOnClickListener {
val item = presenter.getNextUnreadChapter()
if (item != null) {
// Create animation listener
val revealAnimationListener: Animator.AnimatorListener = object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
openChapter(item.chapter, true)
}
}
// Get coordinates and start animation
actionFab?.getCoordinates()?.let { coordinates ->
if (!binding.revealView.showRevealEffect(
coordinates.x,
coordinates.y,
revealAnimationListener
)
) {
openChapter(item.chapter)
}
binding.revealView.showRevealEffect(
coordinates.x,
coordinates.y,
object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
openChapter(item.chapter, true)
}
}
)
}
} else {
view?.context?.toast(R.string.no_next_chapter)

View File

@ -304,18 +304,6 @@ class MangaInfoHeaderAdapter(
initialLoad = false
}
}
// backgroundTint attribute doesn't work properly on Android 5
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
listOf(binding.backdropOverlay, binding.mangaInfoToggleMoreScrim)
.forEach {
@Suppress("DEPRECATION")
it.background.setColorFilter(
view.context.getResourceColor(android.R.attr.colorBackground),
PorterDuff.Mode.SRC_ATOP
)
}
}
}
private fun showMangaInfo(visible: Boolean) {

View File

@ -67,27 +67,25 @@ class SettingsAdvancedController : SettingsController() {
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
preference {
key = "pref_disable_battery_optimization"
titleRes = R.string.pref_disable_battery_optimization
summaryRes = R.string.pref_disable_battery_optimization_summary
preference {
key = "pref_disable_battery_optimization"
titleRes = R.string.pref_disable_battery_optimization
summaryRes = R.string.pref_disable_battery_optimization_summary
onClick {
val packageName: String = context.packageName
if (!context.powerManager.isIgnoringBatteryOptimizations(packageName)) {
try {
val intent = Intent().apply {
action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
data = "package:$packageName".toUri()
}
startActivity(intent)
} catch (e: ActivityNotFoundException) {
context.toast(R.string.battery_optimization_setting_activity_not_found)
onClick {
val packageName: String = context.packageName
if (!context.powerManager.isIgnoringBatteryOptimizations(packageName)) {
try {
val intent = Intent().apply {
action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
data = "package:$packageName".toUri()
}
} else {
context.toast(R.string.battery_optimization_disabled)
startActivity(intent)
} catch (e: ActivityNotFoundException) {
context.toast(R.string.battery_optimization_setting_activity_not_found)
}
} else {
context.toast(R.string.battery_optimization_disabled)
}
}
}

View File

@ -33,7 +33,7 @@ object BiometricUtil {
* Returns whether the device is secured with a PIN, pattern or password.
*/
private fun isLegacySecured(context: Context): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
if (context.keyguardManager.isDeviceSecure) {
return true
}

View File

@ -54,7 +54,6 @@ abstract class WebViewClientCompat : WebViewClient() {
return shouldInterceptRequestCompat(view, url)
}
@TargetApi(Build.VERSION_CODES.M)
final override fun onReceivedError(
view: WebView,
request: WebResourceRequest,
@ -78,7 +77,6 @@ abstract class WebViewClientCompat : WebViewClient() {
onReceivedErrorCompat(view, errorCode, description, failingUrl, failingUrl == view.url)
}
@TargetApi(Build.VERSION_CODES.M)
final override fun onReceivedHttpError(
view: WebView,
request: WebResourceRequest,

View File

@ -20,12 +20,7 @@ class ElevationAppBarLayout @JvmOverloads constructor(
}
fun enableElevation(liftOnScroll: Boolean) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
// Delay to avoid crash
post { setElevation(liftOnScroll) }
} else {
setElevation(liftOnScroll)
}
setElevation(liftOnScroll)
}
private fun setElevation(liftOnScroll: Boolean) {

View File

@ -49,10 +49,8 @@ class RevealAnimationView @JvmOverloads constructor(context: Context, attrs: Att
* @param centerX x starting point
* @param centerY y starting point
* @param listener animation listener
*
* @return sdk version lower then 21
*/
fun showRevealEffect(centerX: Int, centerY: Int, listener: Animator.AnimatorListener): Boolean {
fun showRevealEffect(centerX: Int, centerY: Int, listener: Animator.AnimatorListener) {
this.isVisible = true
val height = this.height
@ -71,6 +69,5 @@ class RevealAnimationView @JvmOverloads constructor(context: Context, attrs: Att
anim.addListener(listener)
anim.start()
return true
}
}

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Base.V23.Theme.Tachiyomi.Light" parent="Base.Theme.Tachiyomi.Light">
<item name="android:statusBarColor">?attr/colorPrimary</item>
<item name="android:windowLightStatusBar">true</item>
</style>
<style name="Theme.Tachiyomi.Light" parent="Base.V23.Theme.Tachiyomi.Light" />
</resources>

View File

@ -91,7 +91,10 @@
<!--===========-->
<!-- Main Theme-->
<!--===========-->
<style name="Base.Theme.Tachiyomi.Light" parent="Theme.Base" />
<style name="Base.Theme.Tachiyomi.Light" parent="Theme.Base">
<item name="android:statusBarColor">?attr/colorPrimary</item>
<item name="android:windowLightStatusBar">true</item>
</style>
<style name="Theme.Tachiyomi.Light" parent="Base.Theme.Tachiyomi.Light" />
<style name="Theme.Tachiyomi.Light.Blue">

View File

@ -41,7 +41,7 @@ import uy.kohesive.injekt.api.addSingleton
* Test class for the [LegacyBackupManager].
* Note that this does not include the backup create/restore services.
*/
@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.LOLLIPOP])
@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.M])
@RunWith(CustomRobolectricGradleTestRunner::class)
class BackupTest {
// Create root object

View File

@ -13,7 +13,7 @@ import org.junit.runner.RunWith
import org.robolectric.RuntimeEnvironment
import org.robolectric.annotation.Config
@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.LOLLIPOP])
@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.M])
@RunWith(CustomRobolectricGradleTestRunner::class)
class CategoryTest {

View File

@ -28,7 +28,7 @@ import uy.kohesive.injekt.api.InjektModule
import uy.kohesive.injekt.api.InjektRegistrar
import uy.kohesive.injekt.api.addSingleton
@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.LOLLIPOP])
@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.M])
@RunWith(CustomRobolectricGradleTestRunner::class)
class LibraryUpdateServiceTest {

View File

@ -1,6 +1,6 @@
object AndroidConfig {
const val compileSdk = 29
const val minSdk = 21
const val minSdk = 23
const val targetSdk = 29
const val buildTools = "30.0.3"
const val ndk = "22.1.7171670"