diff --git a/app/src/main/java/org/kiwix/kiwixmobile/ActivityExtensions.kt b/app/src/main/java/org/kiwix/kiwixmobile/ActivityExtensions.kt index b5e15d5e7..e83808ae9 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/ActivityExtensions.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/ActivityExtensions.kt @@ -18,6 +18,7 @@ package org.kiwix.kiwixmobile +import android.os.Bundle import androidx.annotation.IdRes import androidx.appcompat.app.AppCompatActivity import androidx.navigation.NavDirections @@ -41,6 +42,9 @@ fun AppCompatActivity.navigate(action: NavDirections) = fun AppCompatActivity.navigate(@IdRes fragmentId: Int) = findNavController(R.id.nav_host_fragment).navigate(fragmentId) +fun AppCompatActivity.navigate(@IdRes fragmentId: Int, bundle: Bundle) = + findNavController(R.id.nav_host_fragment).navigate(fragmentId, bundle) + internal inline val BaseActivity.kiwixActivityComponent get() = kiwixComponent .activityComponentBuilder() 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 8b330b5bb..ef3dab75f 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt @@ -24,6 +24,7 @@ import android.view.MenuItem import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.view.ActionMode import androidx.appcompat.widget.Toolbar +import androidx.core.os.bundleOf import androidx.navigation.NavController import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration @@ -158,8 +159,8 @@ class KiwixMainActivity : CoreMainActivity() { closeNavigationDrawer() } - override fun openPage(pageUrl: String, zimFilePath: String?) { - navigate(R.id.navigation_reader) - // openZimFile(file) + override fun openPage(pageUrl: String, zimFilePath: String) { + val bundle = bundleOf("pageUrl" to pageUrl, "zimFileUri" to zimFilePath) + navigate(R.id.navigation_reader, bundle) } } 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 index 9fe7a20fe..c1c3c5095 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 @@ -31,6 +31,7 @@ import android.view.View import android.view.View.GONE import android.view.View.VISIBLE import android.view.ViewGroup +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toFile import androidx.drawerlayout.widget.DrawerLayout @@ -74,7 +75,17 @@ class ReaderFragment : CoreReaderFragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - manageExternalLaunchAndRestoringViewState(args.zimFileUri) + if (arguments != null) { + val args = ReaderFragmentArgs.fromBundle(requireArguments()) + if (args.pageUrl.isNotEmpty()) { + if (args.zimFileUri.isNotEmpty()) { + tryOpeningZimFile(args) + } + loadUrlWithCurrentWebview(args.pageUrl) + } else { + manageExternalLaunchAndRestoringViewState(args.zimFileUri) + } + } val activity = activity as CoreMainActivity noOpenBookButton.setOnClickListener { activity.navigate( @@ -86,6 +97,16 @@ class ReaderFragment : CoreReaderFragment() { setFragmentContainerBottomMarginToSizeOfNavBar() } + private fun tryOpeningZimFile(args: ReaderFragmentArgs) { + val file = File(args.zimFileUri) + if (!file.exists()) { + Toast.makeText(activity, R.string.error_file_not_found, Toast.LENGTH_LONG) + .show() + return + } + openZimFile(file) + } + override fun loadDrawerViews() { drawerLayout = requireActivity().findViewById(R.id.navigation_container) tableDrawerRightContainer = requireActivity().findViewById(R.id.reader_drawer_nav_view) diff --git a/app/src/main/res/navigation/kiwix_nav_graph.xml b/app/src/main/res/navigation/kiwix_nav_graph.xml index e32c896ee..6b92f65b0 100644 --- a/app/src/main/res/navigation/kiwix_nav_graph.xml +++ b/app/src/main/res/navigation/kiwix_nav_graph.xml @@ -27,6 +27,11 @@ android:name="zimFileUri" android:defaultValue="" app:argType="string" /> + + 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 c943cf01b..941e48211 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 @@ -125,5 +125,5 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider, abstract fun openSettingsActivity() abstract fun openHistoryActivity() abstract fun openBookmarksActivity() - abstract fun openPage(pageUrl: String, zimFilePath: String? = null) + abstract fun openPage(pageUrl: String, zimFilePath: String = "") } 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 615c90beb..83b6e71e9 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 @@ -789,7 +789,7 @@ public abstract class CoreReaderFragment extends BaseFragment loadUrlWithCurrentWebview("javascript:(" + documentParserJs + ")()"); } - private void loadUrlWithCurrentWebview(String url) { + protected void loadUrlWithCurrentWebview(String url) { loadUrl(url, getCurrentWebView()); } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/OpenPage.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/OpenPage.kt index 29cf28a4f..eda02c310 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/OpenPage.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/OpenPage.kt @@ -18,31 +18,19 @@ package org.kiwix.kiwixmobile.core.page.viewmodel.effects -import android.app.Activity -import android.content.Intent import androidx.appcompat.app.AppCompatActivity import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.page.adapter.Page import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer -import org.kiwix.kiwixmobile.core.utils.EXTRA_CHOSE_X_FILE -import org.kiwix.kiwixmobile.core.utils.EXTRA_CHOSE_X_URL data class OpenPage( private val page: Page, private val zimReaderContainer: ZimReaderContainer ) : SideEffect { override fun invokeWith(activity: AppCompatActivity) { - activity.setResult( - Activity.RESULT_OK, - Intent().putExtra(EXTRA_CHOSE_X_URL, page.url).apply { - if (page.zimFilePath != zimReaderContainer.zimCanonicalPath) { - putExtra(EXTRA_CHOSE_X_FILE, page.zimFilePath) - } - } - ) if (page.zimFilePath != zimReaderContainer.zimCanonicalPath) { - (activity as CoreMainActivity).openPage(page.url, page.zimFilePath) + (activity as CoreMainActivity).openPage(page.url, page.zimFilePath!!) } else { (activity as CoreMainActivity).openPage(page.url) } 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 7ea0583e6..1640a46e1 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 @@ -85,7 +85,7 @@ class CustomMainActivity : CoreMainActivity() { // } - override fun openPage(pageUrl: String, zimFilePath: String?) { + override fun openPage(pageUrl: String, zimFilePath: String) { // } }