Skip to content

Commit fe255d4

Browse files
committed
optimize
1 parent 1047d53 commit fe255d4

File tree

85 files changed

+867
-701
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+867
-701
lines changed

app/build.gradle.kts

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ plugins {
88
alias(libs.plugins.google.devtools.ksp)
99
alias(libs.plugins.rikka.tools.materialthemebuilder)
1010
alias(libs.plugins.google.dagger.hilt.android)
11-
id("kotlin-kapt")
12-
id("kotlin-parcelize")
11+
alias(libs.plugins.kotlin.kapt)
12+
alias(libs.plugins.kotlin.parcelize)
1313
}
1414

1515
apply(plugin = "kotlin-kapt")

app/src/main/java/com/example/c001apk/adapter/AppAdapter.kt

+18-7
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ import com.example.c001apk.logic.repository.BlackListRepository
3232
import com.example.c001apk.util.DateUtils
3333
import com.example.c001apk.util.ImageUtil
3434
import com.example.c001apk.util.PrefManager
35-
import com.example.c001apk.util.Utils.getColorFromAttr
3635
import com.example.c001apk.view.LinearItemDecoration1
36+
import com.google.android.material.color.MaterialColors
3737
import kotlinx.coroutines.CoroutineScope
3838
import kotlinx.coroutines.Dispatchers
3939
import kotlinx.coroutines.launch
@@ -319,7 +319,13 @@ class AppAdapter(
319319
binding.isFollow = data.isFollow
320320
if (data.isFollow == 0) {
321321
binding.followBtn.text = "关注"
322-
binding.followBtn.setTextColor(itemView.context.getColorFromAttr(rikka.preference.simplemenu.R.attr.colorPrimary))
322+
binding.followBtn.setTextColor(
323+
MaterialColors.getColor(
324+
itemView.context,
325+
com.google.android.material.R.attr.colorPrimary,
326+
0
327+
)
328+
)
323329
} else {
324330
binding.followBtn.text = "已关注"
325331
binding.followBtn.setTextColor(itemView.context.getColor(android.R.color.darker_gray))
@@ -337,17 +343,22 @@ class AppAdapter(
337343
override fun bind(data: HomeFeedResponse.Data) {
338344
if (data.description == "home") {
339345
binding.parent.setCardBackgroundColor(
340-
itemView.context.getColorFromAttr(android.R.attr.windowBackground)
346+
MaterialColors.getColor(
347+
itemView.context,
348+
android.R.attr.windowBackground,
349+
0
350+
)
341351
)
342352
} else {
343353
binding.parent.setCardBackgroundColor(
344354
itemView.context.getColor(R.color.home_card_background_color)
345355
)
346356
}
347-
binding.commentNum.text = if (data.entityType == "topic")
348-
"${data.commentnumTxt}讨论"
349-
else
350-
"${data.feedCommentNumTxt}讨论"
357+
binding.commentNum.text =
358+
if (data.entityType == "topic")
359+
"${data.commentnumTxt}讨论"
360+
else
361+
"${data.feedCommentNumTxt}讨论"
351362

352363
binding.setVariable(BR.data, data)
353364
binding.setVariable(BR.listener, listener)

app/src/main/java/com/example/c001apk/adapter/BaseAdapter.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ class HomeFeedDiffCallback : DiffUtil.ItemCallback<HomeFeedResponse.Data>() {
2727
oldItem: HomeFeedResponse.Data,
2828
newItem: HomeFeedResponse.Data
2929
): Boolean {
30-
return oldItem.entityId == newItem.entityId && oldItem.lastupdate == newItem.lastupdate
30+
return if ((oldItem.entityTemplate == "iconMiniScrollCard" && newItem.entityTemplate == "iconMiniScrollCard")
31+
|| oldItem.entityTemplate == "iconMiniGridCard" && newItem.entityTemplate == "iconMiniGridCard"
32+
)
33+
oldItem == newItem
34+
else oldItem.entityId == newItem.entityId && oldItem.lastupdate == newItem.lastupdate
3135
}
3236
}

app/src/main/java/com/example/c001apk/adapter/IconLinkGridCardAdapter.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ class IconLinkGridCardDiffCallback : DiffUtil.ItemCallback<List<IconLinkGridCard
4949
oldItem: List<IconLinkGridCardBean>,
5050
newItem: List<IconLinkGridCardBean>
5151
): Boolean {
52-
return oldItem[0].url == newItem[0].url
52+
return oldItem.first().url == newItem.first().url
5353
}
5454

5555
override fun areContentsTheSame(
5656
oldItem: List<IconLinkGridCardBean>,
5757
newItem: List<IconLinkGridCardBean>
5858
): Boolean {
59-
return oldItem.size == newItem.size && oldItem.last().url == newItem.last().url
59+
return oldItem.size == newItem.size && oldItem.first().url == newItem.first().url
6060
}
6161
}

app/src/main/java/com/example/c001apk/adapter/ItemListener.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ interface ItemListener {
4141
fun onMessClicked(view: View, note: String) {
4242
val doc: Document = Jsoup.parse(note)
4343
val links: Elements = doc.select("a[href]")
44-
for (link in links) {
44+
links.forEach { link ->
4545
val href = link.attr("href")
4646
if (href.contains("/feed/")) {
4747
val id: String
@@ -156,7 +156,7 @@ interface ItemListener {
156156

157157
fun onReply(id: String, uid: String, username: String?, position: Int, rPosition: Int?) {}
158158

159-
fun onBlockUser(id:String, uid: String, position: Int) {}
159+
fun onBlockUser(id: String, uid: String, position: Int) {}
160160

161161
fun onDeleteClicked(entityType: String, id: String, position: Int) {}
162162
}

app/src/main/java/com/example/c001apk/adapter/ViewBindingAdapters.kt

+36-16
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import android.widget.BaseAdapter
1212
import android.widget.ImageView
1313
import android.widget.TextView
1414
import androidx.constraintlayout.widget.ConstraintLayout
15-
import androidx.core.graphics.drawable.DrawableCompat
1615
import androidx.databinding.BindingAdapter
1716
import com.absinthe.libraries.utils.extensions.dp
1817
import com.example.c001apk.R
@@ -21,20 +20,30 @@ import com.example.c001apk.logic.model.HomeFeedResponse
2120
import com.example.c001apk.util.ImageUtil
2221
import com.example.c001apk.util.NetWorkUtil
2322
import com.example.c001apk.util.SpannableStringBuilderUtil
24-
import com.example.c001apk.util.Utils.getColorFromAttr
2523
import com.example.c001apk.view.LinearAdapterLayout
2624
import com.example.c001apk.view.LinkTextView
2725
import com.example.c001apk.view.ninegridimageview.NineGridImageView
26+
import com.google.android.material.color.MaterialColors
2827

2928
@BindingAdapter("setExtraPic")
3029
fun setExtraPic(imageView: ImageView, extraPic: String?) {
3130
if (extraPic.isNullOrEmpty())
3231
imageView.apply {
3332
setBackgroundColor(
34-
imageView.context.getColorFromAttr(rikka.preference.simplemenu.R.attr.colorPrimary)
33+
MaterialColors.getColor(
34+
imageView.context,
35+
com.google.android.material.R.attr.colorPrimary,
36+
0
37+
)
3538
)
3639
val link = imageView.context.getDrawable(R.drawable.ic_link)
37-
link!!.setTint(imageView.context.getColorFromAttr(android.R.attr.windowBackground))
40+
link?.setTint(
41+
MaterialColors.getColor(
42+
imageView.context,
43+
android.R.attr.windowBackground,
44+
0
45+
)
46+
)
3847
setImageDrawable(link)
3948
}
4049
else {
@@ -50,7 +59,11 @@ fun setFollowText(textView: TextView, userAction: HomeFeedResponse.UserAction?)
5059
textView.visibility = View.VISIBLE
5160
if (userAction.followAuthor == 0) {
5261
textView.text = "关注"
53-
textView.setTextColor(textView.context.getColorFromAttr(rikka.preference.simplemenu.R.attr.colorPrimary))
62+
MaterialColors.getColor(
63+
textView.context,
64+
com.google.android.material.R.attr.colorPrimary,
65+
0
66+
)
5467
} else if (userAction.followAuthor == 1) {
5568
textView.text = "取消关注"
5669
textView.setTextColor(textView.context.getColor(android.R.color.darker_gray))
@@ -63,13 +76,15 @@ fun setArticleImage(
6376
imageView: NineGridImageView,
6477
setArticleImage: FeedArticleContentBean.Data,
6578
) {
66-
val urlList = ArrayList<String>()
67-
urlList.add("${setArticleImage.url}.s.jpg")
68-
val imageLp = ImageUtil.getImageLp(setArticleImage.url!!)
69-
imageView.imgWidth = imageLp.first
70-
imageView.imgHeight = imageLp.second
71-
imageView.isCompress = true
72-
imageView.setUrlList(urlList)
79+
setArticleImage.url?.let {
80+
val urlList = ArrayList<String>()
81+
urlList.add("$it.s.jpg")
82+
val imageLp = ImageUtil.getImageLp(it)
83+
imageView.imgWidth = imageLp.first
84+
imageView.imgHeight = imageLp.second
85+
imageView.isCompress = true
86+
imageView.setUrlList(urlList)
87+
}
7388
}
7489

7590
@BindingAdapter(value = ["targetRow", "relationRows", "isFeedContent"], requireAll = true)
@@ -195,12 +210,17 @@ fun setGridView(
195210
fun setLike(textView: TextView, isLike: Int?) {
196211
isLike?.let {
197212
val color = if (it == 1)
198-
textView.context.getColorFromAttr(rikka.preference.simplemenu.R.attr.colorPrimary)
213+
MaterialColors.getColor(
214+
textView.context,
215+
com.google.android.material.R.attr.colorPrimary,
216+
0
217+
)
199218
else textView.context.getColor(android.R.color.darker_gray)
200219
val size = textView.textSize.toInt()
201-
val drawableLike = textView.context.getDrawable(R.drawable.ic_like)!!
202-
drawableLike.setBounds(0, 0, size, size)
203-
DrawableCompat.setTint(drawableLike, color)
220+
val drawableLike = textView.context.getDrawable(R.drawable.ic_like).also { drawable ->
221+
drawable?.setBounds(0, 0, size, size)
222+
drawable?.setTint(color)
223+
}
204224
textView.setCompoundDrawables(drawableLike, null, null, null)
205225
textView.setTextColor(color)
206226
}

app/src/main/java/com/example/c001apk/logic/dao/StringEntityDao.kt

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
44
import androidx.room.Dao
55
import androidx.room.Insert
66
import androidx.room.Query
7+
import androidx.room.Transaction
78
import com.example.c001apk.logic.model.StringEntity
89
import kotlinx.coroutines.flow.Flow
910

@@ -29,6 +30,10 @@ interface StringEntityDao {
2930
@Query("SELECT 1 FROM StringEntity WHERE data = :data LIMIT 1")
3031
suspend fun isExist(data: String): Boolean
3132

33+
@Transaction
34+
@Query("SELECT 1 FROM StringEntity WHERE :data LIKE '%' || data || '%' LIMIT 1")
35+
suspend fun isContain(data: String): Boolean
36+
3237
@Query("DELETE FROM StringEntity WHERE data = :data")
3338
suspend fun delete(data: String)
3439

Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.example.c001apk.logic.model
22

3-
import android.os.Parcel
43
import android.os.Parcelable
5-
import kotlinx.parcelize.Parceler
64
import kotlinx.parcelize.Parcelize
75

86
@Parcelize
@@ -23,48 +21,6 @@ data class UpdateCheckResponse(val data: List<Data>) : Parcelable {
2321
var localVersionName: String?,
2422
var localVersionCode: Long?,
2523
var expand: Boolean = false,
26-
) : Parcelable {
27-
28-
constructor(parcel: Parcel) : this(
29-
parcel.readInt(),
30-
parcel.readString().toString(),
31-
parcel.readString().toString(),
32-
parcel.readString().toString(),
33-
parcel.readString().toString(),
34-
parcel.readLong(),
35-
parcel.readString().toString(),
36-
parcel.readLong(),
37-
parcel.readString().toString(),
38-
parcel.readString().toString(),
39-
parcel.readInt(),
40-
parcel.readString().toString(),
41-
parcel.readLong(),
42-
parcel.readInt() == 1,
43-
)
44-
45-
companion object : Parceler<Data> {
46-
override fun Data.write(parcel: Parcel, flags: Int) {
47-
parcel.writeInt(id)
48-
parcel.writeString(title)
49-
parcel.writeString(shorttitle)
50-
parcel.writeString(logo)
51-
parcel.writeString(apkversionname)
52-
parcel.writeLong(apkversioncode)
53-
parcel.writeString(apksize)
54-
parcel.writeLong(lastupdate)
55-
parcel.writeString(packageName)
56-
parcel.writeString(changelog)
57-
parcel.writeInt(pkg_bit_type)
58-
parcel.writeString(localVersionName)
59-
parcel.writeLong(localVersionCode ?: -1)
60-
parcel.writeInt(if (expand) 1 else 0)
61-
}
62-
63-
override fun create(parcel: Parcel): Data {
64-
return Data(parcel)
65-
}
66-
}
67-
68-
}
24+
) : Parcelable
6925

7026
}

app/src/main/java/com/example/c001apk/logic/repository/BlackListRepository.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class BlackListRepository @Inject constructor(
5959
}
6060

6161
suspend fun checkTopic(topic: String): Boolean {
62-
return topicBlackListDao.isExist(topic)
62+
return topicBlackListDao.isContain(topic)
6363
}
6464

6565
suspend fun saveTopic(topic: String) {

app/src/main/java/com/example/c001apk/ui/app/AppActivity.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ class AppActivity : BaseActivity<ActivityAppBinding>(), IOnTabClickContainer {
132132
}
133133

134134
private fun initView() {
135-
binding.viewPager.offscreenPageLimit = viewModel.tabList!!.size
135+
binding.viewPager.offscreenPageLimit = viewModel.tabList?.size ?: 0
136136
binding.viewPager.adapter = object : FragmentStateAdapter(this) {
137137
override fun createFragment(position: Int) =
138138
when (position) {
@@ -142,10 +142,10 @@ class AppActivity : BaseActivity<ActivityAppBinding>(), IOnTabClickContainer {
142142
else -> throw IllegalArgumentException()
143143
}
144144

145-
override fun getItemCount() = viewModel.tabList!!.size
145+
override fun getItemCount() = viewModel.tabList?.size ?: 0
146146
}
147147
TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position ->
148-
tab.text = viewModel.tabList!![position]
148+
tab.text = viewModel.tabList?.getOrElse(position) { "null" }
149149
}.attach()
150150

151151
binding.tabLayout.addOnTabSelectedListener(object : OnTabSelectedListener {

app/src/main/java/com/example/c001apk/ui/app/AppDetailViewModel.kt

+13-11
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,17 @@ class AppDetailViewModel @Inject constructor(
7474
if (isRefreshing)
7575
appCommentList.clear()
7676
if (isRefreshing || isLoadMore) {
77-
comment?.data!!.forEach {
78-
if (it.entityType == "feed")
79-
if (!repository.checkUid(
80-
it.userInfo?.uid.toString()
81-
) && !repository.checkTopic(
82-
it.tags + it.ttitle
77+
comment?.data?.let { data ->
78+
data.forEach {
79+
if (it.entityType == "feed")
80+
if (!repository.checkUid(
81+
it.userInfo?.uid.toString()
82+
) && !repository.checkTopic(
83+
it.tags + it.ttitle + it.relationRows?.getOrNull(0)?.title
84+
)
8385
)
84-
)
85-
appCommentList.add(it)
86+
appCommentList.add(it)
87+
}
8688
}
8789
}
8890
changeState.postValue(Pair(FooterAdapter.LoadState.LOADING_COMPLETE, null))
@@ -114,7 +116,7 @@ class AppDetailViewModel @Inject constructor(
114116
if (response != null) {
115117
if (response.data == "删除成功") {
116118
toastText.postValue(Event("删除成功"))
117-
val updateList = appCommentData.value!!.toMutableList()
119+
val updateList = appCommentData.value?.toMutableList() ?: ArrayList()
118120
updateList.removeAt(position)
119121
appCommentData.postValue(updateList)
120122
} else if (!response.message.isNullOrEmpty()) {
@@ -175,7 +177,7 @@ class AppDetailViewModel @Inject constructor(
175177
viewModelScope.launch(Dispatchers.IO) {
176178
repository.saveUid(uid)
177179
}
178-
val currentList = appCommentData.value!!.toMutableList()
180+
val currentList = appCommentData.value?.toMutableList() ?: ArrayList()
179181
currentList.removeAt(position)
180182
appCommentData.postValue(currentList)
181183
}
@@ -198,7 +200,7 @@ class AppDetailViewModel @Inject constructor(
198200
val isLike = if (likeData.isLike.get() == 1) 0 else 1
199201
likeData.likeNum.set(count)
200202
likeData.isLike.set(isLike)
201-
val currentList = appCommentData.value!!.toMutableList()
203+
val currentList = appCommentData.value?.toMutableList() ?: ArrayList()
202204
currentList[position].likenum = count
203205
currentList[position].userAction?.like = isLike
204206
appCommentData.postValue(currentList)

0 commit comments

Comments
 (0)