diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2c0a5b46f..23f0a22cd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,6 +3,7 @@ import plugin.KiwixConfigurationPlugin plugins { android id("com.github.triplet.play") version Versions.com_github_triplet_play_gradle_plugin + id("androidx.navigation.safeargs") } plugins.apply(KiwixConfigurationPlugin::class) @@ -93,5 +94,4 @@ dependencies { implementation("androidx.navigation:navigation-ui-ktx:$navVersion") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$navVersion") - } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/di/components/KiwixActivityComponent.kt b/app/src/main/java/org/kiwix/kiwixmobile/di/components/KiwixActivityComponent.kt index 923867bda..721f6c644 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/di/components/KiwixActivityComponent.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/components/KiwixActivityComponent.kt @@ -29,9 +29,9 @@ import org.kiwix.kiwixmobile.local_file_transfer.LocalFileTransferActivity import org.kiwix.kiwixmobile.main.KiwixMainActivity import org.kiwix.kiwixmobile.main.KiwixMainFragment import org.kiwix.kiwixmobile.main.KiwixNewNavigationActivity -import org.kiwix.kiwixmobile.nav_destination_download.OnlineLibraryFragment -import org.kiwix.kiwixmobile.nav_destination_library.LocalLibraryFragment -import org.kiwix.kiwixmobile.nav_destination_reader.ReaderFragment +import org.kiwix.kiwixmobile.nav.destination.library.OnlineLibraryFragment +import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragment +import org.kiwix.kiwixmobile.nav.destination.reader.ReaderFragment import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity import org.kiwix.kiwixmobile.splash.KiwixSplashActivity import org.kiwix.kiwixmobile.webserver.ZimHostActivity 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 similarity index 97% rename from app/src/main/java/org/kiwix/kiwixmobile/nav_destination_library/LocalLibraryFragment.kt rename to app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt index 563c47d3c..62966748e 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 @@ -16,7 +16,7 @@ * */ -package org.kiwix.kiwixmobile.nav_destination_library +package org.kiwix.kiwixmobile.nav.destination.library import android.Manifest import android.content.pm.PackageManager @@ -75,7 +75,7 @@ class LocalLibraryFragment : BaseFragment() { } private val bookDelegate: BookOnDiskDelegate.BookDelegate by lazy { BookOnDiskDelegate.BookDelegate(sharedPreferenceUtil, - { offerAction(ZimManageViewModel.FileSelectActions.RequestOpen(it)) }, + { offerAction(ZimManageViewModel.FileSelectActions.RequestNavigateTo(it)) }, { offerAction(ZimManageViewModel.FileSelectActions.RequestMultiSelection(it)) }, { offerAction(ZimManageViewModel.FileSelectActions.RequestSelect(it)) }) } @@ -135,7 +135,8 @@ class LocalLibraryFragment : BaseFragment() { zim_swiperefresh.isRefreshing = it!! }) if (savedInstanceState != null && savedInstanceState.getBoolean(WAS_IN_ACTION_MODE)) { - zimManageViewModel.fileSelectActions.offer(ZimManageViewModel.FileSelectActions.RestartActionMode) + zimManageViewModel.fileSelectActions + .offer(ZimManageViewModel.FileSelectActions.RestartActionMode) } disposable.add(zimManageViewModel.libraryTabIsVisible.subscribe { finishActionMode() }) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav_destination_download/OnlineLibraryFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt similarity index 99% rename from app/src/main/java/org/kiwix/kiwixmobile/nav_destination_download/OnlineLibraryFragment.kt rename to app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt index 883d89ae1..685881dbb 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav_destination_download/OnlineLibraryFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt @@ -16,7 +16,7 @@ * */ -package org.kiwix.kiwixmobile.nav_destination_download +package org.kiwix.kiwixmobile.nav.destination.library import android.content.Intent import android.net.ConnectivityManager diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav_destination_reader/ReaderFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/ReaderFragment.kt similarity index 95% rename from app/src/main/java/org/kiwix/kiwixmobile/nav_destination_reader/ReaderFragment.kt rename to app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/ReaderFragment.kt index 2fa83cfac..6b2103145 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav_destination_reader/ReaderFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/ReaderFragment.kt @@ -16,7 +16,7 @@ * */ -package org.kiwix.kiwixmobile.nav_destination_reader +package org.kiwix.kiwixmobile.nav.destination.reader import android.content.Intent import android.os.Bundle @@ -28,6 +28,7 @@ import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toFile import androidx.core.net.toUri +import androidx.navigation.fragment.navArgs import org.json.JSONArray import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.core.base.BaseActivity @@ -39,7 +40,6 @@ import org.kiwix.kiwixmobile.core.main.CoreReaderFragment import org.kiwix.kiwixmobile.core.main.WebViewCallback import org.kiwix.kiwixmobile.core.reader.ZimFileReader import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer -import org.kiwix.kiwixmobile.core.utils.EXTRA_ZIM_FILE import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.core.utils.TAG_CURRENT_ARTICLES import org.kiwix.kiwixmobile.core.utils.TAG_CURRENT_FILE @@ -48,6 +48,7 @@ import org.kiwix.kiwixmobile.core.utils.TAG_CURRENT_TAB import org.kiwix.kiwixmobile.core.utils.TAG_KIWIX import org.kiwix.kiwixmobile.core.utils.UpdateUtils import org.kiwix.kiwixmobile.core.utils.files.FileUtils +import org.kiwix.kiwixmobile.destinationreader.ReaderFragmentArgs import org.kiwix.kiwixmobile.kiwixActivityComponent import org.kiwix.kiwixmobile.main.KiwixWebViewClient import org.kiwix.kiwixmobile.webserver.ZimHostActivity @@ -92,7 +93,7 @@ class ReaderFragment : CoreReaderFragment() { private fun manageExternalLaunchAndRestoringViewState() { - val data = uriFromIntent() + val data = uriFromNavigation() if (data != null) { val filePath = FileUtils.getLocalFilePathByUri(requireActivity().applicationContext, data) @@ -145,10 +146,10 @@ class ReaderFragment : CoreReaderFragment() { override fun isInvalidTitle(zimFileTitle: String?) = super.isInvalidTitle(zimFileTitle) || HOME_URL == getCurrentWebView().url - private fun uriFromIntent() = - activity?.intent?.data ?: activity?.intent?.getStringExtra(EXTRA_ZIM_FILE)?.let { - File(FileUtils.getFileName(it)).toUri() - } + private val args: ReaderFragmentArgs by navArgs() + + private fun uriFromNavigation() = + args.zimFileUri.let { File(FileUtils.getFileName(it)).toUri() } private fun restoreTabStates() { val settings = requireActivity().getSharedPreferences(SharedPreferenceUtil.PREF_KIWIX_MOBILE, 0) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt index 0bf876c08..af3d65c7d 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt @@ -54,6 +54,7 @@ import org.kiwix.kiwixmobile.zim_manager.NetworkState.CONNECTED import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.MultiModeFinished import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestDeleteMultiSelection import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestMultiSelection +import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestNavigateTo import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestOpen import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestSelect import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestShareMultiSelection @@ -62,6 +63,7 @@ import org.kiwix.kiwixmobile.zim_manager.fileselect_view.FileSelectListState import org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects.DeleteFiles import org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects.None import org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects.OpenFile +import org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects.OpenFileWithNavigation import org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects.ShareFiles import org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects.StartMultiSelection import org.kiwix.kiwixmobile.zim_manager.library_view.adapter.LibraryListItem @@ -89,6 +91,7 @@ class ZimManageViewModel @Inject constructor( ) : ViewModel() { sealed class FileSelectActions { data class RequestOpen(val bookOnDisk: BookOnDisk) : FileSelectActions() + data class RequestNavigateTo(val bookOnDisk: BookOnDisk) : FileSelectActions() data class RequestSelect(val bookOnDisk: BookOnDisk) : FileSelectActions() data class RequestMultiSelection(val bookOnDisk: BookOnDisk) : FileSelectActions() object RequestDeleteMultiSelection : FileSelectActions() @@ -149,6 +152,7 @@ class ZimManageViewModel @Inject constructor( private fun fileSelectActions() = fileSelectActions.subscribe({ sideEffects.offer( when (it) { + is RequestNavigateTo -> OpenFileWithNavigation(it.bookOnDisk) is RequestOpen -> OpenFile(it.bookOnDisk) is RequestMultiSelection -> startMultiSelectionAndSelectBook(it.bookOnDisk) RequestDeleteMultiSelection -> DeleteFiles(selectionsFromState()) 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 new file mode 100644 index 000000000..cc1947dd5 --- /dev/null +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/effects/OpenFileWithNavigation.kt @@ -0,0 +1,50 @@ +/* + * Kiwix Android + * Copyright (c) 2020 Kiwix + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects + +import androidx.appcompat.app.AppCompatActivity +import androidx.core.net.toUri +import androidx.navigation.findNavController +import org.kiwix.kiwixmobile.core.R +import org.kiwix.kiwixmobile.core.base.SideEffect +import org.kiwix.kiwixmobile.core.extensions.toast +import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem +import org.kiwix.kiwixmobile.destinationlibrary.LocalLibraryFragmentDirections + +data class OpenFileWithNavigation(private val bookOnDisk: BooksOnDiskListItem.BookOnDisk) : + SideEffect { + + override fun invokeWith(activity: AppCompatActivity) { + val file = bookOnDisk.file + if (!file.canRead()) { + activity.toast(R.string.error_file_not_found) + } else { + val action = LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationReader( + file.toUri().toString() + ) + activity.findNavController(org.kiwix.kiwixmobile.R.id.nav_host_fragment).navigate(action) + + // activity.finish() + // activity.start { + // data = file.toUri() + // flags = Intent.FLAG_ACTIVITY_CLEAR_TOP + // } + } + } +} diff --git a/app/src/main/res/navigation/kiwix_nav_graph.xml b/app/src/main/res/navigation/kiwix_nav_graph.xml index 7faed7756..335b4a3f6 100644 --- a/app/src/main/res/navigation/kiwix_nav_graph.xml +++ b/app/src/main/res/navigation/kiwix_nav_graph.xml @@ -23,19 +23,27 @@ app:startDestination="@id/navigation_library"> + tools:layout="@layout/fragment_destination_reader"> + + + tools:layout="@layout/fragment_destination_library"> + + diff --git a/build.gradle.kts b/build.gradle.kts index 56327158c..870fffa55 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,6 +6,10 @@ buildscript { dependencies { classpath(Libs.com_android_tools_build_gradle) classpath(Libs.kotlin_gradle_plugin) + + val navVersion = "2.3.0-rc01" + classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$navVersion") + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }