Added support to hide the keyboard when scrolling the list, replicating the behavior from the XML-based implementation.

This commit is contained in:
MohitMaliFtechiz 2025-04-14 18:36:12 +05:30
parent 01a3838c6a
commit af94018285
2 changed files with 56 additions and 16 deletions

View File

@ -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) {

View File

@ -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