Skip to content

Commit

Permalink
[optimize|fix] Optimize code; fix addInsets issue
Browse files Browse the repository at this point in the history
  • Loading branch information
SkyD666 committed Feb 22, 2024
1 parent 0dfe756 commit d49ac67
Show file tree
Hide file tree
Showing 14 changed files with 86 additions and 116 deletions.
28 changes: 16 additions & 12 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ android {
minSdk = 24
targetSdk = 34
versionCode = 4
versionName = "1.0-beta06"
versionName = "1.0-beta07"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

Expand Down Expand Up @@ -100,6 +100,7 @@ android {
"DebugProbesKt.bin",
"META-INF/CHANGES",
"META-INF/README.md",
"META-INF/jdom-info.xml",
"kotlin-tooling-metadata.json",
"okhttp3/internal/publicsuffix/NOTICE",
)
Expand All @@ -121,32 +122,35 @@ dependencies {

implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.navigation:navigation-fragment-ktx:2.7.7")
implementation("androidx.navigation:navigation-ui-ktx:2.7.7")
implementation("androidx.room:room-runtime:2.6.1")
implementation("androidx.room:room-ktx:2.6.1")
ksp("androidx.room:room-compiler:2.6.1")
implementation("androidx.work:work-runtime-ktx:2.9.0")
implementation("androidx.datastore:datastore-preferences:1.0.0")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
implementation("androidx.core:core-splashscreen:1.0.1")
implementation("androidx.media3:media3-exoplayer:1.2.1")
implementation("androidx.media3:media3-exoplayer-dash:1.2.1")
implementation("androidx.media3:media3-ui:1.2.1")

implementation("com.google.android.material:material:1.11.0")

implementation("com.google.dagger:hilt-android:2.50")
implementation("androidx.work:work-runtime-ktx:2.9.0")
ksp("com.google.dagger:hilt-android-compiler:2.50")

implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("com.squareup.okhttp3:okhttp-coroutines-jvm:5.0.0-alpha.12")
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")

implementation("io.coil-kt:coil:2.5.0")
implementation("androidx.room:room-runtime:2.6.1")
implementation("androidx.room:room-ktx:2.6.1")
ksp("androidx.room:room-compiler:2.6.1")
implementation("com.rometools:rome:2.1.0")
implementation("net.dankito.readability4j:readability4j:1.0.8")
implementation("androidx.datastore:datastore-preferences:1.0.0")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
implementation("androidx.core:core-splashscreen:1.0.1")
implementation("androidx.media3:media3-exoplayer:1.2.1")
implementation("androidx.media3:media3-exoplayer-dash:1.2.1")
implementation("androidx.media3:media3-ui:1.2.1")
implementation("org.libtorrent4j:libtorrent4j-android-arm64:2.1.0-31")

testImplementation("junit:junit:4.13.2")
Expand Down
63 changes: 8 additions & 55 deletions app/src/main/java/com/skyd/anivu/base/BaseFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import androidx.navigation.fragment.findNavController
import androidx.viewbinding.ViewBinding
import com.google.android.material.color.MaterialColors
Expand All @@ -19,8 +18,7 @@ abstract class BaseFragment<T : ViewBinding> : Fragment() {

private var _binding: T? = null

// This property is only valid between onCreateView and
// onDestroyView.
// This property is only valid between onCreateView and onDestroyView.
protected val binding get() = _binding!!

protected abstract fun getViewBinding(inflater: LayoutInflater, container: ViewGroup?): T
Expand All @@ -35,49 +33,6 @@ abstract class BaseFragment<T : ViewBinding> : Fragment() {

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
/*returnTransition = AutoTransition()
reenterTransition = AutoTransition()
enterTransition = AutoTransition()
sharedElementEnterTransition = AutoTransition()
val windowWidth = requireContext().screenWidth(includeVirtualKey = true)
val maxXShift = windowWidth / 20
val predictiveBackCallback = object : OnBackPressedCallback(
enabled = enabledOnBackPressedCallback()
) {
override fun handleOnBackProgressed(backEvent: BackEventCompat) {
binding.root.apply {
when (backEvent.swipeEdge) {
BackEventCompat.EDGE_LEFT -> {
translationX = backEvent.progress * maxXShift
}
BackEventCompat.EDGE_RIGHT -> {
translationX = -(backEvent.progress * maxXShift)
}
}
scaleX = 1F - (0.1F * backEvent.progress)
scaleY = 1F - (0.1F * backEvent.progress)
}
}
override fun handleOnBackPressed() {
findMainNavController().popBackStackWithLifecycle()
}
override fun handleOnBackCancelled() {
binding.root.apply {
scaleX = 1F
scaleY = 1F
translationX = 0F
}
}
}
requireActivity().onBackPressedDispatcher.addCallback(
this.viewLifecycleOwner,
predictiveBackCallback
)*/

binding.initView()
binding.setWindowInsets()
// Fix https://github.com/material-components/material-components-android/issues/1984#issuecomment-1089710991
Expand All @@ -93,25 +48,23 @@ abstract class BaseFragment<T : ViewBinding> : Fragment() {
_binding = null
}

protected open fun enabledOnBackPressedCallback(): Boolean = true

protected fun findMainNavController() =
Navigation.findNavController(requireActivity(), R.id.nav_host_fragment_main)

protected fun showSnackbar(
// https://github.com/material-components/material-components-android/issues/3446
protected open fun showSnackbar(
text: CharSequence,
@BaseTransientBottomBar.Duration duration: Int = Snackbar.LENGTH_LONG,
actionText: String? = resources.getString(R.string.close),
onActionClick: (View) -> Unit? = {},
) {
Snackbar.make(
): Snackbar {
val snackbar = Snackbar.make(
binding.root,
text,
duration
).run {
if (actionText == null) this
else setAction(actionText) { onActionClick(it) }
}.show()
}
snackbar.show()
return snackbar
}

protected fun checkArgument(
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/java/com/skyd/anivu/ext/ActivityExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ package com.skyd.anivu.ext

import android.app.Activity
import android.provider.Settings
import androidx.navigation.NavController
import androidx.navigation.Navigation
import com.skyd.anivu.R
import com.skyd.anivu.ui.activity.MainActivity

/**
* 获取系统屏幕亮度
Expand All @@ -11,4 +15,8 @@ fun Activity.getScreenBrightness(): Int? = try {
} catch (e: Settings.SettingNotFoundException) {
e.printStackTrace()
null
}

fun Activity.findMainNavController(): NavController {
return Navigation.findNavController(this, R.id.nav_host_fragment_main)
}
11 changes: 11 additions & 0 deletions app/src/main/java/com/skyd/anivu/ext/FragmentExt.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.skyd.anivu.ext

import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import androidx.navigation.Navigation
import com.skyd.anivu.R


fun Fragment.findMainNavController(): NavController {
return Navigation.findNavController(requireActivity(), R.id.nav_host_fragment_main)
}
31 changes: 19 additions & 12 deletions app/src/main/java/com/skyd/anivu/ext/ViewExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,14 @@ import androidx.core.view.marginLeft
import androidx.core.view.marginRight
import androidx.core.view.marginTop
import androidx.core.view.updatePadding
import androidx.navigation.NavController
import androidx.navigation.Navigation
import com.google.android.material.badge.BadgeDrawable
import com.google.android.material.badge.BadgeUtils
import com.google.android.material.badge.ExperimentalBadgeUtils
import com.skyd.anivu.R
import com.skyd.anivu.appContext
import kotlin.math.max


fun View.enable() {
Expand Down Expand Up @@ -122,29 +125,29 @@ fun View.addInsetsByPadding(
hook: (View, WindowInsetsCompat) -> WindowInsetsCompat = { _, ins -> ins },
) {
ViewCompat.setOnApplyWindowInsetsListener(this) { v, ins ->
val systemBarsInsets = ins.getInsets(WindowInsetsCompat.Type.systemBars())
val displayCutoutInsets = ins.getInsets(WindowInsetsCompat.Type.displayCutout())
if (top) {
val lastTopPadding = v.getTag(R.id.view_add_insets_padding_top_tag) as? Int ?: 0
val newTopPadding = ins.getInsets(WindowInsetsCompat.Type.statusBars()).top +
ins.getInsets(WindowInsetsCompat.Type.captionBar()).top
val newTopPadding = max(systemBarsInsets.top, displayCutoutInsets.top)
v.setTag(R.id.view_add_insets_padding_top_tag, newTopPadding)
v.updatePadding(top = v.paddingTop - lastTopPadding + newTopPadding)
}
if (bottom) {
val lastBottomPadding = v.getTag(R.id.view_add_insets_padding_bottom_tag) as? Int ?: 0
val newBottomPadding = ins.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom +
ins.getInsets(WindowInsetsCompat.Type.captionBar()).bottom
val newBottomPadding = max(systemBarsInsets.bottom, displayCutoutInsets.bottom)
v.setTag(R.id.view_add_insets_padding_bottom_tag, newBottomPadding)
v.updatePadding(bottom = v.paddingBottom - lastBottomPadding + newBottomPadding)
}
if (left) {
val lastLeftPadding = v.getTag(R.id.view_add_insets_padding_left_tag) as? Int ?: 0
val newLeftPadding = ins.getInsets(WindowInsetsCompat.Type.displayCutout()).left
val newLeftPadding = max(systemBarsInsets.left, displayCutoutInsets.left)
v.setTag(R.id.view_add_insets_padding_left_tag, newLeftPadding)
v.updatePadding(left = v.paddingLeft - lastLeftPadding + newLeftPadding)
}
if (right) {
val lastRightPadding = v.getTag(R.id.view_add_insets_padding_right_tag) as? Int ?: 0
val newRightPadding = ins.getInsets(WindowInsetsCompat.Type.navigationBars()).right
val newRightPadding = max(systemBarsInsets.right, displayCutoutInsets.right)
v.setTag(R.id.view_add_insets_padding_right_tag, newRightPadding)
v.updatePadding(right = v.paddingRight - lastRightPadding + newRightPadding)
}
Expand All @@ -161,10 +164,11 @@ fun View.addInsetsByMargin(
hook: (View, WindowInsetsCompat) -> WindowInsetsCompat = { _, ins -> ins },
) {
ViewCompat.setOnApplyWindowInsetsListener(this) { v, ins ->
val systemBarsInsets = ins.getInsets(WindowInsetsCompat.Type.systemBars())
val displayCutoutInsets = ins.getInsets(WindowInsetsCompat.Type.displayCutout())
if (top) {
val lastTopMargin = v.getTag(R.id.view_add_insets_margin_top_tag) as? Int ?: 0
val newTopMargin = ins.getInsets(WindowInsetsCompat.Type.statusBars()).top +
ins.getInsets(WindowInsetsCompat.Type.captionBar()).top
val newTopMargin = max(systemBarsInsets.top, displayCutoutInsets.top)
v.setTag(R.id.view_add_insets_margin_top_tag, newTopMargin)
(v.layoutParams as? ViewGroup.MarginLayoutParams)?.let { layoutParams ->
layoutParams.topMargin = layoutParams.topMargin - lastTopMargin + newTopMargin
Expand All @@ -173,8 +177,7 @@ fun View.addInsetsByMargin(
}
if (bottom) {
val lastBottomMargin = v.getTag(R.id.view_add_insets_margin_bottom_tag) as? Int ?: 0
val newBottomMargin = ins.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom +
ins.getInsets(WindowInsetsCompat.Type.captionBar()).bottom
val newBottomMargin = max(systemBarsInsets.bottom, displayCutoutInsets.bottom)
v.setTag(R.id.view_add_insets_margin_bottom_tag, newBottomMargin)
(v.layoutParams as? ViewGroup.MarginLayoutParams)?.let { layoutParams ->
layoutParams.bottomMargin =
Expand All @@ -184,7 +187,7 @@ fun View.addInsetsByMargin(
}
if (left) {
val lastLeftMargin = v.getTag(R.id.view_add_insets_margin_left_tag) as? Int ?: 0
val newLeftMargin = ins.getInsets(WindowInsetsCompat.Type.displayCutout()).left
val newLeftMargin = max(systemBarsInsets.left, displayCutoutInsets.left)
v.setTag(R.id.view_add_insets_margin_left_tag, newLeftMargin)
(v.layoutParams as? ViewGroup.MarginLayoutParams)?.let { layoutParams ->
layoutParams.leftMargin = layoutParams.leftMargin - lastLeftMargin + newLeftMargin
Expand All @@ -193,7 +196,7 @@ fun View.addInsetsByMargin(
}
if (right) {
val lastRightMargin = v.getTag(R.id.view_add_insets_margin_right_tag) as? Int ?: 0
val newRightMargin = ins.getInsets(WindowInsetsCompat.Type.navigationBars()).right
val newRightMargin = max(systemBarsInsets.right, displayCutoutInsets.right)
v.setTag(R.id.view_add_insets_margin_right_tag, newRightMargin)
(v.layoutParams as? ViewGroup.MarginLayoutParams)?.let { layoutParams ->
layoutParams.rightMargin =
Expand Down Expand Up @@ -310,4 +313,8 @@ fun View.addBadge(init: BadgeDrawable.() -> Unit) {
viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
}

fun View.findMainNavController(): NavController {
return Navigation.findNavController(activity, R.id.nav_host_fragment_main)
}
4 changes: 2 additions & 2 deletions app/src/main/java/com/skyd/anivu/ui/activity/PlayActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ class PlayActivity : BaseActivity<ActivityPlayBinding>() {
override fun onDestroy() {
super.onDestroy()

binding.playerView.player?.stop()
binding.playerView.player?.release()
player.stop()
player.release()
}

override fun onResume() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@ package com.skyd.anivu.ui.adapter.variety.proxy
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.navigation.Navigation
import com.skyd.anivu.R
import com.skyd.anivu.databinding.ItemArticle1Binding
import com.skyd.anivu.ext.activity
import com.skyd.anivu.ext.findMainNavController
import com.skyd.anivu.ext.gone
import com.skyd.anivu.ext.readable
import com.skyd.anivu.ext.toDateTimeString
Expand All @@ -30,7 +29,6 @@ class Article1Proxy : VarietyAdapter.Proxy<ArticleBean, ItemArticle1Binding, Art
index: Int,
action: ((Any?) -> Unit)?
) {
val activity = holder.itemView.activity
holder.binding.apply {
tvArticle1Title.text = data.title?.toHtml()
data.description?.readable().let { description ->
Expand Down Expand Up @@ -68,8 +66,7 @@ class Article1Proxy : VarietyAdapter.Proxy<ArticleBean, ItemArticle1Binding, Art
val bundle = Bundle().apply {
putString(ReadFragment.ARTICLE_ID_KEY, data.articleId)
}
Navigation.findNavController(activity, R.id.nav_host_fragment_main)
.navigate(R.id.action_to_read_fragment, bundle)
it.findMainNavController().navigate(R.id.action_to_read_fragment, bundle)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ import android.view.MenuItem
import android.view.ViewGroup
import androidx.appcompat.widget.PopupMenu
import androidx.core.view.updatePadding
import androidx.navigation.Navigation.findNavController
import com.skyd.anivu.R
import com.skyd.anivu.databinding.ItemFeed1Binding
import com.skyd.anivu.ext.activity
import com.skyd.anivu.ext.dp
import com.skyd.anivu.ext.findMainNavController
import com.skyd.anivu.ext.gone
import com.skyd.anivu.ext.readable
import com.skyd.anivu.ext.toHtml
Expand All @@ -38,7 +37,6 @@ class Feed1Proxy(
index: Int,
action: ((Any?) -> Unit)?
) {
val activity = holder.itemView.activity
holder.binding.apply {
tvFeed1Title.text = data.title?.toHtml()
tvFeed1Desc.text = data.description?.readable()
Expand Down Expand Up @@ -81,8 +79,7 @@ class Feed1Proxy(
val bundle = Bundle().apply {
putString(ArticleFragment.FEED_URL_KEY, data.url)
}
findNavController(activity, R.id.nav_host_fragment_main)
.navigate(R.id.action_to_article_fragment, bundle)
it.findMainNavController().navigate(R.id.action_to_article_fragment, bundle)
}
}
}
2 changes: 0 additions & 2 deletions app/src/main/java/com/skyd/anivu/ui/fragment/MainFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainFragment : BaseFragment<FragmentMainBinding>() {
override fun enabledOnBackPressedCallback() = false

override fun getViewBinding(inflater: LayoutInflater, container: ViewGroup?) =
FragmentMainBinding.inflate(inflater, container, false)

Expand Down
Loading

0 comments on commit d49ac67

Please sign in to comment.