mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 10:46:53 -04:00
Added support to hide the keyboard when scrolling the list, replicating the behavior from the XML-based implementation.
This commit is contained in:
parent
01a3838c6a
commit
af94018285
@ -133,7 +133,7 @@ class LocalLibraryFragment : BaseFragment(), CopyMoveFileHandler.FileCopyMoveCal
|
||||
private val disposable = CompositeDisposable()
|
||||
private var permissionDeniedLayoutShowing = false
|
||||
private var zimFileUri: Uri? = null
|
||||
val libraryScreenState = mutableStateOf(
|
||||
private val libraryScreenState = mutableStateOf(
|
||||
LocalLibraryScreenState(
|
||||
fileSelectListState = FileSelectListState(emptyList()),
|
||||
snackBarHostState = SnackbarHostState(),
|
||||
@ -156,13 +156,15 @@ class LocalLibraryFragment : BaseFragment(), CopyMoveFileHandler.FileCopyMoveCal
|
||||
val isGranted = permissionResult.values.all { it }
|
||||
val isPermanentlyDenied = readStorageHasBeenPermanentlyDenied(isGranted)
|
||||
permissionDeniedLayoutShowing = isPermanentlyDenied
|
||||
updateLibraryScreenState(
|
||||
noFilesViewItem = Triple(
|
||||
requireActivity().resources.getString(string.grant_read_storage_permission),
|
||||
requireActivity().resources.getString(string.go_to_settings_label),
|
||||
isPermanentlyDenied
|
||||
if (permissionDeniedLayoutShowing) {
|
||||
updateLibraryScreenState(
|
||||
noFilesViewItem = Triple(
|
||||
requireActivity().resources.getString(string.grant_read_storage_permission),
|
||||
requireActivity().resources.getString(string.go_to_settings_label),
|
||||
true
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun inject(baseActivity: BaseActivity) {
|
||||
|
@ -18,6 +18,9 @@
|
||||
|
||||
package org.kiwix.kiwixmobile.core.page
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import androidx.activity.compose.LocalActivity
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
@ -25,11 +28,14 @@ import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.calculateEndPadding
|
||||
import androidx.compose.foundation.layout.calculateStartPadding
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Scaffold
|
||||
@ -37,8 +43,12 @@ import androidx.compose.material3.Switch
|
||||
import androidx.compose.material3.SwitchDefaults
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import org.kiwix.kiwixmobile.core.R
|
||||
@ -88,7 +98,11 @@ fun PageScreen(
|
||||
val items = state.pageState.pageItems
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.padding(padding)
|
||||
.padding(
|
||||
top = padding.calculateTopPadding(),
|
||||
start = padding.calculateStartPadding(LocalLayoutDirection.current),
|
||||
end = padding.calculateEndPadding(LocalLayoutDirection.current)
|
||||
)
|
||||
.fillMaxSize()
|
||||
) {
|
||||
if (items.isEmpty()) {
|
||||
@ -98,20 +112,44 @@ fun PageScreen(
|
||||
modifier = Modifier.align(Alignment.Center)
|
||||
)
|
||||
} else {
|
||||
LazyColumn {
|
||||
items(state.pageState.visiblePageItems) { item ->
|
||||
when (item) {
|
||||
is Page -> PageListItem(page = item, itemClickListener = itemClickListener)
|
||||
is DateItem -> DateItemText(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
PageList(
|
||||
state = state,
|
||||
itemClickListener = itemClickListener
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun PageList(
|
||||
state: PageFragmentScreenState,
|
||||
itemClickListener: OnItemClickListener
|
||||
) {
|
||||
val listState = rememberLazyListState()
|
||||
val context = LocalContext.current
|
||||
|
||||
LaunchedEffect(listState) {
|
||||
snapshotFlow { listState.isScrollInProgress }
|
||||
.collect { isScrolling ->
|
||||
if (isScrolling) {
|
||||
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||
imm.hideSoftInputFromWindow((context as? Activity)?.currentFocus?.windowToken, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LazyColumn(state = listState) {
|
||||
items(state.pageState.visiblePageItems) { item ->
|
||||
when (item) {
|
||||
is Page -> PageListItem(page = item, itemClickListener = itemClickListener)
|
||||
is DateItem -> DateItemText(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun searchBarIfActive(
|
||||
state: PageFragmentScreenState
|
||||
|
Loading…
x
Reference in New Issue
Block a user