Skip to content

Commit d49ac67

Browse files
committed
[optimize|fix] Optimize code; fix addInsets issue
1 parent 0dfe756 commit d49ac67

File tree

14 files changed

+86
-116
lines changed

14 files changed

+86
-116
lines changed

app/build.gradle.kts

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ android {
2020
minSdk = 24
2121
targetSdk = 34
2222
versionCode = 4
23-
versionName = "1.0-beta06"
23+
versionName = "1.0-beta07"
2424

2525
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2626

@@ -100,6 +100,7 @@ android {
100100
"DebugProbesKt.bin",
101101
"META-INF/CHANGES",
102102
"META-INF/README.md",
103+
"META-INF/jdom-info.xml",
103104
"kotlin-tooling-metadata.json",
104105
"okhttp3/internal/publicsuffix/NOTICE",
105106
)
@@ -121,32 +122,35 @@ dependencies {
121122

122123
implementation("androidx.core:core-ktx:1.12.0")
123124
implementation("androidx.appcompat:appcompat:1.6.1")
124-
implementation("com.google.android.material:material:1.11.0")
125125
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
126126
implementation("androidx.navigation:navigation-fragment-ktx:2.7.7")
127127
implementation("androidx.navigation:navigation-ui-ktx:2.7.7")
128+
implementation("androidx.room:room-runtime:2.6.1")
129+
implementation("androidx.room:room-ktx:2.6.1")
130+
ksp("androidx.room:room-compiler:2.6.1")
131+
implementation("androidx.work:work-runtime-ktx:2.9.0")
132+
implementation("androidx.datastore:datastore-preferences:1.0.0")
133+
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
134+
implementation("androidx.core:core-splashscreen:1.0.1")
135+
implementation("androidx.media3:media3-exoplayer:1.2.1")
136+
implementation("androidx.media3:media3-exoplayer-dash:1.2.1")
137+
implementation("androidx.media3:media3-ui:1.2.1")
138+
128139
implementation("com.google.android.material:material:1.11.0")
140+
129141
implementation("com.google.dagger:hilt-android:2.50")
130-
implementation("androidx.work:work-runtime-ktx:2.9.0")
131142
ksp("com.google.dagger:hilt-android-compiler:2.50")
143+
132144
implementation("com.squareup.okhttp3:okhttp:4.12.0")
133145
implementation("com.squareup.okhttp3:okhttp-coroutines-jvm:5.0.0-alpha.12")
134146
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
135147
implementation("com.squareup.retrofit2:retrofit:2.9.0")
136148
implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0")
137149
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
150+
138151
implementation("io.coil-kt:coil:2.5.0")
139-
implementation("androidx.room:room-runtime:2.6.1")
140-
implementation("androidx.room:room-ktx:2.6.1")
141-
ksp("androidx.room:room-compiler:2.6.1")
142152
implementation("com.rometools:rome:2.1.0")
143153
implementation("net.dankito.readability4j:readability4j:1.0.8")
144-
implementation("androidx.datastore:datastore-preferences:1.0.0")
145-
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
146-
implementation("androidx.core:core-splashscreen:1.0.1")
147-
implementation("androidx.media3:media3-exoplayer:1.2.1")
148-
implementation("androidx.media3:media3-exoplayer-dash:1.2.1")
149-
implementation("androidx.media3:media3-ui:1.2.1")
150154
implementation("org.libtorrent4j:libtorrent4j-android-arm64:2.1.0-31")
151155

152156
testImplementation("junit:junit:4.13.2")

app/src/main/java/com/skyd/anivu/base/BaseFragment.kt

Lines changed: 8 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
77
import androidx.fragment.app.Fragment
8-
import androidx.navigation.Navigation
98
import androidx.navigation.fragment.findNavController
109
import androidx.viewbinding.ViewBinding
1110
import com.google.android.material.color.MaterialColors
@@ -19,8 +18,7 @@ abstract class BaseFragment<T : ViewBinding> : Fragment() {
1918

2019
private var _binding: T? = null
2120

22-
// This property is only valid between onCreateView and
23-
// onDestroyView.
21+
// This property is only valid between onCreateView and onDestroyView.
2422
protected val binding get() = _binding!!
2523

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

3634
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
3735
super.onViewCreated(view, savedInstanceState)
38-
/*returnTransition = AutoTransition()
39-
reenterTransition = AutoTransition()
40-
enterTransition = AutoTransition()
41-
sharedElementEnterTransition = AutoTransition()
42-
val windowWidth = requireContext().screenWidth(includeVirtualKey = true)
43-
val maxXShift = windowWidth / 20
44-
val predictiveBackCallback = object : OnBackPressedCallback(
45-
enabled = enabledOnBackPressedCallback()
46-
) {
47-
override fun handleOnBackProgressed(backEvent: BackEventCompat) {
48-
binding.root.apply {
49-
when (backEvent.swipeEdge) {
50-
BackEventCompat.EDGE_LEFT -> {
51-
translationX = backEvent.progress * maxXShift
52-
}
53-
54-
BackEventCompat.EDGE_RIGHT -> {
55-
translationX = -(backEvent.progress * maxXShift)
56-
}
57-
}
58-
scaleX = 1F - (0.1F * backEvent.progress)
59-
scaleY = 1F - (0.1F * backEvent.progress)
60-
}
61-
}
62-
63-
override fun handleOnBackPressed() {
64-
findMainNavController().popBackStackWithLifecycle()
65-
}
66-
67-
override fun handleOnBackCancelled() {
68-
binding.root.apply {
69-
scaleX = 1F
70-
scaleY = 1F
71-
translationX = 0F
72-
}
73-
}
74-
}
75-
76-
requireActivity().onBackPressedDispatcher.addCallback(
77-
this.viewLifecycleOwner,
78-
predictiveBackCallback
79-
)*/
80-
8136
binding.initView()
8237
binding.setWindowInsets()
8338
// Fix https://github.com/material-components/material-components-android/issues/1984#issuecomment-1089710991
@@ -93,25 +48,23 @@ abstract class BaseFragment<T : ViewBinding> : Fragment() {
9348
_binding = null
9449
}
9550

96-
protected open fun enabledOnBackPressedCallback(): Boolean = true
97-
98-
protected fun findMainNavController() =
99-
Navigation.findNavController(requireActivity(), R.id.nav_host_fragment_main)
100-
101-
protected fun showSnackbar(
51+
// https://github.com/material-components/material-components-android/issues/3446
52+
protected open fun showSnackbar(
10253
text: CharSequence,
10354
@BaseTransientBottomBar.Duration duration: Int = Snackbar.LENGTH_LONG,
10455
actionText: String? = resources.getString(R.string.close),
10556
onActionClick: (View) -> Unit? = {},
106-
) {
107-
Snackbar.make(
57+
): Snackbar {
58+
val snackbar = Snackbar.make(
10859
binding.root,
10960
text,
11061
duration
11162
).run {
11263
if (actionText == null) this
11364
else setAction(actionText) { onActionClick(it) }
114-
}.show()
65+
}
66+
snackbar.show()
67+
return snackbar
11568
}
11669

11770
protected fun checkArgument(

app/src/main/java/com/skyd/anivu/ext/ActivityExt.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ package com.skyd.anivu.ext
22

33
import android.app.Activity
44
import android.provider.Settings
5+
import androidx.navigation.NavController
6+
import androidx.navigation.Navigation
7+
import com.skyd.anivu.R
8+
import com.skyd.anivu.ui.activity.MainActivity
59

610
/**
711
* 获取系统屏幕亮度
@@ -11,4 +15,8 @@ fun Activity.getScreenBrightness(): Int? = try {
1115
} catch (e: Settings.SettingNotFoundException) {
1216
e.printStackTrace()
1317
null
18+
}
19+
20+
fun Activity.findMainNavController(): NavController {
21+
return Navigation.findNavController(this, R.id.nav_host_fragment_main)
1422
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.skyd.anivu.ext
2+
3+
import androidx.fragment.app.Fragment
4+
import androidx.navigation.NavController
5+
import androidx.navigation.Navigation
6+
import com.skyd.anivu.R
7+
8+
9+
fun Fragment.findMainNavController(): NavController {
10+
return Navigation.findNavController(requireActivity(), R.id.nav_host_fragment_main)
11+
}

app/src/main/java/com/skyd/anivu/ext/ViewExt.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ import androidx.core.view.marginLeft
2323
import androidx.core.view.marginRight
2424
import androidx.core.view.marginTop
2525
import androidx.core.view.updatePadding
26+
import androidx.navigation.NavController
27+
import androidx.navigation.Navigation
2628
import com.google.android.material.badge.BadgeDrawable
2729
import com.google.android.material.badge.BadgeUtils
2830
import com.google.android.material.badge.ExperimentalBadgeUtils
2931
import com.skyd.anivu.R
3032
import com.skyd.anivu.appContext
33+
import kotlin.math.max
3134

3235

3336
fun View.enable() {
@@ -122,29 +125,29 @@ fun View.addInsetsByPadding(
122125
hook: (View, WindowInsetsCompat) -> WindowInsetsCompat = { _, ins -> ins },
123126
) {
124127
ViewCompat.setOnApplyWindowInsetsListener(this) { v, ins ->
128+
val systemBarsInsets = ins.getInsets(WindowInsetsCompat.Type.systemBars())
129+
val displayCutoutInsets = ins.getInsets(WindowInsetsCompat.Type.displayCutout())
125130
if (top) {
126131
val lastTopPadding = v.getTag(R.id.view_add_insets_padding_top_tag) as? Int ?: 0
127-
val newTopPadding = ins.getInsets(WindowInsetsCompat.Type.statusBars()).top +
128-
ins.getInsets(WindowInsetsCompat.Type.captionBar()).top
132+
val newTopPadding = max(systemBarsInsets.top, displayCutoutInsets.top)
129133
v.setTag(R.id.view_add_insets_padding_top_tag, newTopPadding)
130134
v.updatePadding(top = v.paddingTop - lastTopPadding + newTopPadding)
131135
}
132136
if (bottom) {
133137
val lastBottomPadding = v.getTag(R.id.view_add_insets_padding_bottom_tag) as? Int ?: 0
134-
val newBottomPadding = ins.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom +
135-
ins.getInsets(WindowInsetsCompat.Type.captionBar()).bottom
138+
val newBottomPadding = max(systemBarsInsets.bottom, displayCutoutInsets.bottom)
136139
v.setTag(R.id.view_add_insets_padding_bottom_tag, newBottomPadding)
137140
v.updatePadding(bottom = v.paddingBottom - lastBottomPadding + newBottomPadding)
138141
}
139142
if (left) {
140143
val lastLeftPadding = v.getTag(R.id.view_add_insets_padding_left_tag) as? Int ?: 0
141-
val newLeftPadding = ins.getInsets(WindowInsetsCompat.Type.displayCutout()).left
144+
val newLeftPadding = max(systemBarsInsets.left, displayCutoutInsets.left)
142145
v.setTag(R.id.view_add_insets_padding_left_tag, newLeftPadding)
143146
v.updatePadding(left = v.paddingLeft - lastLeftPadding + newLeftPadding)
144147
}
145148
if (right) {
146149
val lastRightPadding = v.getTag(R.id.view_add_insets_padding_right_tag) as? Int ?: 0
147-
val newRightPadding = ins.getInsets(WindowInsetsCompat.Type.navigationBars()).right
150+
val newRightPadding = max(systemBarsInsets.right, displayCutoutInsets.right)
148151
v.setTag(R.id.view_add_insets_padding_right_tag, newRightPadding)
149152
v.updatePadding(right = v.paddingRight - lastRightPadding + newRightPadding)
150153
}
@@ -161,10 +164,11 @@ fun View.addInsetsByMargin(
161164
hook: (View, WindowInsetsCompat) -> WindowInsetsCompat = { _, ins -> ins },
162165
) {
163166
ViewCompat.setOnApplyWindowInsetsListener(this) { v, ins ->
167+
val systemBarsInsets = ins.getInsets(WindowInsetsCompat.Type.systemBars())
168+
val displayCutoutInsets = ins.getInsets(WindowInsetsCompat.Type.displayCutout())
164169
if (top) {
165170
val lastTopMargin = v.getTag(R.id.view_add_insets_margin_top_tag) as? Int ?: 0
166-
val newTopMargin = ins.getInsets(WindowInsetsCompat.Type.statusBars()).top +
167-
ins.getInsets(WindowInsetsCompat.Type.captionBar()).top
171+
val newTopMargin = max(systemBarsInsets.top, displayCutoutInsets.top)
168172
v.setTag(R.id.view_add_insets_margin_top_tag, newTopMargin)
169173
(v.layoutParams as? ViewGroup.MarginLayoutParams)?.let { layoutParams ->
170174
layoutParams.topMargin = layoutParams.topMargin - lastTopMargin + newTopMargin
@@ -173,8 +177,7 @@ fun View.addInsetsByMargin(
173177
}
174178
if (bottom) {
175179
val lastBottomMargin = v.getTag(R.id.view_add_insets_margin_bottom_tag) as? Int ?: 0
176-
val newBottomMargin = ins.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom +
177-
ins.getInsets(WindowInsetsCompat.Type.captionBar()).bottom
180+
val newBottomMargin = max(systemBarsInsets.bottom, displayCutoutInsets.bottom)
178181
v.setTag(R.id.view_add_insets_margin_bottom_tag, newBottomMargin)
179182
(v.layoutParams as? ViewGroup.MarginLayoutParams)?.let { layoutParams ->
180183
layoutParams.bottomMargin =
@@ -184,7 +187,7 @@ fun View.addInsetsByMargin(
184187
}
185188
if (left) {
186189
val lastLeftMargin = v.getTag(R.id.view_add_insets_margin_left_tag) as? Int ?: 0
187-
val newLeftMargin = ins.getInsets(WindowInsetsCompat.Type.displayCutout()).left
190+
val newLeftMargin = max(systemBarsInsets.left, displayCutoutInsets.left)
188191
v.setTag(R.id.view_add_insets_margin_left_tag, newLeftMargin)
189192
(v.layoutParams as? ViewGroup.MarginLayoutParams)?.let { layoutParams ->
190193
layoutParams.leftMargin = layoutParams.leftMargin - lastLeftMargin + newLeftMargin
@@ -193,7 +196,7 @@ fun View.addInsetsByMargin(
193196
}
194197
if (right) {
195198
val lastRightMargin = v.getTag(R.id.view_add_insets_margin_right_tag) as? Int ?: 0
196-
val newRightMargin = ins.getInsets(WindowInsetsCompat.Type.navigationBars()).right
199+
val newRightMargin = max(systemBarsInsets.right, displayCutoutInsets.right)
197200
v.setTag(R.id.view_add_insets_margin_right_tag, newRightMargin)
198201
(v.layoutParams as? ViewGroup.MarginLayoutParams)?.let { layoutParams ->
199202
layoutParams.rightMargin =
@@ -310,4 +313,8 @@ fun View.addBadge(init: BadgeDrawable.() -> Unit) {
310313
viewTreeObserver.removeOnGlobalLayoutListener(this)
311314
}
312315
})
316+
}
317+
318+
fun View.findMainNavController(): NavController {
319+
return Navigation.findNavController(activity, R.id.nav_host_fragment_main)
313320
}

app/src/main/java/com/skyd/anivu/ui/activity/PlayActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ class PlayActivity : BaseActivity<ActivityPlayBinding>() {
8383
override fun onDestroy() {
8484
super.onDestroy()
8585

86-
binding.playerView.player?.stop()
87-
binding.playerView.player?.release()
86+
player.stop()
87+
player.release()
8888
}
8989

9090
override fun onResume() {

app/src/main/java/com/skyd/anivu/ui/adapter/variety/proxy/Article1Proxy.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ package com.skyd.anivu.ui.adapter.variety.proxy
44
import android.os.Bundle
55
import android.view.LayoutInflater
66
import android.view.ViewGroup
7-
import androidx.navigation.Navigation
87
import com.skyd.anivu.R
98
import com.skyd.anivu.databinding.ItemArticle1Binding
10-
import com.skyd.anivu.ext.activity
9+
import com.skyd.anivu.ext.findMainNavController
1110
import com.skyd.anivu.ext.gone
1211
import com.skyd.anivu.ext.readable
1312
import com.skyd.anivu.ext.toDateTimeString
@@ -30,7 +29,6 @@ class Article1Proxy : VarietyAdapter.Proxy<ArticleBean, ItemArticle1Binding, Art
3029
index: Int,
3130
action: ((Any?) -> Unit)?
3231
) {
33-
val activity = holder.itemView.activity
3432
holder.binding.apply {
3533
tvArticle1Title.text = data.title?.toHtml()
3634
data.description?.readable().let { description ->
@@ -68,8 +66,7 @@ class Article1Proxy : VarietyAdapter.Proxy<ArticleBean, ItemArticle1Binding, Art
6866
val bundle = Bundle().apply {
6967
putString(ReadFragment.ARTICLE_ID_KEY, data.articleId)
7068
}
71-
Navigation.findNavController(activity, R.id.nav_host_fragment_main)
72-
.navigate(R.id.action_to_read_fragment, bundle)
69+
it.findMainNavController().navigate(R.id.action_to_read_fragment, bundle)
7370
}
7471
}
7572
}

app/src/main/java/com/skyd/anivu/ui/adapter/variety/proxy/Feed1Proxy.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ import android.view.MenuItem
77
import android.view.ViewGroup
88
import androidx.appcompat.widget.PopupMenu
99
import androidx.core.view.updatePadding
10-
import androidx.navigation.Navigation.findNavController
1110
import com.skyd.anivu.R
1211
import com.skyd.anivu.databinding.ItemFeed1Binding
13-
import com.skyd.anivu.ext.activity
1412
import com.skyd.anivu.ext.dp
13+
import com.skyd.anivu.ext.findMainNavController
1514
import com.skyd.anivu.ext.gone
1615
import com.skyd.anivu.ext.readable
1716
import com.skyd.anivu.ext.toHtml
@@ -38,7 +37,6 @@ class Feed1Proxy(
3837
index: Int,
3938
action: ((Any?) -> Unit)?
4039
) {
41-
val activity = holder.itemView.activity
4240
holder.binding.apply {
4341
tvFeed1Title.text = data.title?.toHtml()
4442
tvFeed1Desc.text = data.description?.readable()
@@ -81,8 +79,7 @@ class Feed1Proxy(
8179
val bundle = Bundle().apply {
8280
putString(ArticleFragment.FEED_URL_KEY, data.url)
8381
}
84-
findNavController(activity, R.id.nav_host_fragment_main)
85-
.navigate(R.id.action_to_article_fragment, bundle)
82+
it.findMainNavController().navigate(R.id.action_to_article_fragment, bundle)
8683
}
8784
}
8885
}

app/src/main/java/com/skyd/anivu/ui/fragment/MainFragment.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import dagger.hilt.android.AndroidEntryPoint
1212

1313
@AndroidEntryPoint
1414
class MainFragment : BaseFragment<FragmentMainBinding>() {
15-
override fun enabledOnBackPressedCallback() = false
16-
1715
override fun getViewBinding(inflater: LayoutInflater, container: ViewGroup?) =
1816
FragmentMainBinding.inflate(inflater, container, false)
1917

0 commit comments

Comments
 (0)