Skip to content

Commit cebc75e

Browse files
Update UI
1 parent 0916b36 commit cebc75e

5 files changed

Lines changed: 129 additions & 15 deletions

File tree

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import io.nekohasekai.sagernet.widget.ListListener
3030
import libcore.Libcore
3131
import moe.matsuri.nb4a.plugin.Plugins
3232
import androidx.core.net.toUri
33+
import com.google.android.material.appbar.CollapsingToolbarLayout
3334
import com.google.android.material.dialog.MaterialAlertDialogBuilder
3435
import io.nekohasekai.sagernet.SagerNet
3536
import io.nekohasekai.sagernet.database.DataStore
@@ -42,9 +43,10 @@ class AboutFragment : ToolbarFragment(R.layout.layout_about) {
4243
super.onViewCreated(view, savedInstanceState)
4344

4445
val binding = LayoutAboutBinding.bind(view)
46+
val collapsingToolbar = view.findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar)
4547

4648
ViewCompat.setOnApplyWindowInsetsListener(view, ListListener)
47-
toolbar.setTitle(R.string.menu_about)
49+
collapsingToolbar.title = getString(R.string.menu_about)
4850

4951
parentFragmentManager.beginTransaction()
5052
.replace(R.id.about_fragment_holder, AboutContent())

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@ import io.nekohasekai.sagernet.widget.ListListener
3131
import io.nekohasekai.sagernet.widget.OutboundPreference
3232
import kotlinx.parcelize.Parcelize
3333
import com.takisoft.preferencex.SimpleMenuPreference
34+
import com.google.android.material.appbar.CollapsingToolbarLayout
3435

3536
@Suppress("UNCHECKED_CAST")
3637
class GroupSettingsActivity(
37-
@LayoutRes resId: Int = R.layout.layout_config_settings,
38+
@LayoutRes resId: Int = R.layout.uwu_collapse_layout,
3839
) : ThemedActivity(resId),
3940
OnPreferenceDataStoreChangeListener {
4041

@@ -199,9 +200,13 @@ class GroupSettingsActivity(
199200
@SuppressLint("CommitTransaction")
200201
override fun onCreate(savedInstanceState: Bundle?) {
201202
super.onCreate(savedInstanceState)
203+
202204
setSupportActionBar(findViewById(R.id.toolbar))
205+
val collapsingToolbar =
206+
findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar)
207+
collapsingToolbar.title = getString(R.string.group_settings)
208+
203209
supportActionBar?.apply {
204-
setTitle(R.string.group_settings)
205210
setDisplayHomeAsUpEnabled(true)
206211
setHomeAsUpIndicator(R.drawable.ic_navigation_close)
207212
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@ import io.nekohasekai.sagernet.widget.ListListener
4040
import io.nekohasekai.sagernet.widget.OutboundPreference
4141
import kotlinx.parcelize.Parcelize
4242
import moe.matsuri.nb4a.ui.EditConfigPreference
43+
import com.google.android.material.appbar.CollapsingToolbarLayout
4344

4445
@Suppress("UNCHECKED_CAST")
4546
class RouteSettingsActivity(
46-
@LayoutRes resId: Int = R.layout.layout_settings_activity,
47+
@LayoutRes resId: Int = R.layout.uwu_collapse_layout_list,
4748
) : ThemedActivity(resId),
4849
OnPreferenceDataStoreChangeListener {
4950

@@ -215,9 +216,13 @@ class RouteSettingsActivity(
215216

216217
override fun onCreate(savedInstanceState: Bundle?) {
217218
super.onCreate(savedInstanceState)
219+
218220
setSupportActionBar(findViewById(R.id.toolbar))
221+
val collapsingToolbar =
222+
findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar)
223+
collapsingToolbar.title = getString(R.string.cag_route)
224+
219225
supportActionBar?.apply {
220-
setTitle(R.string.cag_route)
221226
setDisplayHomeAsUpEnabled(true)
222227
setHomeAsUpIndicator(R.drawable.ic_navigation_close)
223228
}
@@ -391,4 +396,4 @@ class RouteSettingsActivity(
391396

392397
}
393398

394-
}
399+
}

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

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,71 @@ package io.nekohasekai.sagernet.ui
33
import android.os.Bundle
44
import android.view.View
55
import androidx.core.view.ViewCompat
6+
import androidx.recyclerview.widget.RecyclerView
7+
import com.google.android.material.appbar.CollapsingToolbarLayout
68
import io.nekohasekai.sagernet.R
9+
import io.nekohasekai.sagernet.bg.BaseService
10+
import io.nekohasekai.sagernet.database.DataStore
711
import io.nekohasekai.sagernet.widget.ListListener
12+
import io.nekohasekai.sagernet.widget.StatsBar
813

9-
class SettingsFragment : ToolbarFragment(R.layout.layout_config_settings) {
14+
class SettingsFragment : ToolbarFragment(R.layout.uwu_collapse_layout) {
1015

1116
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1217
super.onViewCreated(view, savedInstanceState)
1318

1419
ViewCompat.setOnApplyWindowInsetsListener(view, ListListener)
15-
toolbar.setTitle(R.string.settings)
1620

21+
val collapsingToolbar =
22+
view.findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar)
23+
collapsingToolbar.title = getString(R.string.settings)
24+
25+
val fragment = SettingsPreferenceFragment()
1726
parentFragmentManager.beginTransaction()
18-
.replace(R.id.settings, SettingsPreferenceFragment())
27+
.replace(R.id.settings, fragment)
1928
.commitAllowingStateLoss()
20-
}
2129

30+
view.post {
31+
val prefFragment = childFragmentManager.findFragmentById(R.id.settings)
32+
as? SettingsPreferenceFragment ?: fragment
33+
34+
val prefRecycler = prefFragment.listView
35+
val bottomAppBar = requireActivity().findViewById<StatsBar>(R.id.stats)
36+
?: return@post
37+
38+
fun updateBottomBarVisibility() {
39+
val isConnected = DataStore.serviceState == BaseService.State.Connected
40+
val showController = DataStore.showBottomBar
41+
42+
if (!isConnected) {
43+
bottomAppBar.performHide()
44+
} else {
45+
if (showController) bottomAppBar.performShow()
46+
else bottomAppBar.performHide()
47+
}
48+
}
49+
50+
updateBottomBarVisibility()
51+
52+
if (prefRecycler != null) {
53+
ViewCompat.setNestedScrollingEnabled(prefRecycler, true)
54+
55+
prefRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() {
56+
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
57+
super.onScrolled(recyclerView, dx, dy)
58+
59+
val isConnected = DataStore.serviceState == BaseService.State.Connected
60+
val showController = DataStore.showBottomBar
61+
62+
if (isConnected && showController) {
63+
if (dy > 6) bottomAppBar.performHide()
64+
else if (dy < -6) bottomAppBar.performShow()
65+
} else {
66+
bottomAppBar.performHide()
67+
}
68+
}
69+
})
70+
}
71+
}
72+
}
2273
}

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

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,71 @@ package io.nekohasekai.sagernet.ui
33
import android.os.Bundle
44
import android.view.View
55
import androidx.core.view.ViewCompat
6+
import androidx.recyclerview.widget.RecyclerView
7+
import com.google.android.material.appbar.CollapsingToolbarLayout
68
import io.nekohasekai.sagernet.R
9+
import io.nekohasekai.sagernet.bg.BaseService
10+
import io.nekohasekai.sagernet.database.DataStore
711
import io.nekohasekai.sagernet.widget.ListListener
12+
import io.nekohasekai.sagernet.widget.StatsBar
813

