Improved the design of SwitchRow(TextView, and Switch).

* Fixed: The "No Bookmarks" text was not showing in the center of screen.
* Removed the unused code from project.
This commit is contained in:
MohitMaliFtechiz 2025-04-14 17:10:52 +05:30
parent b932dd0a04
commit c1441f1461
4 changed files with 44 additions and 68 deletions

View File

@ -34,14 +34,11 @@ import androidx.compose.runtime.referentialEqualityPolicy
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.RecyclerView
import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.CompositeDisposable
import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.R
import org.kiwix.kiwixmobile.core.base.BaseFragment import org.kiwix.kiwixmobile.core.base.BaseFragment
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions
import org.kiwix.kiwixmobile.core.databinding.FragmentPageBinding
import org.kiwix.kiwixmobile.core.downloader.downloadManager.ZERO import org.kiwix.kiwixmobile.core.downloader.downloadManager.ZERO
import org.kiwix.kiwixmobile.core.extensions.closeKeyboard
import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.main.CoreMainActivity
import org.kiwix.kiwixmobile.core.page.adapter.OnItemClickListener import org.kiwix.kiwixmobile.core.page.adapter.OnItemClickListener
import org.kiwix.kiwixmobile.core.page.adapter.Page import org.kiwix.kiwixmobile.core.page.adapter.Page
@ -54,7 +51,6 @@ import org.kiwix.kiwixmobile.core.ui.components.NavigationIcon
import org.kiwix.kiwixmobile.core.ui.models.ActionMenuItem import org.kiwix.kiwixmobile.core.ui.models.ActionMenuItem
import org.kiwix.kiwixmobile.core.ui.models.IconItem import org.kiwix.kiwixmobile.core.ui.models.IconItem
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
import org.kiwix.kiwixmobile.core.utils.SimpleRecyclerViewScrollListener
import javax.inject.Inject import javax.inject.Inject
const val SEARCH_ICON_TESTING_TAG = "search" const val SEARCH_ICON_TESTING_TAG = "search"
@ -106,7 +102,6 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
clearSearchButtonClickListener = {} clearSearchButtonClickListener = {}
) )
) )
private var fragmentPageBinding: FragmentPageBinding? = null
private val actionModeCallback: ActionMode.Callback = private val actionModeCallback: ActionMode.Callback =
object : ActionMode.Callback { object : ActionMode.Callback {
@ -150,14 +145,14 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
compositeDisposable.add(pageViewModel.effects.subscribe { it.invokeWith(activity) }) compositeDisposable.add(pageViewModel.effects.subscribe { it.invokeWith(activity) })
pageViewModel.state.observe(viewLifecycleOwner, Observer(::render)) pageViewModel.state.observe(viewLifecycleOwner, Observer(::render))
// hides keyboard when scrolled // // hides keyboard when scrolled
fragmentPageBinding?.recyclerView?.addOnScrollListener( // fragmentPageBinding?.recyclerView?.addOnScrollListener(
SimpleRecyclerViewScrollListener { _, newState -> // SimpleRecyclerViewScrollListener { _, newState ->
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) { // if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
fragmentPageBinding?.recyclerView?.closeKeyboard() // fragmentPageBinding?.recyclerView?.closeKeyboard()
} // }
} // }
) // )
} }
override fun onCreateView( override fun onCreateView(

View File

@ -20,9 +20,12 @@ package org.kiwix.kiwixmobile.core.page
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.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.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
@ -31,10 +34,12 @@ 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
import androidx.compose.material3.Switch import androidx.compose.material3.Switch
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.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextStyle
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.isCustomApp import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.isCustomApp
import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.main.CoreMainActivity
import org.kiwix.kiwixmobile.core.page.adapter.OnItemClickListener import org.kiwix.kiwixmobile.core.page.adapter.OnItemClickListener
@ -43,8 +48,13 @@ import org.kiwix.kiwixmobile.core.page.history.adapter.HistoryListItem.DateItem
import org.kiwix.kiwixmobile.core.ui.components.KiwixAppBar import org.kiwix.kiwixmobile.core.ui.components.KiwixAppBar
import org.kiwix.kiwixmobile.core.ui.components.KiwixSearchView import org.kiwix.kiwixmobile.core.ui.components.KiwixSearchView
import org.kiwix.kiwixmobile.core.ui.models.ActionMenuItem import org.kiwix.kiwixmobile.core.ui.models.ActionMenuItem
import org.kiwix.kiwixmobile.core.ui.theme.AlabasterWhite
import org.kiwix.kiwixmobile.core.ui.theme.Black import org.kiwix.kiwixmobile.core.ui.theme.Black
import org.kiwix.kiwixmobile.core.ui.theme.KiwixTheme import org.kiwix.kiwixmobile.core.ui.theme.KiwixTheme
import org.kiwix.kiwixmobile.core.ui.theme.White
import org.kiwix.kiwixmobile.core.utils.ComposeDimens.FOURTEEN_SP
import org.kiwix.kiwixmobile.core.utils.ComposeDimens.PAGE_SWITCH_LEFT_RIGHT_MARGIN
import org.kiwix.kiwixmobile.core.utils.ComposeDimens.PAGE_SWITCH_ROW_BOTTOM_MARGIN
import org.kiwix.kiwixmobile.core.utils.ComposeDimens.SIXTEEN_DP import org.kiwix.kiwixmobile.core.utils.ComposeDimens.SIXTEEN_DP
@Suppress("ComposableLambdaParameterNaming") @Suppress("ComposableLambdaParameterNaming")
@ -71,7 +81,11 @@ fun PageScreen(
} }
) { padding -> ) { padding ->
val items = state.pageState.pageItems val items = state.pageState.pageItems
Box(modifier = Modifier.padding(padding)) { Box(
modifier = Modifier
.padding(padding)
.fillMaxSize()
) {
if (items.isEmpty()) { if (items.isEmpty()) {
Text( Text(
text = state.noItemsString, text = state.noItemsString,
@ -114,20 +128,36 @@ private fun searchBarIfActive(
fun PageSwitchRow( fun PageSwitchRow(
state: PageFragmentScreenState state: PageFragmentScreenState
) { ) {
val switchTextColor = if (isSystemInDarkTheme()) {
AlabasterWhite
} else {
White
}
val context = LocalActivity.current as CoreMainActivity val context = LocalActivity.current as CoreMainActivity
// hide switches for custom apps, see more info here https://github.com/kiwix/kiwix-android/issues/3523 // hide switches for custom apps, see more info here https://github.com/kiwix/kiwix-android/issues/3523
if (!context.isCustomApp()) { if (!context.isCustomApp()) {
Row( Row(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.background(Black), .background(Black)
.padding(bottom = PAGE_SWITCH_ROW_BOTTOM_MARGIN),
horizontalArrangement = Arrangement.Absolute.Right,
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Text(state.switchString) Text(
state.switchString,
color = switchTextColor,
style = TextStyle(fontSize = FOURTEEN_SP)
)
Switch( Switch(
checked = state.switchIsChecked, checked = state.switchIsChecked,
onCheckedChange = { state.onSwitchCheckedChanged(it) }, onCheckedChange = { state.onSwitchCheckedChanged(it) },
enabled = state.switchIsEnabled enabled = state.switchIsEnabled,
modifier = Modifier
.padding(horizontal = PAGE_SWITCH_LEFT_RIGHT_MARGIN),
colors = SwitchDefaults.colors(
uncheckedTrackColor = White
)
) )
} }
} }

View File

@ -109,4 +109,6 @@ object ComposeDimens {
// Page dimens // Page dimens
val PAGE_LIST_ITEM_FAVICON_SIZE = 40.dp val PAGE_LIST_ITEM_FAVICON_SIZE = 40.dp
val PAGE_SWITCH_LEFT_RIGHT_MARGIN = 10.dp
val PAGE_SWITCH_ROW_BOTTOM_MARGIN = 8.dp
} }

View File

@ -1,51 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
app:popupTheme="@style/KiwixTheme"
tools:showIn="@layout/fragment_search" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/page_switch"
style="@style/switch_style" />
</com.google.android.material.appbar.AppBarLayout>
<TextView
android:id="@+id/no_page"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.KiwixTheme.Headline5"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/app_bar" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:clipToPadding="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/app_bar"
tools:listitem="@layout/item_bookmark_history" />
</androidx.constraintlayout.widget.ConstraintLayout>