mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-08 06:42:21 -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 val disposable = CompositeDisposable()
|
||||||
private var permissionDeniedLayoutShowing = false
|
private var permissionDeniedLayoutShowing = false
|
||||||
private var zimFileUri: Uri? = null
|
private var zimFileUri: Uri? = null
|
||||||
val libraryScreenState = mutableStateOf(
|
private val libraryScreenState = mutableStateOf(
|
||||||
LocalLibraryScreenState(
|
LocalLibraryScreenState(
|
||||||
fileSelectListState = FileSelectListState(emptyList()),
|
fileSelectListState = FileSelectListState(emptyList()),
|
||||||
snackBarHostState = SnackbarHostState(),
|
snackBarHostState = SnackbarHostState(),
|
||||||
@ -156,13 +156,15 @@ class LocalLibraryFragment : BaseFragment(), CopyMoveFileHandler.FileCopyMoveCal
|
|||||||
val isGranted = permissionResult.values.all { it }
|
val isGranted = permissionResult.values.all { it }
|
||||||
val isPermanentlyDenied = readStorageHasBeenPermanentlyDenied(isGranted)
|
val isPermanentlyDenied = readStorageHasBeenPermanentlyDenied(isGranted)
|
||||||
permissionDeniedLayoutShowing = isPermanentlyDenied
|
permissionDeniedLayoutShowing = isPermanentlyDenied
|
||||||
updateLibraryScreenState(
|
if (permissionDeniedLayoutShowing) {
|
||||||
noFilesViewItem = Triple(
|
updateLibraryScreenState(
|
||||||
requireActivity().resources.getString(string.grant_read_storage_permission),
|
noFilesViewItem = Triple(
|
||||||
requireActivity().resources.getString(string.go_to_settings_label),
|
requireActivity().resources.getString(string.grant_read_storage_permission),
|
||||||
isPermanentlyDenied
|
requireActivity().resources.getString(string.go_to_settings_label),
|
||||||
|
true
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun inject(baseActivity: BaseActivity) {
|
override fun inject(baseActivity: BaseActivity) {
|
||||||
|
@ -18,6 +18,9 @@
|
|||||||
|
|
||||||
package org.kiwix.kiwixmobile.core.page
|
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.activity.compose.LocalActivity
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
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.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
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.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
@ -37,8 +43,12 @@ import androidx.compose.material3.Switch
|
|||||||
import androidx.compose.material3.SwitchDefaults
|
import androidx.compose.material3.SwitchDefaults
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.snapshotFlow
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
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.res.stringResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
import org.kiwix.kiwixmobile.core.R
|
import org.kiwix.kiwixmobile.core.R
|
||||||
@ -88,7 +98,11 @@ fun PageScreen(
|
|||||||
val items = state.pageState.pageItems
|
val items = state.pageState.pageItems
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(padding)
|
.padding(
|
||||||
|
top = padding.calculateTopPadding(),
|
||||||
|
start = padding.calculateStartPadding(LocalLayoutDirection.current),
|
||||||
|
end = padding.calculateEndPadding(LocalLayoutDirection.current)
|
||||||
|
)
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
) {
|
) {
|
||||||
if (items.isEmpty()) {
|
if (items.isEmpty()) {
|
||||||
@ -98,20 +112,44 @@ fun PageScreen(
|
|||||||
modifier = Modifier.align(Alignment.Center)
|
modifier = Modifier.align(Alignment.Center)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
LazyColumn {
|
PageList(
|
||||||
items(state.pageState.visiblePageItems) { item ->
|
state = state,
|
||||||
when (item) {
|
itemClickListener = itemClickListener
|
||||||
is Page -> PageListItem(page = item, itemClickListener = itemClickListener)
|
)
|
||||||
is DateItem -> DateItemText(item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Composable
|
||||||
private fun searchBarIfActive(
|
private fun searchBarIfActive(
|
||||||
state: PageFragmentScreenState
|
state: PageFragmentScreenState
|
||||||
|
Loading…
x
Reference in New Issue
Block a user