9-
class ThemeSettingsFragment : ToolbarFragment(R.layout.layout_config_settings) {
14+
class ThemeSettingsFragment : ToolbarFragment(R.layout.uwu_collapse_layout) {
1015

1116
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1217
super.onViewCreated(view, savedInstanceState)
1318

1419
ViewCompat.setOnApplyWindowInsetsListener(view, ListListener)
15-
toolbar.setTitle(R.string.uwu_theme_settings_title)
1620

21+
val collapsingToolbar =
22+
view.findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar)
23+
collapsingToolbar.title = getString(R.string.uwu_theme_settings_title)
24+
25+
val fragment = ThemeSettingsPreferenceFragment()
1726
parentFragmentManager.beginTransaction()
18-
.replace(R.id.settings, ThemeSettingsPreferenceFragment())
27+
.replace(R.id.settings, fragment)
1928
.commitAllowingStateLoss()
20-
}
2129

22-
}
30+
view.post {
31+
val prefFragment = childFragmentManager.findFragmentById(R.id.settings)
32+
as? ThemeSettingsPreferenceFragment ?: fragment
33+
34+
val prefRecycler = prefFragment.listView
35+
val bottomAppBar = requireActivity().findViewById<StatsBar>(R.id.stats)
36+
?: return@post
37+
38+
fun updateBottomBarVisibility() {
39+
val isConnected = DataStore.serviceState == BaseService.State.Connected
40+
val showController = DataStore.showBottomBar
41+
42+
if (!isConnected) {
43+
bottomAppBar.performHide()
44+
} else {
45+
if (showController) bottomAppBar.performShow()
46+
else bottomAppBar.performHide()
47+
}
48+
}
49+
50+
updateBottomBarVisibility()
51+
52+
if (prefRecycler != null) {
53+
ViewCompat.setNestedScrollingEnabled(prefRecycler, true)
54+
55+
prefRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() {
56+
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
57+
super.onScrolled(recyclerView, dx, dy)
58+
59+
val isConnected = DataStore.serviceState == BaseService.State.Connected
60+
val showController = DataStore.showBottomBar
61+
62+
if (isConnected && showController) {
63+
if (dy > 6) bottomAppBar.performHide()
64+
else if (dy < -6) bottomAppBar.performShow()
65+
} else {
66+
bottomAppBar.performHide()
67+
}
68+
}
69+
})
70+
}
71+
}
72+
}
73+
}

0 commit comments

Comments
 (0)