Skip to content

Commit 914700d

Browse files
committed
Fix Android 15 insets
1 parent 151c110 commit 914700d

23 files changed

+97
-102
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import io.nekohasekai.sagernet.databinding.LayoutAboutBinding
2525
import io.nekohasekai.sagernet.ktx.*
2626
import io.nekohasekai.sagernet.plugin.PluginManager.loadString
2727
import io.nekohasekai.sagernet.utils.PackageCache
28-
import io.nekohasekai.sagernet.widget.ListHolderListener
28+
import io.nekohasekai.sagernet.widget.ListListener
2929
import libcore.Libcore
3030
import moe.matsuri.nb4a.plugin.Plugins
3131

@@ -36,7 +36,7 @@ class AboutFragment : ToolbarFragment(R.layout.layout_about) {
3636

3737
val binding = LayoutAboutBinding.bind(view)
3838

39-
ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener)
39+
ViewCompat.setOnApplyWindowInsetsListener(view, ListListener)
4040
toolbar.setTitle(R.string.menu_about)
4141

4242
parentFragmentManager.beginTransaction()

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

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@ import android.content.pm.PackageManager
77
import android.graphics.drawable.Drawable
88
import android.os.Bundle
99
import android.util.SparseBooleanArray
10-
import android.view.*
10+
import android.view.KeyEvent
11+
import android.view.Menu
12+
import android.view.MenuItem
13+
import android.view.View
14+
import android.view.ViewGroup
1115
import android.widget.Filter
1216
import android.widget.Filterable
1317
import androidx.annotation.UiThread
18+
import androidx.appcompat.content.res.AppCompatResources
1419
import androidx.core.util.contains
1520
import androidx.core.util.set
1621
import androidx.core.view.ViewCompat
@@ -30,9 +35,12 @@ import io.nekohasekai.sagernet.SagerNet
3035
import io.nekohasekai.sagernet.database.DataStore
3136
import io.nekohasekai.sagernet.databinding.LayoutAppListBinding
3237
import io.nekohasekai.sagernet.databinding.LayoutAppsItemBinding
33-
import io.nekohasekai.sagernet.ktx.*
38+
import io.nekohasekai.sagernet.ktx.crossFadeFrom
39+
import io.nekohasekai.sagernet.ktx.launchCustomTab
40+
import io.nekohasekai.sagernet.ktx.onMainDispatcher
41+
import io.nekohasekai.sagernet.ktx.runOnDefaultDispatcher
42+
import io.nekohasekai.sagernet.ktx.runOnIoDispatcher
3443
import io.nekohasekai.sagernet.utils.PackageCache
35-
import io.nekohasekai.sagernet.widget.ListHolderListener
3644
import io.nekohasekai.sagernet.widget.ListListener
3745
import kotlinx.coroutines.Dispatchers
3846
import kotlinx.coroutines.Job
@@ -79,7 +87,12 @@ class AppListActivity : ThemedActivity() {
7987
binding.desc.text = "$packageName ($ver)"
8088
//
8189
binding.button.isVisible = true
82-
binding.button.setImageDrawable(getDrawable(R.drawable.ic_baseline_info_24))
90+
binding.button.setImageDrawable(
91+
AppCompatResources.getDrawable(
92+
this@AppListActivity,
93+
R.drawable.ic_baseline_info_24
94+
)
95+
)
8396
binding.button.setOnClickListener {
8497
runOnIoDispatcher {
8598
val jsi = NekoJSInterface(packageName)
@@ -238,7 +251,6 @@ class AppListActivity : ThemedActivity() {
238251
binding = LayoutAppListBinding.inflate(layoutInflater)
239252
setContentView(binding.root)
240253

241-
ListHolderListener.setup(this)
242254
setSupportActionBar(binding.toolbar)
243255
supportActionBar?.apply {
244256
setTitle(R.string.select_apps)

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ import android.graphics.drawable.Drawable
88
import android.os.Bundle
99
import android.text.TextUtils
1010
import android.util.SparseBooleanArray
11-
import android.view.*
11+
import android.view.KeyEvent
12+
import android.view.Menu
13+
import android.view.MenuItem
14+
import android.view.View
15+
import android.view.ViewGroup
1216
import android.widget.Filter
1317
import android.widget.Filterable
1418
import androidx.annotation.UiThread
@@ -35,7 +39,6 @@ import io.nekohasekai.sagernet.ktx.crossFadeFrom
3539
import io.nekohasekai.sagernet.ktx.onMainDispatcher
3640
import io.nekohasekai.sagernet.ktx.runOnDefaultDispatcher
3741
import io.nekohasekai.sagernet.utils.PackageCache
38-
import io.nekohasekai.sagernet.widget.ListHolderListener
3942
import io.nekohasekai.sagernet.widget.ListListener
4043
import kotlinx.coroutines.Dispatchers
4144
import kotlinx.coroutines.Job
@@ -191,7 +194,6 @@ class AppManagerActivity : ThemedActivity() {
191194
binding = LayoutAppsBinding.inflate(layoutInflater)
192195
setContentView(binding.root)
193196

194-
ListHolderListener.setup(this)
195197
setSupportActionBar(binding.toolbar)
196198
supportActionBar?.apply {
197199
setTitle(R.string.proxied_apps)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import io.nekohasekai.sagernet.databinding.LayoutGroupItemBinding
2323
import io.nekohasekai.sagernet.fmt.toUniversalLink
2424
import io.nekohasekai.sagernet.group.GroupUpdater
2525
import io.nekohasekai.sagernet.ktx.*
26-
import io.nekohasekai.sagernet.widget.ListHolderListener
26+
import io.nekohasekai.sagernet.widget.ListListener
2727
import io.nekohasekai.sagernet.widget.QRCodeDialog
2828
import io.nekohasekai.sagernet.widget.UndoSnackbarManager
2929
import kotlinx.coroutines.delay
@@ -45,7 +45,7 @@ class GroupFragment : ToolbarFragment(R.layout.layout_group),
4545
super.onViewCreated(view, savedInstanceState)
4646
activity = requireActivity() as MainActivity
4747

48-
ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener)
48+
ViewCompat.setOnApplyWindowInsetsListener(view, ListListener)
4949
toolbar.setTitle(R.string.menu_group)
5050
toolbar.inflateMenu(R.menu.add_group_menu)
5151
toolbar.setOnMenuItemClickListener(this)

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import android.view.MenuItem
1111
import android.view.View
1212
import android.widget.ScrollView
1313
import androidx.appcompat.widget.Toolbar
14+
import androidx.core.view.ViewCompat
1415
import io.nekohasekai.sagernet.R
1516
import io.nekohasekai.sagernet.databinding.LayoutLogcatBinding
1617
import io.nekohasekai.sagernet.ktx.*
18+
import io.nekohasekai.sagernet.widget.ListListener
1719
import libcore.Libcore
1820
import moe.matsuri.nb4a.utils.SendLog
1921

@@ -36,6 +38,8 @@ class LogcatFragment : ToolbarFragment(R.layout.layout_logcat),
3638
binding.textview.breakStrategy = 0 // simple
3739
}
3840

41+
ViewCompat.setOnApplyWindowInsetsListener(binding.root, ListListener)
42+
3943
reloadSession()
4044
// TODO new logcat
4145
}
@@ -46,9 +50,11 @@ class LogcatFragment : ToolbarFragment(R.layout.layout_logcat),
4650
line.contains("INFO[") || line.contains(" [Info]") -> {
4751
color = ForegroundColorSpan((0xFF86C166).toInt())
4852
}
53+
4954
line.contains("ERROR[") || line.contains(" [Error]") -> {
5055
color = ForegroundColorSpan(Color.RED)
5156
}
57+
5258
line.contains("WARN[") || line.contains(" [Warning]") -> {
5359
color = ForegroundColorSpan(Color.RED)
5460
}
@@ -94,12 +100,14 @@ class LogcatFragment : ToolbarFragment(R.layout.layout_logcat),
94100
}
95101

96102
}
103+
97104
R.id.action_send_logcat -> {
98105
val context = requireContext()
99106
runOnDefaultDispatcher {
100107
SendLog.sendLog(context, "NB4A")
101108
}
102109
}
110+
103111
R.id.action_refresh -> {
104112
reloadSession()
105113
}

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.Manifest.permission.POST_NOTIFICATIONS
44
import android.annotation.SuppressLint
55
import android.content.Intent
66
import android.content.pm.PackageManager
7-
import android.graphics.Color
87
import android.net.Uri
98
import android.os.Build
109
import android.os.Bundle
@@ -15,27 +14,38 @@ import androidx.activity.addCallback
1514
import androidx.annotation.IdRes
1615
import androidx.core.app.ActivityCompat
1716
import androidx.core.content.ContextCompat
18-
import androidx.core.view.ViewCompat
1917
import androidx.preference.PreferenceDataStore
2018
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2119
import com.google.android.material.navigation.NavigationView
2220
import com.google.android.material.snackbar.Snackbar
23-
import io.nekohasekai.sagernet.*
21+
import io.nekohasekai.sagernet.GroupType
22+
import io.nekohasekai.sagernet.Key
23+
import io.nekohasekai.sagernet.R
24+
import io.nekohasekai.sagernet.SagerNet
2425
import io.nekohasekai.sagernet.aidl.ISagerNetService
2526
import io.nekohasekai.sagernet.aidl.SpeedDisplayData
2627
import io.nekohasekai.sagernet.aidl.TrafficData
2728
import io.nekohasekai.sagernet.bg.BaseService
2829
import io.nekohasekai.sagernet.bg.SagerConnection
29-
import io.nekohasekai.sagernet.database.*
30+
import io.nekohasekai.sagernet.database.DataStore
31+
import io.nekohasekai.sagernet.database.GroupManager
32+
import io.nekohasekai.sagernet.database.ProfileManager
33+
import io.nekohasekai.sagernet.database.ProxyGroup
34+
import io.nekohasekai.sagernet.database.SubscriptionBean
3035
import io.nekohasekai.sagernet.database.preference.OnPreferenceDataStoreChangeListener
3136
import io.nekohasekai.sagernet.databinding.LayoutMainBinding
3237
import io.nekohasekai.sagernet.fmt.AbstractBean
3338
import io.nekohasekai.sagernet.fmt.KryoConverters
3439
import io.nekohasekai.sagernet.fmt.PluginEntry
3540
import io.nekohasekai.sagernet.group.GroupInterfaceAdapter
3641
import io.nekohasekai.sagernet.group.GroupUpdater
37-
import io.nekohasekai.sagernet.ktx.*
38-
import io.nekohasekai.sagernet.widget.ListHolderListener
42+
import io.nekohasekai.sagernet.ktx.alert
43+
import io.nekohasekai.sagernet.ktx.isPlay
44+
import io.nekohasekai.sagernet.ktx.launchCustomTab
45+
import io.nekohasekai.sagernet.ktx.onMainDispatcher
46+
import io.nekohasekai.sagernet.ktx.parseProxies
47+
import io.nekohasekai.sagernet.ktx.readableMessage
48+
import io.nekohasekai.sagernet.ktx.runOnDefaultDispatcher
3949
import moe.matsuri.nb4a.utils.Util
4050

4151
class MainActivity : ThemedActivity(),
@@ -49,10 +59,6 @@ class MainActivity : ThemedActivity(),
4959
override fun onCreate(savedInstanceState: Bundle?) {
5060
super.onCreate(savedInstanceState)
5161

52-
window?.apply {
53-
statusBarColor = Color.TRANSPARENT
54-
}
55-
5662
binding = LayoutMainBinding.inflate(layoutInflater)
5763
binding.fab.initProgress(binding.fabProgress)
5864
if (themeResId !in intArrayOf(
@@ -86,7 +92,6 @@ class MainActivity : ThemedActivity(),
8692
binding.stats.setOnClickListener { if (DataStore.serviceState.connected) binding.stats.testConnection() }
8793

8894
setContentView(binding.root)
89-
ViewCompat.setOnApplyWindowInsetsListener(binding.coordinator, ListHolderListener)
9095
changeState(BaseService.State.Idle)
9196
connection.connect(this, this)
9297
DataStore.configurationStore.registerChangeListener(this)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import io.nekohasekai.sagernet.database.SagerDatabase
1818
import io.nekohasekai.sagernet.databinding.LayoutEmptyRouteBinding
1919
import io.nekohasekai.sagernet.databinding.LayoutRouteItemBinding
2020
import io.nekohasekai.sagernet.ktx.*
21-
import io.nekohasekai.sagernet.widget.ListHolderListener
21+
import io.nekohasekai.sagernet.widget.ListListener
2222
import io.nekohasekai.sagernet.widget.UndoSnackbarManager
2323

2424
class RouteFragment : ToolbarFragment(R.layout.layout_route), Toolbar.OnMenuItemClickListener {
@@ -33,7 +33,7 @@ class RouteFragment : ToolbarFragment(R.layout.layout_route), Toolbar.OnMenuItem
3333

3434
activity = requireActivity() as MainActivity
3535

36-
ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener)
36+
ViewCompat.setOnApplyWindowInsetsListener(view, ListListener)
3737
toolbar.setTitle(R.string.menu_route)
3838
toolbar.inflateMenu(R.menu.add_route_menu)
3939
toolbar.setOnMenuItemClickListener(this)

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import io.nekohasekai.sagernet.database.ProfileManager
2626
import io.nekohasekai.sagernet.databinding.LayoutScannerBinding
2727
import io.nekohasekai.sagernet.group.RawUpdater
2828
import io.nekohasekai.sagernet.ktx.*
29-
import io.nekohasekai.sagernet.widget.ListHolderListener
3029
import java.util.concurrent.atomic.AtomicBoolean
3130
import java.util.concurrent.atomic.AtomicInteger
3231

@@ -43,7 +42,6 @@ class ScannerActivity : ThemedActivity(),
4342
if (Build.VERSION.SDK_INT >= 25) getSystemService<ShortcutManager>()!!.reportShortcutUsed("scan")
4443
binding = LayoutScannerBinding.inflate(layoutInflater)
4544
setContentView(binding.root)
46-
ListHolderListener.setup(this)
4745
setSupportActionBar(findViewById(R.id.toolbar))
4846
supportActionBar?.apply {
4947
setDisplayHomeAsUpEnabled(true)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import android.os.Bundle
44
import android.view.View
55
import androidx.core.view.ViewCompat
66
import io.nekohasekai.sagernet.R
7-
import io.nekohasekai.sagernet.widget.ListHolderListener
7+
import io.nekohasekai.sagernet.widget.ListListener
88

99
class SettingsFragment : ToolbarFragment(R.layout.layout_config_settings) {
1010

1111
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1212
super.onViewCreated(view, savedInstanceState)
1313

14-
ViewCompat.setOnApplyWindowInsetsListener(view, ListHolderListener)
14+
ViewCompat.setOnApplyWindowInsetsListener(view, ListListener)
1515
toolbar.setTitle(R.string.settings)
1616

1717
parentFragmentManager.beginTransaction()

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.nekohasekai.sagernet.ui
22

33
import android.content.res.Configuration
4+
import android.os.Build
45
import android.os.Bundle
56
import android.widget.TextView
67
import androidx.annotation.StringRes
@@ -9,7 +10,7 @@ import androidx.core.app.ActivityCompat
910
import androidx.core.view.ViewCompat
1011
import androidx.core.view.WindowInsetsCompat
1112
import androidx.core.view.updatePadding
12-
import com.google.android.material.appbar.MaterialToolbar
13+
import com.google.android.material.appbar.AppBarLayout
1314
import com.google.android.material.snackbar.Snackbar
1415
import io.nekohasekai.sagernet.R
1516
import io.nekohasekai.sagernet.utils.Theme
@@ -34,11 +35,16 @@ abstract class ThemedActivity : AppCompatActivity {
3435

3536
uiMode = resources.configuration.uiMode
3637

37-
findViewById<MaterialToolbar>(R.id.toolbar)?.let {
38-
val appbarTopPadding = it.paddingTop
39-
40-
ViewCompat.setOnApplyWindowInsetsListener(it) { v, insets ->
41-
v.updatePadding(top = appbarTopPadding + insets.getInsets(WindowInsetsCompat.Type.systemBars()).top)
38+
if (Build.VERSION.SDK_INT >= 35) {
39+
ViewCompat.setOnApplyWindowInsetsListener(findViewById(android.R.id.content)) { _, insets ->
40+
val top = insets.getInsets(WindowInsetsCompat.Type.systemBars()).top
41+
findViewById<AppBarLayout>(R.id.appbar)?.apply {
42+
updatePadding(top = top)
43+
// Logs.w("appbar $top")
44+
}
45+
// findViewById<NavigationView>(R.id.nav_view)?.apply {
46+
// updatePadding(top = top)
47+
// }
4248
insets
4349
}
4450
}

0 commit comments

Comments
 (0)