mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Drop support for Android 5.x
It's 5-6 years old, and only accounts for 2% of users in the Firebase analytics.
This commit is contained in:
		| @@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.network | ||||
|  | ||||
| import android.annotation.SuppressLint | ||||
| import android.content.Context | ||||
| import android.os.Build | ||||
| import android.os.Handler | ||||
| import android.os.Looper | ||||
| import android.webkit.WebSettings | ||||
| @@ -114,10 +113,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() | ||||
|                     } | ||||
|   | ||||
| @@ -32,10 +32,6 @@ abstract class BaseThemedActivity : AppCompatActivity() { | ||||
|                         R.style.Theme_Tachiyomi_Light_Api27 | ||||
|                     } | ||||
|                     // Light status bar + fallback gray navigation bar | ||||
|                     Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> { | ||||
|                         R.style.Theme_Tachiyomi_Light_Api23 | ||||
|                     } | ||||
|                     // Fallback gray status + navigation bar | ||||
|                     else -> { | ||||
|                         R.style.Theme_Tachiyomi_Light | ||||
|                     } | ||||
|   | ||||
| @@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.ui.base.controller | ||||
|  | ||||
| import android.content.Intent | ||||
| import android.content.pm.PackageManager.PERMISSION_GRANTED | ||||
| import android.os.Build | ||||
| import androidx.core.content.ContextCompat | ||||
| import androidx.core.net.toUri | ||||
| import com.bluelinelabs.conductor.Controller | ||||
| @@ -21,11 +20,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) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -290,23 +290,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) | ||||
|   | ||||
| @@ -1,7 +1,5 @@ | ||||
| package eu.kanade.tachiyomi.ui.manga.info | ||||
|  | ||||
| import android.graphics.PorterDuff | ||||
| import android.os.Build | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| @@ -21,7 +19,6 @@ import eu.kanade.tachiyomi.source.model.SManga | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.ui.manga.MangaController | ||||
| import eu.kanade.tachiyomi.util.system.copyToClipboard | ||||
| import eu.kanade.tachiyomi.util.system.getResourceColor | ||||
| import eu.kanade.tachiyomi.util.view.setChips | ||||
| import kotlinx.coroutines.flow.launchIn | ||||
| import kotlinx.coroutines.flow.merge | ||||
| @@ -304,18 +301,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) { | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import android.annotation.SuppressLint | ||||
| import android.app.Dialog | ||||
| import android.content.ActivityNotFoundException | ||||
| import android.content.Intent | ||||
| import android.os.Build | ||||
| import android.os.Bundle | ||||
| import android.provider.Settings | ||||
| import androidx.core.net.toUri | ||||
| @@ -64,27 +63,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) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.widget | ||||
| import android.animation.ObjectAnimator | ||||
| import android.animation.StateListAnimator | ||||
| import android.content.Context | ||||
| import android.os.Build | ||||
| import android.util.AttributeSet | ||||
| import com.google.android.material.R | ||||
| import com.google.android.material.appbar.AppBarLayout | ||||
| @@ -20,12 +19,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) { | ||||
|   | ||||
| @@ -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 | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,9 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <resources> | ||||
|  | ||||
|     <style name="Theme.Tachiyomi.Light.Api23"> | ||||
|         <item name="android:statusBarColor">@android:color/transparent</item> | ||||
|         <item name="android:windowLightStatusBar">true</item> | ||||
|     </style> | ||||
|  | ||||
| </resources> | ||||
| @@ -88,7 +88,8 @@ | ||||
|     <!-- Main Theme--> | ||||
|     <!--===========--> | ||||
|     <style name="Theme.Tachiyomi.Light" parent="Theme.Base"> | ||||
|         <item name="android:statusBarColor">@color/md_black_1000_54</item> | ||||
|         <item name="android:statusBarColor">@android:color/transparent</item> | ||||
|         <item name="android:windowLightStatusBar">true</item> | ||||
|         <item name="android:navigationBarColor">@color/md_black_1000_54</item> | ||||
|  | ||||
|         <item name="colorFilterActive">@color/filterColorLight</item> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user