diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/main/MainActivityTest.java b/app/src/androidTest/java/org/kiwix/kiwixmobile/main/MainActivityTest.java index 19434ec34..ef27283a6 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/main/MainActivityTest.java +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/main/MainActivityTest.java @@ -31,13 +31,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.kiwix.kiwixmobile.core.R; -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription; import static com.schibsted.spain.barista.interaction.BaristaClickInteractions.clickOn; import static org.kiwix.kiwixmobile.testutils.TestUtils.TEST_PAUSE_MS; import static org.kiwix.kiwixmobile.testutils.TestUtils.getResourceString; import static org.kiwix.kiwixmobile.utils.StandardActions.enterSettings; +import static org.kiwix.kiwixmobile.utils.StandardActions.openDrawer; @LargeTest @RunWith(AndroidJUnit4.class) @@ -64,10 +62,6 @@ public class MainActivityTest { clickOn(R.string.menu_help); } - private void openDrawer() { - onView(withContentDescription(R.string.open_drawer)).perform(click()); - } - @Test public void navigateSettings() { BaristaSleepInteractions.sleep(TEST_PAUSE_MS); diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/utils/StandardActions.java b/app/src/androidTest/java/org/kiwix/kiwixmobile/utils/StandardActions.java index 79cb3c69c..62cfc385d 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/utils/StandardActions.java +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/utils/StandardActions.java @@ -23,7 +23,10 @@ import com.schibsted.spain.barista.interaction.BaristaSleepInteractions; import org.kiwix.kiwixmobile.core.R; import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.longClick; +import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static com.schibsted.spain.barista.interaction.BaristaDialogInteractions.clickDialogPositiveButton; import static org.kiwix.kiwixmobile.testutils.TestUtils.TEST_PAUSE_MS; @@ -41,6 +44,10 @@ public class StandardActions { BaristaMenuClickInteractions.clickMenu(getResourceString(R.string.menu_settings)); } + public static void openDrawer() { + onView(withContentDescription(R.string.open_drawer)).perform(click()); + } + public static void deleteZimIfExists(String zimName, Integer adapterId) { try { onData(withContent(zimName)).inAdapterView(withId(adapterId)).perform(longClick()); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt index 411333d38..5c8605fcc 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt @@ -40,14 +40,13 @@ import org.kiwix.kiwixmobile.core.di.components.CoreComponent import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.intent import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start import org.kiwix.kiwixmobile.core.main.CoreMainActivity +import org.kiwix.kiwixmobile.core.main.PAGE_URL_KEY +import org.kiwix.kiwixmobile.core.main.ZIM_FILE_URI_KEY import org.kiwix.kiwixmobile.core.utils.REQUEST_PREFERENCES import org.kiwix.kiwixmobile.kiwixActivityComponent import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity import org.kiwix.kiwixmobile.webserver.ZimHostActivity -const val PAGE_URL_KEY = "pageUrl" -const val ZIM_FILE_URI_KEY = "zimFileUri" - class KiwixMainActivity : CoreMainActivity() { private var actionMode: ActionMode? = null @@ -100,11 +99,6 @@ class KiwixMainActivity : CoreMainActivity() { actionMode = mode } - override fun onSupportNavigateUp(): Boolean { - return navController.navigateUp() || - super.onSupportNavigateUp() - } - override fun onBackPressed() { if (readerDrawerIsOpen()) { closeReaderDrawer() 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..ed8298383 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 @@ -25,7 +25,6 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup -import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import kotlinx.android.synthetic.main.fragment_destination_library.go_to_downloads_button_no_files import org.kiwix.kiwixmobile.R @@ -60,11 +59,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 +82,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,6 +91,7 @@ class LocalLibraryFragment : ZimFileSelectFragment() { setTitle(R.string.library) } activity.setupDrawerToggle(toolbar) + setHasOptionsMenu(true) return root } 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..09087b36f 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 @@ -42,6 +42,7 @@ import org.kiwix.kiwixmobile.core.base.BaseActivity import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super.ShouldCall import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super.ShouldNotCall +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setupDrawerToggle import org.kiwix.kiwixmobile.core.extensions.getAttribute import org.kiwix.kiwixmobile.core.extensions.setImageDrawableCompat import org.kiwix.kiwixmobile.core.extensions.snack @@ -69,8 +70,8 @@ class KiwixReaderFragment : CoreReaderFragment() { (baseActivity as KiwixMainActivity).cachedComponent.inject(this) } - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) val activity = activity as CoreMainActivity noOpenBookButton.setOnClickListener { @@ -135,7 +136,7 @@ class KiwixReaderFragment : CoreReaderFragment() { override fun hideTabSwitcher() { if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(true) - (activity as CoreMainActivity).setupDrawerToggle(toolbar) + activity?.setupDrawerToggle(toolbar) setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED) @@ -258,11 +259,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/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/NavigateToDownloads.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/NavigateToDownloads.kt index 9cace19b2..19a0a1c95 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/NavigateToDownloads.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/NavigateToDownloads.kt @@ -20,12 +20,11 @@ package org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects import androidx.appcompat.app.AppCompatActivity import org.kiwix.kiwixmobile.core.base.SideEffect -import org.kiwix.kiwixmobile.core.main.CoreMainActivity +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.navigate import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections object NavigateToDownloads : SideEffect { override fun invokeWith(activity: AppCompatActivity) { - (activity as CoreMainActivity) - .navigate(LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationDownloads()) + activity.navigate(LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationDownloads()) } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/OpenFileWithNavigation.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/OpenFileWithNavigation.kt index 3f94e24a9..a88759a49 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/OpenFileWithNavigation.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/OpenFileWithNavigation.kt @@ -22,8 +22,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toUri import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.core.base.SideEffect +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.navigate import org.kiwix.kiwixmobile.core.extensions.toast -import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationReader @@ -35,7 +35,7 @@ data class OpenFileWithNavigation(private val bookOnDisk: BooksOnDiskListItem.Bo if (!file.canRead()) { activity.toast(R.string.error_file_not_found) } else { - (activity as CoreMainActivity).navigate( + activity.navigate( actionNavigationLibraryToNavigationReader().apply { zimFileUri = file.toUri().toString() } ) } 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 212d541e2..5c9d2c3c9 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 @@ -20,15 +20,20 @@ package org.kiwix.kiwixmobile.core.extensions import android.app.Activity import android.content.Intent +import android.os.Bundle import android.view.Menu import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ActionMode +import androidx.appcompat.widget.Toolbar import androidx.fragment.app.FragmentActivity import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProviders +import androidx.navigation.NavDirections import org.kiwix.kiwixmobile.core.CoreApp +import org.kiwix.kiwixmobile.core.di.components.CoreActivityComponent +import org.kiwix.kiwixmobile.core.main.CoreMainActivity object ActivityExtensions { @@ -75,6 +80,23 @@ object ActivityExtensions { ViewModelProviders.of(this, viewModelFactory) .get(T::class.java) + fun Activity.navigate(action: NavDirections) { + (this as CoreMainActivity).navigate(action) + } + + fun Activity.cachedComponent(): CoreActivityComponent = (this as CoreMainActivity).cachedComponent + + fun Activity.setupDrawerToggle(toolbar: Toolbar) = + (this as CoreMainActivity).setupDrawerToggle(toolbar) + + fun Activity.navigate(fragmentId: Int) { + (this as CoreMainActivity).navigate(fragmentId) + } + + fun Activity.navigate(fragmentId: Int, bundle: Bundle) { + (this as CoreMainActivity).navigate(fragmentId, bundle) + } + val Activity.coreActivityComponent get() = CoreApp.coreComponent.activityComponentBuilder().activity(this).build() } 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 3075bb0f2..32067a815 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 @@ -25,6 +25,4 @@ import androidx.lifecycle.ViewModelProviders inline fun Fragment.viewModel( viewModelFactory: ViewModelProvider.Factory -) = - ViewModelProviders.of(this, viewModelFactory) - .get(T::class.java) +) = ViewModelProviders.of(this, viewModelFactory).get(T::class.java) 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 d5fc6da44..471ad877c 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 @@ -38,6 +39,8 @@ import org.kiwix.kiwixmobile.core.utils.ExternalLinkOpener import javax.inject.Inject const val KIWIX_SUPPORT_URL = "https://www.kiwix.org/support" +const val PAGE_URL_KEY = "pageUrl" +const val ZIM_FILE_URI_KEY = "zimFileUri" abstract class CoreMainActivity : BaseActivity(), WebViewProvider { @@ -94,6 +97,9 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider { ?.getCurrentWebView() } + override fun onSupportNavigateUp(): Boolean = + navController.navigateUp() || super.onSupportNavigateUp() + open fun setupDrawerToggle(toolbar: Toolbar) { drawerToggle = ActionBarDrawerToggle( @@ -163,6 +169,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 c28a30e98..9e6c57047 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 @@ -282,15 +282,10 @@ public abstract class CoreReaderFragment extends BaseFragment } } - @SuppressLint("ClickableViewAccessibility") @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + @SuppressLint("ClickableViewAccessibility") + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setHasOptionsMenu(true); - } - - @SuppressLint("ClickableViewAccessibility") - @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); AppCompatActivity activity = (AppCompatActivity) getActivity(); new WebView(activity).destroy(); // Workaround for buggy webViews see #710 handleLocaleCheck(); @@ -786,11 +781,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(); @@ -811,7 +804,7 @@ public abstract class CoreReaderFragment extends BaseFragment } private KiwixWebView initalizeWebView(String url) { - AttributeSet attrs = StyleUtils.getAttributes(getActivity(), R.xml.webview); + AttributeSet attrs = StyleUtils.getAttributes(requireActivity(), R.xml.webview); KiwixWebView webView = createWebView(attrs); loadUrl(url, webView); return webView; @@ -1601,7 +1594,7 @@ public abstract class CoreReaderFragment extends BaseFragment @Override public void webViewProgressChanged(int progress) { - if (checkNull(progressBar)) { + if (checkNull(progressBar) && isAdded()) { progressBar.show(); progressBar.setProgress(progress); if (progress == 100) { 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 b883860fd..10f153dd9 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,11 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv } } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + } + 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 +102,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 { @@ -110,18 +115,16 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv return super.onOptionsItemSelected(item) } - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) val activity = requireActivity() as CoreMainActivity + recycler_view.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false) + recycler_view.adapter = pageAdapter activity.setSupportActionBar(toolbar) - activity.supportActionBar?.apply { setDisplayHomeAsUpEnabled(true) title = title } - recycler_view.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false) - recycler_view.adapter = pageAdapter - no_page.text = noItemsString page_switch.text = switchString @@ -130,16 +133,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 a38a16b9a..fb3ba5503 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 @@ -2,8 +2,8 @@ package org.kiwix.kiwixmobile.core.page.bookmark 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 +20,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() as CoreMainActivity).cachedComponent.inject(this) + baseActivity.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/bookmark/viewmodel/BookmarkViewModel.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModel.kt index 8522488b4..ebdee2849 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModel.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModel.kt @@ -35,11 +35,7 @@ class BookmarkViewModel @Inject constructor( ) : PageViewModel(bookmarksDao, sharedPrefs, zimReaderContainer) { override fun initialState(): BookmarkState = - BookmarkState( - emptyList(), - sharedPreferenceUtil.showBookmarksAllBooks, - zimReaderContainer.id - ) + BookmarkState(emptyList(), sharedPreferenceUtil.showBookmarksAllBooks, zimReaderContainer.id) override fun updatePagesBasedOnFilter( state: BookmarkState, diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt index c16bd1217..ea07d6dba 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt @@ -22,7 +22,7 @@ import androidx.appcompat.app.AppCompatActivity import io.reactivex.processors.PublishProcessor import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.PageDao -import org.kiwix.kiwixmobile.core.main.CoreMainActivity +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.cachedComponent import org.kiwix.kiwixmobile.core.page.bookmark.adapter.BookmarkItem import org.kiwix.kiwixmobile.core.page.viewmodel.PageState import org.kiwix.kiwixmobile.core.page.viewmodel.effects.DeletePageItems @@ -38,7 +38,7 @@ data class ShowDeleteBookmarksDialog( ) : SideEffect { @Inject lateinit var dialogShower: DialogShower override fun invokeWith(activity: AppCompatActivity) { - (activity as CoreMainActivity).cachedComponent.inject(this) + activity.cachedComponent().inject(this) dialogShower.show(if (state.isInSelectionState) DeleteSelectedBookmarks else DeleteAllBookmarks, { effects.offer(DeletePageItems(state, pageDao)) }) } 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 ad53d1697..73d09a0f4 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 @@ -13,11 +13,7 @@ import org.kiwix.kiwixmobile.core.page.history.viewmodel.HistoryViewModel const val USER_CLEARED_HISTORY: String = "user_cleared_history" class HistoryFragment : PageFragment() { - override val pageViewModel by lazy { - viewModel( - viewModelFactory - ) - } + override val pageViewModel by lazy { viewModel(viewModelFactory) } override val pageAdapter by lazy { PageAdapter(PageItemDelegate(this), HistoryDateDelegate()) @@ -29,7 +25,7 @@ class HistoryFragment : PageFragment() { override val switchIsChecked: Boolean by lazy { sharedPreferenceUtil.showHistoryAllBooks } override fun inject(baseActivity: BaseActivity) { - requireActivity().coreActivityComponent.inject(this) + baseActivity.coreActivityComponent.inject(this) } override val searchQueryHint: String by lazy { getString(R.string.search_history) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt index 4f1f59389..feca3745f 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt @@ -22,7 +22,7 @@ import androidx.appcompat.app.AppCompatActivity import io.reactivex.processors.PublishProcessor import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.PageDao -import org.kiwix.kiwixmobile.core.main.CoreMainActivity +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.cachedComponent import org.kiwix.kiwixmobile.core.page.history.viewmodel.HistoryState import org.kiwix.kiwixmobile.core.page.viewmodel.effects.DeletePageItems import org.kiwix.kiwixmobile.core.utils.DialogShower @@ -37,7 +37,7 @@ data class ShowDeleteHistoryDialog( ) : SideEffect { @Inject lateinit var dialogShower: DialogShower override fun invokeWith(activity: AppCompatActivity) { - (activity as CoreMainActivity).cachedComponent.inject(this) + activity.cachedComponent().inject(this) dialogShower.show(if (state.isInSelectionState) DeleteSelectedHistory else DeleteAllHistory, { effects.offer(DeletePageItems(state, pageDao)) }) diff --git a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt index 129ad0c51..a210754fc 100644 --- a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt +++ b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt @@ -31,6 +31,7 @@ import kotlinx.android.synthetic.main.activity_main.drawer_nav_view import org.kiwix.kiwixmobile.core.di.components.CoreComponent import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.intent import org.kiwix.kiwixmobile.core.main.CoreMainActivity +import org.kiwix.kiwixmobile.core.main.ZIM_FILE_URI_KEY import org.kiwix.kiwixmobile.core.utils.REQUEST_PREFERENCES import org.kiwix.kiwixmobile.custom.R import org.kiwix.kiwixmobile.custom.customActivityComponent @@ -62,9 +63,6 @@ class CustomMainActivity : CoreMainActivity() { } } - override fun onSupportNavigateUp(): Boolean = - navController.navigateUp() || super.onSupportNavigateUp() - override fun onOptionsItemSelected(item: MenuItem): Boolean { if (drawerToggle.isDrawerIndicatorEnabled) { return drawerToggle.onOptionsItemSelected(item) @@ -87,7 +85,7 @@ class CustomMainActivity : CoreMainActivity() { } override fun openPage(pageUrl: String, zimFilePath: String) { - val bundle = bundleOf("pageUrl" to pageUrl, "zimFileUri" to zimFilePath) + val bundle = bundleOf(PAGE_URL_KEY to pageUrl, ZIM_FILE_URI_KEY to zimFilePath) navigate(R.id.customReaderFragment, bundle) } } diff --git a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt index 16bbfa680..a4b2894f3 100644 --- a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt +++ b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt @@ -30,6 +30,7 @@ import android.os.Bundle import android.provider.Settings import android.view.Menu import android.view.MenuInflater +import android.view.View import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat @@ -38,8 +39,8 @@ import androidx.drawerlayout.widget.DrawerLayout import org.kiwix.kiwixmobile.core.base.BaseActivity import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super.ShouldCall +import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setupDrawerToggle import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start -import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.main.CoreReaderFragment import org.kiwix.kiwixmobile.core.main.MainMenu import org.kiwix.kiwixmobile.core.reader.ZimFileReader.Companion.CONTENT_PREFIX @@ -64,8 +65,8 @@ class CustomReaderFragment : CoreReaderFragment() { @Inject lateinit var customFileValidator: CustomFileValidator @Inject lateinit var dialogShower: DialogShower - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) if (enforcedLanguage()) { return } @@ -79,8 +80,10 @@ class CustomReaderFragment : CoreReaderFragment() { val toolbarToc = activity?.findViewById(R.id.bottom_toolbar_toc) toolbarToc?.isEnabled = false } - (activity as AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(true) - (activity as CoreMainActivity).setupDrawerToggle(toolbar) + with(activity as AppCompatActivity) { + supportActionBar!!.setDisplayHomeAsUpEnabled(true) + setupDrawerToggle(toolbar) + } } private fun loadPageFromNavigationArguments() {