Skip to content

Commit 4c7bdcf

Browse files
authored
Modernize toolchain: Kotlin 2.3.10 + KSP2, sora-editor 0.24.6, drop abandoned deps (#59)
* Modernize toolchain: Kotlin 2.3.10 + KSP2, sora-editor 0.24.6, drop abandoned deps Toolchain (Kotlin 2.1.21 -> 2.3.10, KSP 2.1.21-2.0.2 -> 2.3.9): - KSP 2.3.x is KSP2-only; migrated Helpers.kt off the removed kotlinOptions/KotlinJvmOptions API to the compilerOptions DSL (jvmTarget = JvmTarget.JVM_17), which is a hard error under Kotlin 2.3. - Moved the `ksp { }` room schema config to a top-level block (it is a project-level extension, not part of the Android DSL). - AGP stays 8.13.2, Gradle stays 8.14.5 (verified compatible in practice). sora-editor: editor-bom 0.23.7 -> 0.24.6 (now unblocked by Kotlin 2.3). Remove Roomigrant (com.github.MatrixDev.Roomigrant, abandoned JitPack): - It was already dead code: the only consumer of its generated migrations was a commented-out addMigrations() call. Real migration strategy is Room-native autoMigrations + fallbackToDestructiveMigration(), unchanged. - Dropped both deps, the @GenerateRoomMigrations annotations/imports, and the now-unused jitpack repository. Room codegen verified under KSP2 (DAO/db/ auto-migration impls still generated; schemas intact). Replace recyclerview-fastscroll (com.simplecityapps, abandoned) with me.zhanghai.android.fastscroll:library:1.3.0 (AndroidX-native): - 6 layouts: FastScrollRecyclerView -> RecyclerView. - Attach FastScrollerBuilder(...).useMd2Style().build() per list. - App list/manager: SectionedAdapter.getSectionName -> PopupTextProvider.getPopupText. - Dropped unused app: namespaces; removed a pre-existing no-op app:layout_behavior on the chain settings list (LinearLayout parent). Verified locally on JDK 17: oss debug compile + full assembleOssRelease (R8/minify, lintVital, desugaring) pass. * Address Greptile review: move jvmTarget config out of android.apply; XML trailing newline - Helpers.kt: move tasks.withType<KotlinCompile> (a project-level call) out of the android.apply {} block to make scope explicit, matching the top-level ksp{} block. - layout_chain_settings.xml: restore trailing newline.
1 parent f7f4aad commit 4c7bdcf

19 files changed

Lines changed: 54 additions & 73 deletions

app/build.gradle.kts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ android {
1313
compileOptions {
1414
isCoreLibraryDesugaringEnabled = true
1515
}
16-
ksp {
17-
arg("room.incremental", "true")
18-
arg("room.schemaLocation", "$projectDir/schemas")
19-
}
2016
bundle {
2117
language {
2218
enableSplit = false
@@ -38,6 +34,14 @@ android {
3834
}
3935
}
4036

37+
// KSP options (room schema export). The `ksp { }` extension is registered by the KSP Gradle
38+
// plugin at the project level, not inside the Android DSL, so it is declared as a top-level
39+
// block here.
40+
ksp {
41+
arg("room.incremental", "true")
42+
arg("room.schemaLocation", "$projectDir/schemas")
43+
}
44+
4145
dependencies {
4246

4347
implementation(fileTree("libs"))
@@ -76,7 +80,7 @@ dependencies {
7680
// widget; it replaces the archived com.blacksquircle.ui:editorkit. Syntax highlighting
7781
// is provided via TextMate grammars (language-textmate), with JSON grammar + themes
7882
// bundled in assets/textmate/. Versions are managed by the editor-bom platform.
79-
implementation(platform("io.github.rosemoe:editor-bom:0.23.7"))
83+
implementation(platform("io.github.rosemoe:editor-bom:0.24.6"))
8084
implementation("io.github.rosemoe:editor")
8185
implementation("io.github.rosemoe:language-textmate")
8286

@@ -87,16 +91,11 @@ dependencies {
8791
implementation("com.google.guava:guava:33.4.0-android")
8892
implementation("org.ini4j:ini4j:0.5.4")
8993

90-
implementation("com.simplecityapps:recyclerview-fastscroll:2.0.1") {
91-
exclude(group = "androidx.recyclerview")
92-
exclude(group = "androidx.appcompat")
93-
}
94+
implementation("me.zhanghai.android.fastscroll:library:1.3.0")
9495

9596
implementation("androidx.room:room-runtime:2.7.2")
9697
ksp("androidx.room:room-compiler:2.7.2")
9798
implementation("androidx.room:room-ktx:2.7.2")
98-
implementation("com.github.MatrixDev.Roomigrant:RoomigrantLib:0.3.4")
99-
ksp("com.github.MatrixDev.Roomigrant:RoomigrantCompiler:0.3.4")
10099

101100
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
102101
}

app/src/main/java/io/nekohasekai/sagernet/database/SagerDatabase.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.room.Database
55
import androidx.room.Room
66
import androidx.room.RoomDatabase
77
import androidx.room.TypeConverters
8-
import dev.matrix.roomigrant.GenerateRoomMigrations
98
import io.nekohasekai.sagernet.Key
109
import io.nekohasekai.sagernet.SagerNet
1110
import io.nekohasekai.sagernet.fmt.KryoConverters
@@ -26,7 +25,6 @@ import kotlinx.coroutines.launch
2625
]
2726
)
2827
@TypeConverters(value = [KryoConverters::class, GsonConverters::class])
29-
@GenerateRoomMigrations
3028
abstract class SagerDatabase : RoomDatabase() {
3129

3230
companion object {
@@ -35,7 +33,6 @@ abstract class SagerDatabase : RoomDatabase() {
3533
val instance by lazy {
3634
SagerNet.application.getDatabasePath(Key.DB_PROFILE).parentFile?.mkdirs()
3735
Room.databaseBuilder(SagerNet.application, SagerDatabase::class.java, Key.DB_PROFILE)
38-
// .addMigrations(*SagerDatabase_Migrations.build())
3936
.setJournalMode(JournalMode.TRUNCATE)
4037
.allowMainThreadQueries()
4138
.enableMultiInstanceInvalidation()

app/src/main/java/io/nekohasekai/sagernet/database/preference/PublicDatabase.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ package io.nekohasekai.sagernet.database.preference
33
import androidx.room.Database
44
import androidx.room.Room
55
import androidx.room.RoomDatabase
6-
import dev.matrix.roomigrant.GenerateRoomMigrations
76
import io.nekohasekai.sagernet.Key
87
import io.nekohasekai.sagernet.SagerNet
98
import kotlinx.coroutines.GlobalScope
109
import kotlinx.coroutines.launch
1110

1211
@Database(entities = [KeyValuePair::class], version = 1)
13-
@GenerateRoomMigrations
1412
abstract class PublicDatabase : RoomDatabase() {
1513
companion object {
1614
val instance by lazy {

app/src/main/java/io/nekohasekai/sagernet/ui/AppListActivity.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ import androidx.recyclerview.widget.DefaultItemAnimator
2323
import androidx.recyclerview.widget.LinearLayoutManager
2424
import androidx.recyclerview.widget.RecyclerView
2525
import com.google.android.material.snackbar.Snackbar
26-
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
26+
import me.zhanghai.android.fastscroll.FastScrollerBuilder
27+
import me.zhanghai.android.fastscroll.PopupTextProvider
2728
import io.nekohasekai.sagernet.BuildConfig
2829
import io.nekohasekai.sagernet.R
2930
import io.nekohasekai.sagernet.SagerNet
@@ -97,7 +98,7 @@ class AppListActivity : ThemedActivity() {
9798

9899
private inner class AppsAdapter : RecyclerView.Adapter<AppViewHolder>(),
99100
Filterable,
100-
FastScrollRecyclerView.SectionedAdapter {
101+
PopupTextProvider {
101102
var filteredApps = apps
102103

103104
suspend fun reload() {
@@ -146,7 +147,7 @@ class AppListActivity : ThemedActivity() {
146147

147148
override fun getFilter(): Filter = filterImpl
148149

149-
override fun getSectionName(position: Int): String {
150+
override fun getPopupText(view: View, position: Int): CharSequence {
150151
return filteredApps[position].name.firstOrNull()?.toString() ?: ""
151152
}
152153

@@ -214,6 +215,7 @@ class AppListActivity : ThemedActivity() {
214215
binding.list.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
215216
binding.list.itemAnimator = DefaultItemAnimator()
216217
binding.list.adapter = appsAdapter
218+
FastScrollerBuilder(binding.list).useMd2Style().build()
217219

218220
ViewCompat.setOnApplyWindowInsetsListener(binding.root, ListListener)
219221

app/src/main/java/io/nekohasekai/sagernet/ui/AppManagerActivity.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
2424
import androidx.recyclerview.widget.RecyclerView
2525
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2626
import com.google.android.material.snackbar.Snackbar
27-
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
27+
import me.zhanghai.android.fastscroll.FastScrollerBuilder
28+
import me.zhanghai.android.fastscroll.PopupTextProvider
2829
import io.nekohasekai.sagernet.BuildConfig
2930
import io.nekohasekai.sagernet.R
3031
import io.nekohasekai.sagernet.SagerNet
@@ -101,7 +102,7 @@ class AppManagerActivity : ThemedActivity() {
101102
}
102103

103104
private inner class AppsAdapter : RecyclerView.Adapter<AppViewHolder>(),
104-
FastScrollRecyclerView.SectionedAdapter {
105+
PopupTextProvider {
105106
var filteredApps = apps
106107

107108
suspend fun reload() {
@@ -149,7 +150,7 @@ class AppManagerActivity : ThemedActivity() {
149150
notifyDataSetChanged()
150151
}
151152

152-
override fun getSectionName(position: Int): String {
153+
override fun getPopupText(view: View, position: Int): CharSequence {
153154
return filteredApps[position].name.firstOrNull()?.toString() ?: ""
154155
}
155156

@@ -253,6 +254,7 @@ class AppManagerActivity : ThemedActivity() {
253254
binding.list.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
254255
binding.list.itemAnimator = DefaultItemAnimator()
255256
binding.list.adapter = appsAdapter
257+
FastScrollerBuilder(binding.list).useMd2Style().build()
256258

257259
ViewCompat.setOnApplyWindowInsetsListener(binding.root, ListListener)
258260

app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ import kotlinx.coroutines.joinAll
115115
import kotlinx.coroutines.launch
116116
import kotlinx.coroutines.sync.Mutex
117117
import kotlinx.coroutines.sync.withLock
118+
import me.zhanghai.android.fastscroll.FastScrollerBuilder
118119
import moe.matsuri.nb4a.Protocols
119120
import moe.matsuri.nb4a.Protocols.getProtocolColor
120121
import moe.matsuri.nb4a.proxy.anytls.AnyTLSSettingsActivity
@@ -1400,6 +1401,7 @@ class ConfigurationFragment @JvmOverloads constructor(
14001401
GroupManager.addListener(adapter!!)
14011402
configurationListView.adapter = adapter
14021403
configurationListView.setItemViewCacheSize(20)
1404+
FastScrollerBuilder(configurationListView).useMd2Style().build()
14031405

14041406
// Hide the docked FAB while scrolling down (so it never overlaps the
14051407
// bottom card) and bring it back on upward scroll or when the list

app/src/main/java/io/nekohasekai/sagernet/ui/GroupFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import io.nekohasekai.sagernet.databinding.LayoutGroupItemBinding
2424
import io.nekohasekai.sagernet.fmt.toUniversalLink
2525
import io.nekohasekai.sagernet.group.GroupUpdater
2626
import io.nekohasekai.sagernet.ktx.*
27+
import me.zhanghai.android.fastscroll.FastScrollerBuilder
2728
import io.nekohasekai.sagernet.widget.ListListener
2829
import io.nekohasekai.sagernet.widget.QRCodeDialog
2930
import io.nekohasekai.sagernet.widget.UndoSnackbarManager
@@ -57,6 +58,7 @@ class GroupFragment : ToolbarFragment(R.layout.layout_group),
5758
groupAdapter = GroupAdapter()
5859
GroupManager.addListener(groupAdapter)
5960
groupListView.adapter = groupAdapter
61+
FastScrollerBuilder(groupListView).useMd2Style().build()
6062

6163
undoManager = UndoSnackbarManager(activity, groupAdapter)
6264

app/src/main/java/io/nekohasekai/sagernet/ui/RouteFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import io.nekohasekai.sagernet.databinding.LayoutEmptyRouteBinding
2121
import io.nekohasekai.sagernet.databinding.LayoutRouteBinding
2222
import io.nekohasekai.sagernet.databinding.LayoutRouteItemBinding
2323
import io.nekohasekai.sagernet.ktx.*
24+
import me.zhanghai.android.fastscroll.FastScrollerBuilder
2425
import io.nekohasekai.sagernet.widget.ListListener
2526
import io.nekohasekai.sagernet.widget.UndoSnackbarManager
2627

@@ -46,6 +47,7 @@ class RouteFragment : ToolbarFragment(R.layout.layout_route), Toolbar.OnMenuItem
4647
ruleAdapter = RuleAdapter()
4748
ProfileManager.addListener(ruleAdapter)
4849
ruleListView.adapter = ruleAdapter
50+
FastScrollerBuilder(ruleListView).useMd2Style().build()
4951
undoManager = UndoSnackbarManager(activity, ruleAdapter)
5052

5153
ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN, ItemTouchHelper.START) {

app/src/main/java/io/nekohasekai/sagernet/ui/profile/ChainSettingsActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import io.nekohasekai.sagernet.databinding.LayoutProfileBinding
2727
import io.nekohasekai.sagernet.fmt.internal.ChainBean
2828
import io.nekohasekai.sagernet.ktx.*
2929
import io.nekohasekai.sagernet.ui.ProfileSelectActivity
30+
import me.zhanghai.android.fastscroll.FastScrollerBuilder
3031
import moe.matsuri.nb4a.Protocols.getProtocolColor
3132

3233
class ChainSettingsActivity : ProfileSettingsActivity<ChainBean>(R.layout.layout_chain_settings) {
@@ -69,6 +70,7 @@ class ChainSettingsActivity : ProfileSettingsActivity<ChainBean>(R.layout.layout
6970
configurationList.layoutManager = layoutManager
7071
configurationAdapter = ProxiesAdapter()
7172
configurationList.adapter = configurationAdapter
73+
FastScrollerBuilder(configurationList).useMd2Style().build()
7274

7375
ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
7476
ItemTouchHelper.UP or ItemTouchHelper.DOWN, ItemTouchHelper.START

app/src/main/res/layout/layout_app_list.xml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,13 @@
101101

102102
</LinearLayout>
103103

104-
<com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
104+
<androidx.recyclerview.widget.RecyclerView
105105
android:id="@+id/list"
106106
android:layout_width="match_parent"
107107
android:layout_height="match_parent"
108108
android:clipToPadding="false"
109109
android:scrollbarSize="0dp"
110110
android:visibility="gone"
111-
app:fastScrollAutoHide="true"
112-
app:fastScrollPopupTextColor="?colorPrimary"
113-
app:fastScrollThumbColor="?colorPrimary"
114-
app:fastScrollThumbInactiveColor="?colorPrimary"
115111
app:layout_behavior="@string/appbar_scrolling_view_behavior"
116112
tools:listitem="@layout/layout_apps_item" />
117113

0 commit comments

Comments
 (0)