diff --git a/app/src/main/java/org/kiwix/kiwixmobile/webserver/ZimHostFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/webserver/ZimHostFragment.kt index 5c776c8d9..83dd58b85 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/webserver/ZimHostFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/webserver/ZimHostFragment.kt @@ -38,7 +38,7 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.annotation.RequiresApi -import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.Toolbar import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import org.kiwix.kiwixmobile.R @@ -89,6 +89,12 @@ class ZimHostFragment : BaseFragment(), ZimHostCallbacks, ZimHostContract.View { private lateinit var serviceConnection: ServiceConnection private var dialog: Dialog? = null private var activityZimHostBinding: ActivityZimHostBinding? = null + override val fragmentTitle: String? by lazy { + getString(R.string.menu_wifi_hotspot) + } + override val fragmentToolbar: Toolbar? by lazy { + activityZimHostBinding?.root?.findViewById(R.id.toolbar) + } private val selectedBooksPath: ArrayList get() { return booksAdapter.items @@ -122,7 +128,6 @@ class ZimHostFragment : BaseFragment(), ZimHostCallbacks, ZimHostContract.View { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setUpToolbar(view) bookDelegate = BookOnDiskDelegate.BookDelegate(sharedPreferenceUtil, multiSelectAction = ::select) @@ -389,16 +394,6 @@ class ZimHostFragment : BaseFragment(), ZimHostCallbacks, ZimHostContract.View { activityZimHostBinding = null } - private fun setUpToolbar(view: View) { - val activity = requireActivity() as AppCompatActivity - activity.setSupportActionBar(view.findViewById(R.id.toolbar)) - activity.supportActionBar?.apply { - title = getString(R.string.menu_wifi_hotspot) - setHomeButtonEnabled(true) - setDisplayHomeAsUpEnabled(true) - } - } - // Advice user to turn on hotspot manually for API<26 private fun startHotspotManuallyDialog() { 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 38c12b965..7a476206f 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 @@ -19,6 +19,10 @@ package org.kiwix.kiwixmobile.core.base import android.content.Context +import android.os.Bundle +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.Toolbar import androidx.fragment.app.Fragment /** @@ -27,10 +31,35 @@ import androidx.fragment.app.Fragment abstract class BaseFragment : Fragment() { + open val fragmentToolbar: Toolbar? = null + open val fragmentTitle: String? = null + override fun onAttach(context: Context) { super.onAttach(context) inject(activity as BaseActivity) } abstract fun inject(baseActivity: BaseActivity) + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupToolbar() + } + + // Setup toolbar to handle common back pressed event + private fun setupToolbar() { + val activity = activity as AppCompatActivity? + fragmentToolbar?.apply { + activity?.let { + it.setSupportActionBar(this) + it.supportActionBar?.let { actionBar -> + actionBar.setDisplayHomeAsUpEnabled(true) + title = fragmentTitle + } + } + setNavigationOnClickListener { + activity?.onBackPressedDispatcher?.onBackPressed() + } + } + } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/help/HelpFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/help/HelpFragment.kt index 1ee170491..6a04a5104 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/help/HelpFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/help/HelpFragment.kt @@ -43,6 +43,10 @@ import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.getCurrentLocale abstract class HelpFragment : BaseFragment() { private var fragmentHelpBinding: FragmentHelpBinding? = null protected open fun rawTitleDescriptionMap(): List> = emptyList() + override val fragmentToolbar: Toolbar? by lazy { + fragmentHelpBinding?.root?.findViewById(R.id.toolbar) + } + override val fragmentTitle: String? by lazy { getString(R.string.menu_help) } private val titleDescriptionMap by lazy { rawTitleDescriptionMap().associate { (title, description) -> @@ -61,15 +65,6 @@ abstract class HelpFragment : BaseFragment() { fragmentHelpBinding?.activityHelpFeedbackTextView?.setOnClickListener { sendFeedback() } fragmentHelpBinding?.activityHelpFeedbackImageView?.setOnClickListener { sendFeedback() } fragmentHelpBinding?.diagnosticClickableArea?.setOnClickListener { sendDiagnosticReport() } - val toolbar: Toolbar? = fragmentHelpBinding?.root?.findViewById(R.id.toolbar) - toolbar?.apply { - activity.setSupportActionBar(this) - setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() } - } - activity.supportActionBar?.let { - it.setDisplayHomeAsUpEnabled(true) - it.setTitle(R.string.menu_help) - } fragmentHelpBinding?.activityHelpRecyclerView?.addItemDecoration( DividerItemDecoration(activity, DividerItemDecoration.VERTICAL) ) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt index e6e33ca04..fe4aee34c 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt @@ -69,6 +69,10 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv abstract val pageAdapter: PageAdapter abstract val switchIsChecked: Boolean private var fragmentPageBinding: FragmentPageBinding? = null + override val fragmentToolbar: Toolbar? by lazy { + fragmentPageBinding?.root?.findViewById(R.id.toolbar) + } + override val fragmentTitle: String? by lazy { screenTitle } private val actionModeCallback: ActionMode.Callback = object : ActionMode.Callback { @@ -135,15 +139,6 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv fragmentPageBinding?.recyclerView?.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false) fragmentPageBinding?.recyclerView?.adapter = pageAdapter - val toolbar = fragmentPageBinding?.root?.findViewById(R.id.toolbar) - toolbar?.apply { - activity.setSupportActionBar(this) - setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() } - } - activity.supportActionBar?.apply { - setDisplayHomeAsUpEnabled(true) - title = screenTitle - } fragmentPageBinding?.noPage?.text = noItemsString fragmentPageBinding?.pageSwitch?.text = switchString diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CoreSettingsFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CoreSettingsFragment.kt index ca610ca17..579499e3f 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CoreSettingsFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CoreSettingsFragment.kt @@ -21,7 +21,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.fragment.app.Fragment import org.kiwix.kiwixmobile.core.R @@ -31,12 +30,18 @@ import org.kiwix.kiwixmobile.core.databinding.SettingsBinding abstract class CoreSettingsFragment : BaseFragment() { private lateinit var prefsFragment: Fragment private var settingsBinding: SettingsBinding? = null + override val fragmentToolbar: Toolbar? by lazy { + settingsBinding?.root?.findViewById(R.id.toolbar) + } + override val fragmentTitle: String? by lazy { + getString(R.string.menu_settings) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) prefsFragment = createPreferenceFragment() requireActivity().supportFragmentManager.beginTransaction() .replace(R.id.content_frame, prefsFragment).commit() - setUpToolbar() } override fun onCreateView( @@ -50,21 +55,6 @@ abstract class CoreSettingsFragment : BaseFragment() { protected abstract fun createPreferenceFragment(): Fragment - private fun setUpToolbar() { - val activity = requireActivity() as AppCompatActivity - settingsBinding?.root?.findViewById(R.id.toolbar)?.apply { - activity.setSupportActionBar(this) - setNavigationOnClickListener { - requireActivity().onBackPressedDispatcher.onBackPressed() - } - } - activity.supportActionBar?.apply { - title = getString(R.string.menu_settings) - setHomeButtonEnabled(true) - setDisplayHomeAsUpEnabled(true) - } - } - override fun onDestroyView() { requireActivity().supportFragmentManager.beginTransaction().remove(prefsFragment) .commitNowAllowingStateLoss()