Skip to content

Commit 85b1c21

Browse files
committed
feature: predictive back gesture
1 parent 80d14aa commit 85b1c21

File tree

6 files changed

+18
-19
lines changed

6 files changed

+18
-19
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ dependencies {
114114
implementation(project(Modules.utils))
115115
implementation(project(Modules.design))
116116

117+
implementation(AndroidX.activity)
117118
implementation(AndroidX.splashScreen)
118119
implementation(AndroidX.lifecycleLiveData)
119120
implementation(AndroidX.lifecycleRuntimeCompose)

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
android:roundIcon="@mipmap/ic_launcher_round"
1616
android:supportsRtl="true"
1717
android:theme="@style/AppTheme"
18+
android:enableOnBackInvokedCallback="true"
1819
tools:ignore="GoogleAppIndexingWarning">
1920

2021
<activity

app/src/main/kotlin/com/androidvip/sysctlgui/ui/params/browse/KernelParamBrowseFragment.kt

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import androidx.compose.material.pullrefresh.rememberPullRefreshState
2626
import androidx.compose.material3.Divider
2727
import androidx.compose.material3.MaterialTheme
2828
import androidx.compose.runtime.Composable
29+
import androidx.compose.runtime.SideEffect
2930
import androidx.compose.runtime.getValue
3031
import androidx.compose.ui.Alignment
3132
import androidx.compose.ui.Modifier
@@ -55,6 +56,16 @@ import org.koin.android.ext.android.inject
5556
class KernelParamBrowseFragment : BaseSearchFragment(), OnParamItemClickedListener {
5657
private var actionBarMenu: Menu? = null
5758
private val viewModel: BrowseParamsViewModel by inject()
59+
private val currentPath: String get() = viewModel.currentState.currentPath
60+
private val canGoBack: Boolean get() = currentPath != Consts.PROC_SYS
61+
62+
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
63+
override fun handleOnBackPressed() {
64+
if (canGoBack) {
65+
onDirectoryChanged(File(currentPath).parentFile ?: File(Consts.PROC_SYS))
66+
}
67+
}
68+
}
5869

5970
@OptIn(ExperimentalMaterialApi::class)
6071
override fun onCreateView(
@@ -91,6 +102,8 @@ class KernelParamBrowseFragment : BaseSearchFragment(), OnParamItemClickedListen
91102
contentColor = MaterialTheme.colorScheme.onTertiaryContainer
92103
)
93104
}
105+
106+
SideEffect { onBackPressedCallback.isEnabled = canGoBack }
94107
}
95108
}
96109
}
@@ -104,24 +117,7 @@ class KernelParamBrowseFragment : BaseSearchFragment(), OnParamItemClickedListen
104117
viewModel.effect.collect(::handleViewEffect)
105118
}
106119

107-
requireActivity().onBackPressedDispatcher.addCallback(
108-
viewLifecycleOwner,
109-
object : OnBackPressedCallback(true) {
110-
override fun handleOnBackPressed() {
111-
val currentPath = viewModel.currentState.currentPath
112-
if (currentPath == Consts.PROC_SYS) {
113-
if (isEnabled) {
114-
isEnabled = false
115-
requireActivity().onBackPressedDispatcher.onBackPressed()
116-
}
117-
} else {
118-
onDirectoryChanged(
119-
File(currentPath).parentFile ?: File(Consts.PROC_SYS)
120-
)
121-
}
122-
}
123-
}
124-
)
120+
requireActivity().onBackPressedDispatcher.addCallback(onBackPressedCallback)
125121
}
126122

127123
override fun onStart() {

app/src/main/kotlin/com/androidvip/sysctlgui/ui/start/StartActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import org.koin.android.ext.android.inject
2727

2828
class StartActivity : BaseAppCompatActivity() {
2929
private lateinit var binding: ActivitySplashBinding
30-
private val prefs: AppPrefs by inject()
3130
private val rootUtils: RootUtils by inject()
3231
private val performDatabaseMigrationUseCase: PerformDatabaseMigrationUseCase by inject()
3332
private val dispatcher: CoroutineDispatcher by lazy { Dispatchers.Default }

buildSrc/src/main/kotlin/AndroidX.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
object AndroidX {
2+
const val activity = "androidx.activity:activity-ktx:1.7.2"
23
const val appCompat = "androidx.appcompat:appcompat:1.6.1"
34
const val constraintLayout = "androidx.constraintlayout:constraintlayout:2.1.4"
45
const val core = "androidx.core:core-ktx:1.10.1"

common/design/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ dependencies {
4949
api(composeBom)
5050
androidTestImplementation(composeBom)
5151

52+
api(AndroidX.activity)
5253
api(AndroidX.appCompat)
5354
api(AndroidX.constraintLayout)
5455
api(AndroidX.core)

0 commit comments

Comments
 (0)