From 33a4abb2e22749ad83fd62f6020fb3ce9b89ba99 Mon Sep 17 00:00:00 2001 From: HissPirat Date: Wed, 5 Aug 2020 14:05:33 +0200 Subject: [PATCH] #2238 actionbars now works but memory leaks might be active again. --- .../library/LocalLibraryFragment.kt | 12 ++++---- .../library/OnlineLibraryFragment.kt | 5 ---- .../destination/reader/KiwixReaderFragment.kt | 5 ---- .../kiwixmobile/core/main/CoreMainActivity.kt | 15 ++++++++++ .../core/main/CoreReaderFragment.java | 2 -- .../kiwixmobile/core/page/PageFragment.kt | 28 ++++++++++++------- .../core/page/bookmark/BookmarksFragment.kt | 4 ++- .../core/page/history/HistoryFragment.kt | 3 +- 8 files changed, 44 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt index 4a04840df..f89a5359f 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt @@ -60,11 +60,6 @@ class LocalLibraryFragment : ZimFileSelectFragment() { (baseActivity as KiwixMainActivity).cachedComponent.inject(this) } - override fun onDestroyView() { - super.onDestroyView() - (activity as AppCompatActivity).setSupportActionBar(null) - } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.menu_zim_manager, menu) val searchItem = menu.findItem(R.id.action_search) @@ -88,7 +83,6 @@ class LocalLibraryFragment : ZimFileSelectFragment() { ): View? { LanguageUtils(requireActivity()) .changeFont(requireActivity().layoutInflater, sharedPreferenceUtil) - setHasOptionsMenu(true) val root = inflater.inflate(R.layout.fragment_destination_library, container, false) val toolbar = root.findViewById(R.id.toolbar) val activity = activity as CoreMainActivity @@ -98,9 +92,15 @@ class LocalLibraryFragment : ZimFileSelectFragment() { setTitle(R.string.library) } activity.setupDrawerToggle(toolbar) + setHasOptionsMenu(true) return root } + override fun onDestroyView() { + super.onDestroyView() + (activity as AppCompatActivity).setSupportActionBar(null) + } + override fun render(state: FileSelectListState) { super.render(state) val items = state.bookOnDiskListItems diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt index cfb08d98a..9cc81edbe 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt @@ -57,11 +57,6 @@ class OnlineLibraryFragment : LibraryFragment(), FragmentActivityExtensions { zimManageViewModel.requestFiltering.onNext("") } - override fun onDestroyView() { - super.onDestroyView() - (activity as AppCompatActivity).setSupportActionBar(null) - } - override fun onBackPressed(activity: AppCompatActivity): FragmentActivityExtensions.Super { getActivity()?.finish() return FragmentActivityExtensions.Super.ShouldNotCall diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt index 43a7c7c86..d856c3a21 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt @@ -258,11 +258,6 @@ class KiwixReaderFragment : CoreReaderFragment() { ) } - override fun onDestroyView() { - super.onDestroyView() - (activity as AppCompatActivity).setSupportActionBar(null) - } - override fun openFullScreen() { super.openFullScreen() requireActivity().bottom_nav_view.visibility = GONE diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt index 9a481560f..db38e3234 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.kt @@ -20,6 +20,7 @@ package org.kiwix.kiwixmobile.core.main import android.content.Intent import android.os.Bundle import android.view.ActionMode +import android.view.Menu import android.view.MenuItem import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.widget.Toolbar @@ -159,6 +160,20 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider { } } + override fun onCreateOptionsMenu(menu: Menu): Boolean { + + if (activeFragments().filterIsInstance().isEmpty()) { + return super.onCreateOptionsMenu(menu) + } + var returnValue = true + activeFragments().filterIsInstance().forEach { + if (it.onCreateOptionsMenu(menu, this) == FragmentActivityExtensions.Super.ShouldCall) { + returnValue = super.onCreateOptionsMenu(menu) + } + } + return returnValue + } + private fun activeFragments(): MutableList = supportFragmentManager.fragments diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java index 5a9ff583b..b1ddbc3d6 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java @@ -788,11 +788,9 @@ public abstract class CoreReaderFragment extends BaseFragment @Override public void onDestroyView() { super.onDestroyView(); safeDispose(); - super.onDestroy(); tabCallback = null; hideBackToTopTimer.cancel(); hideBackToTopTimer = null; - webViewList.clear(); // TODO create a base Activity class that class this. FileUtils.deleteCachedFiles(getActivity()); tts.shutdown(); 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 721ada1de..8665d4fb0 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 @@ -90,6 +90,21 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv } } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val activity = requireActivity() as CoreMainActivity + activity.setSupportActionBar(toolbar) + activity.supportActionBar?.apply { + setDisplayHomeAsUpEnabled(true) + title = title + } + } + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.menu_page, menu) val search = menu.findItem(R.id.menu_page_search).actionView as SearchView @@ -97,7 +112,7 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv search.setOnQueryTextListener(SimpleTextListener { pageViewModel.actions.offer(Action.Filter(it)) }) - pageViewModel.state.observe(viewLifecycleOwner, Observer(::render)) + super.onCreateOptionsMenu(menu, inflater) } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -113,11 +128,6 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) val activity = requireActivity() as CoreMainActivity - activity.setSupportActionBar(toolbar) - activity.supportActionBar?.apply { - setDisplayHomeAsUpEnabled(true) - title = title - } recycler_view.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false) recycler_view.adapter = pageAdapter @@ -129,16 +139,14 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv page_switch.setOnCheckedChangeListener { _, isChecked -> pageViewModel.actions.offer(Action.UserClickedShowAllToggle(isChecked)) } + pageViewModel.state.observe(viewLifecycleOwner, Observer(::render)) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - setHasOptionsMenu(true) - return inflater.inflate(R.layout.fragment_page, container, false) - } + ): View? = inflater.inflate(R.layout.fragment_page, container, false) override fun onDestroy() { compositeDisposable.clear() diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/BookmarksFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/BookmarksFragment.kt index 6245f349b..2b171a4e4 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/BookmarksFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/BookmarksFragment.kt @@ -4,6 +4,7 @@ import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.base.BaseActivity import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.coreActivityComponent import org.kiwix.kiwixmobile.core.extensions.viewModel +import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.page.PageFragment import org.kiwix.kiwixmobile.core.page.adapter.PageAdapter import org.kiwix.kiwixmobile.core.page.adapter.PageDelegate.PageItemDelegate @@ -20,8 +21,9 @@ class BookmarksFragment : PageFragment() { override val noItemsString: String by lazy { getString(R.string.no_bookmarks) } override val switchString: String by lazy { getString(R.string.bookmarks_from_current_book) } override val switchIsChecked: Boolean by lazy { sharedPreferenceUtil.showBookmarksAllBooks } + override fun inject(baseActivity: BaseActivity) { - requireActivity().coreActivityComponent.inject(this) + (baseActivity as CoreMainActivity).coreActivityComponent.inject(this) } override val searchQueryHint: String by lazy { getString(R.string.search_bookmarks) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/HistoryFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/HistoryFragment.kt index e03e1b0d5..4e8b7ceb5 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/HistoryFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/HistoryFragment.kt @@ -4,6 +4,7 @@ import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.base.BaseActivity import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.coreActivityComponent import org.kiwix.kiwixmobile.core.extensions.viewModel +import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.page.PageFragment import org.kiwix.kiwixmobile.core.page.adapter.PageAdapter import org.kiwix.kiwixmobile.core.page.adapter.PageDelegate.HistoryDateDelegate @@ -25,7 +26,7 @@ class HistoryFragment : PageFragment() { override val switchIsChecked: Boolean by lazy { sharedPreferenceUtil.showHistoryAllBooks } override fun inject(baseActivity: BaseActivity) { - requireActivity().coreActivityComponent.inject(this) + (baseActivity as CoreMainActivity).coreActivityComponent.inject(this) } override val searchQueryHint: String by lazy { getString(R.string.search_history) }