diff --git a/app/src/main/res/layout/activity_kiwix_main.xml b/app/src/main/res/layout/activity_kiwix_main.xml index 9679f3981..111f83368 100644 --- a/app/src/main/res/layout/activity_kiwix_main.xml +++ b/app/src/main/res/layout/activity_kiwix_main.xml @@ -21,8 +21,7 @@ android:id="@+id/navigation_container" android:layout_width="match_parent" android:layout_height="match_parent" - android:contentDescription="@string/open_drawer" - android:fitsSystemWindows="true"> + android:contentDescription="@string/open_drawer"> @@ -62,7 +60,6 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="end" - android:fitsSystemWindows="true" app:headerLayout="@layout/drawer_right" /> diff --git a/app/src/main/res/layout/activity_language.xml b/app/src/main/res/layout/activity_language.xml index 00aed9c19..23bf4362b 100644 --- a/app/src/main/res/layout/activity_language.xml +++ b/app/src/main/res/layout/activity_language.xml @@ -1,24 +1,23 @@ + android:layout_width="match_parent" + android:layout_height="match_parent"> + app:layout_constraintTop_toBottomOf="@id/app_bar" + tools:listitem="@layout/item_language" /> diff --git a/app/src/main/res/layout/fragment_destination_library.xml b/app/src/main/res/layout/fragment_destination_library.xml index 31086b8dd..96a39dc76 100644 --- a/app/src/main/res/layout/fragment_destination_library.xml +++ b/app/src/main/res/layout/fragment_destination_library.xml @@ -21,8 +21,7 @@ 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" - android:fitsSystemWindows="true"> + android:layout_height="match_parent"> diff --git a/buildSrc/src/main/kotlin/Libs.kt b/buildSrc/src/main/kotlin/Libs.kt index 487895910..8de3a54d4 100644 --- a/buildSrc/src/main/kotlin/Libs.kt +++ b/buildSrc/src/main/kotlin/Libs.kt @@ -1,5 +1,3 @@ -import io.opencensus.trace.Tracing - /** * Generated by https://github.com/jmfayard/buildSrcVersions * @@ -308,6 +306,8 @@ object Libs { */ const val core_ktx: String = "androidx.core:core-ktx:" + Versions.core_ktx + const val androidx_activity: String = "androidx.activity:activity:" + Versions.androidx_activity + /** * https://github.com/kiwix/java-libkiwix */ diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index bced3b36c..c0cd580ed 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -90,6 +90,8 @@ object Versions { const val core_ktx: String = "1.15.0" + const val androidx_activity: String = "1.9.3" + const val libkiwix: String = "2.2.3" const val material: String = "1.12.0" diff --git a/buildSrc/src/main/kotlin/plugin/AllProjectConfigurer.kt b/buildSrc/src/main/kotlin/plugin/AllProjectConfigurer.kt index 13daa7d14..f6502a999 100644 --- a/buildSrc/src/main/kotlin/plugin/AllProjectConfigurer.kt +++ b/buildSrc/src/main/kotlin/plugin/AllProjectConfigurer.kt @@ -233,6 +233,7 @@ class AllProjectConfigurer { kapt(Libs.roomCompiler) implementation(Libs.tracing) implementation(Libs.fetchOkhttp) + implementation(Libs.androidx_activity) } } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/base/BaseActivity.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/base/BaseActivity.kt index 718f6476c..6b1484435 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/base/BaseActivity.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/base/BaseActivity.kt @@ -17,8 +17,13 @@ */ package org.kiwix.kiwixmobile.core.base +import android.graphics.Color +import android.os.Build import android.os.Bundle +import androidx.activity.SystemBarStyle +import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.changeStatusBarAndNavigationBarColorInAndroid15AndAbove import org.kiwix.kiwixmobile.core.utils.LanguageUtils import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import javax.inject.Inject @@ -29,7 +34,14 @@ open class BaseActivity : AppCompatActivity() { lateinit var sharedPreferenceUtil: SharedPreferenceUtil override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge( + statusBarStyle = SystemBarStyle.dark(Color.BLACK), + navigationBarStyle = SystemBarStyle.dark(Color.BLACK) + ) super.onCreate(savedInstanceState) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + changeStatusBarAndNavigationBarColorInAndroid15AndAbove() + } LanguageUtils.handleLocaleChange(this, sharedPreferenceUtil) } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/base/BaseFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/base/BaseFragment.kt index 77e18b557..4f6158936 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/base/BaseFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/base/BaseFragment.kt @@ -21,10 +21,14 @@ package org.kiwix.kiwixmobile.core.base import android.content.Context import android.os.Bundle import android.view.View +import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import org.kiwix.kiwixmobile.core.R +import org.kiwix.kiwixmobile.core.extensions.enableEdgeToEdgeMode import org.kiwix.kiwixmobile.core.extensions.getToolbarNavigationIcon import org.kiwix.kiwixmobile.core.extensions.setToolTipWithContentDescription @@ -46,7 +50,17 @@ abstract class BaseFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + enableEdgeToEdgeMode() setupToolbar() + this.view?.let { + ViewCompat.setOnApplyWindowInsetsListener(it) { view, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + val layoutParams = view.layoutParams as? ViewGroup.MarginLayoutParams + layoutParams?.topMargin = insets.top + view.layoutParams = layoutParams + WindowInsetsCompat.CONSUMED + } + } } // Setup toolbar to handle common back pressed event diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt index 7d4f2515c..f29d2d3c5 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt @@ -29,6 +29,8 @@ import android.os.Bundle import android.os.Environment import android.view.Menu import android.view.MenuItem +import android.view.WindowInsetsController +import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ActionMode import androidx.appcompat.widget.Toolbar @@ -199,4 +201,21 @@ object ActivityExtensions { val isWideEnough = configuration.smallestScreenWidthDp >= 600 return isLargeOrXLarge && isWideEnough } + + /** + * This method is for setting the statusBar color for Android 15 and above. + * Since in Android 15 the setStatusBarColor method is deprecated and not works anymore. + */ + @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) + fun Activity.changeStatusBarAndNavigationBarColorInAndroid15AndAbove() { + window?.apply { + // Set the white color to icon since the statusBar color is black. + decorView.windowInsetsController?.setSystemBarsAppearance( + 0, + WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS + ) + insetsController?.hide(android.view.WindowInsets.Type.statusBars()) + insetsController?.show(android.view.WindowInsets.Type.statusBars()) + } + } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/FragmentExtensions.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/FragmentExtensions.kt index 2f7dd640c..f0f692ecc 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/FragmentExtensions.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/FragmentExtensions.kt @@ -19,10 +19,12 @@ package org.kiwix.kiwixmobile.core.extensions import android.content.Context +import android.os.Build import android.view.View import android.view.inputmethod.InputMethodManager import android.widget.Toast import androidx.core.view.ViewCompat +import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModel @@ -55,3 +57,12 @@ fun View.closeKeyboard() { } val Fragment.coreMainActivity get() = activity as CoreMainActivity + +fun Fragment.enableEdgeToEdgeMode() { + activity?.window?.let { + WindowCompat.setDecorFitsSystemWindows( + it, + Build.VERSION.SDK_INT < Build.VERSION_CODES.Q + ) + } +} diff --git a/core/src/main/res/layout/drawer_right.xml b/core/src/main/res/layout/drawer_right.xml index e1170eccb..d2aa92e1a 100644 --- a/core/src/main/res/layout/drawer_right.xml +++ b/core/src/main/res/layout/drawer_right.xml @@ -4,5 +4,4 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" - android:fitsSystemWindows="true" android:focusable="true" /> diff --git a/core/src/main/res/layout/fragment_help.xml b/core/src/main/res/layout/fragment_help.xml index 158477da0..22f501d97 100644 --- a/core/src/main/res/layout/fragment_help.xml +++ b/core/src/main/res/layout/fragment_help.xml @@ -4,7 +4,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true" tools:context=".help.HelpFragment"> diff --git a/core/src/main/res/layout/fragment_page.xml b/core/src/main/res/layout/fragment_page.xml index 9a47dc529..59d7c4430 100644 --- a/core/src/main/res/layout/fragment_page.xml +++ b/core/src/main/res/layout/fragment_page.xml @@ -3,8 +3,7 @@ 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" - android:fitsSystemWindows="true"> + android:layout_height="match_parent"> + android:layout_height="match_parent"> diff --git a/core/src/main/res/layout/reader_fragment_content.xml b/core/src/main/res/layout/reader_fragment_content.xml index b6a0ed7bc..93053de0b 100644 --- a/core/src/main/res/layout/reader_fragment_content.xml +++ b/core/src/main/res/layout/reader_fragment_content.xml @@ -26,8 +26,7 @@ + android:layout_height="match_parent"> + android:layout_height="match_parent"> + android:layout_height="match_parent">