diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/local/LocalLibraryFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/local/LocalLibraryFragment.kt index d2813c15d..94feb8c22 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/local/LocalLibraryFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/local/LocalLibraryFragment.kt @@ -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) { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageScreen.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageScreen.kt index 3d776f6e9..139c0ee36 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageScreen.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageScreen.kt @@ -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