From 43bfd38baaa2c8bb57582ad234d7c4b889b5b61c Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Sun, 17 Jan 2021 03:17:19 +0530 Subject: [PATCH 01/15] wip #2567 --- .../destination/reader/KiwixReaderFragment.kt | 36 +++++++++++++++++++ .../kiwix/kiwixmobile/core/main/FileReader.kt | 4 +-- .../kiwix/kiwixmobile/core/utils/Constants.kt | 1 + 3 files changed, 39 insertions(+), 2 deletions(-) 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 550dd6290..4f0b27f85 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 @@ -25,6 +25,7 @@ import android.os.Handler import android.util.AttributeSet import android.util.Log import android.util.TypedValue.complexToDimensionPixelSize +import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater import android.view.View @@ -33,6 +34,7 @@ import android.view.View.VISIBLE import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toFile +import androidx.core.net.toUri import androidx.drawerlayout.widget.DrawerLayout import androidx.lifecycle.Observer import kotlinx.android.synthetic.main.activity_kiwix_main.bottom_nav_view @@ -55,6 +57,7 @@ import org.kiwix.kiwixmobile.core.main.CoreWebViewClient import org.kiwix.kiwixmobile.core.main.FIND_IN_PAGE_SEARCH_STRING import org.kiwix.kiwixmobile.core.main.ToolbarScrollingKiwixWebView import org.kiwix.kiwixmobile.core.search.viewmodel.effects.SearchItemToOpen +import org.kiwix.kiwixmobile.core.utils.EXTRA_ZIM_FILE import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.core.utils.TAG_CURRENT_FILE import org.kiwix.kiwixmobile.core.utils.TAG_FILE_SEARCHED @@ -73,6 +76,16 @@ class KiwixReaderFragment : CoreReaderFragment() { baseActivity.cachedComponent.inject(this) } + // override fun onCreateView( + // inflater: LayoutInflater, + // container: ViewGroup?, + // savedInstanceState: Bundle? + // ): View? { + // val view = super.onCreateView(inflater, container, savedInstanceState) + // openPageInBookFromNavigationArguments() + // return view + // } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -110,7 +123,25 @@ class KiwixReaderFragment : CoreReaderFragment() { } private fun openPageInBookFromNavigationArguments() { + val data = uriFromIntent() val args = KiwixReaderFragmentArgs.fromBundle(requireArguments()) + + if (data != null) { + val filePath = FileUtils.getLocalFilePathByUri(requireActivity().applicationContext, data) + + if (filePath == null || !File(filePath).exists()) { + getCurrentWebView().snack(R.string.error_file_not_found) + return + } + + Log.d( + TAG_KIWIX, "Kiwix started from a file manager. Intent filePath: " + + filePath + + " -> open this zim file and load menu_main page" + ) + openZimFile(File(filePath)) + } + if (args.pageUrl.isNotEmpty()) { if (args.zimFileUri.isNotEmpty()) { tryOpeningZimFile(args.zimFileUri) @@ -138,6 +169,11 @@ class KiwixReaderFragment : CoreReaderFragment() { openZimFile(File(filePath)) } + private fun uriFromIntent() = + activity?.intent?.data ?: activity?.intent?.getStringExtra(EXTRA_ZIM_FILE)?.let { + File(FileUtils.getFileName(it)).toUri() + } + override fun loadDrawerViews() { drawerLayout = requireActivity().findViewById(R.id.navigation_container) tableDrawerRightContainer = requireActivity().findViewById(R.id.reader_drawer_nav_view) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt index a472fdb3a..072bf7237 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt @@ -22,8 +22,8 @@ import java.io.BufferedReader import java.io.IOException class FileReader { - fun readFile(filePath: String, context: Context): String = try { - context.assets.open(filePath) + fun Context.readFile(filePath: String): String = try { + assets.open(filePath) .bufferedReader() .use(BufferedReader::readText) } catch (e: IOException) { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/Constants.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/Constants.kt index 308849cc3..a20effd73 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/Constants.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/Constants.kt @@ -34,6 +34,7 @@ const val TAG_CURRENT_TAB = "currenttab" const val TAG_FROM_TAB_SWITCHER = "fromtabswitcher" // Extras +const val EXTRA_ZIM_FILE = "zimFile" const val EXTRA_IS_WIDGET_VOICE = "isWidgetVoice" const val HOTSPOT_SERVICE_CHANNEL_ID = "hotspotService" const val OLD_PROVIDER_DOMAIN = "org.kiwix.zim.base" From c5289aeaca6439890842e99739e7b99b826c57c3 Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Sun, 17 Jan 2021 03:24:33 +0530 Subject: [PATCH 02/15] Revert un-necessary changes --- .../main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt index 072bf7237..a472fdb3a 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/FileReader.kt @@ -22,8 +22,8 @@ import java.io.BufferedReader import java.io.IOException class FileReader { - fun Context.readFile(filePath: String): String = try { - assets.open(filePath) + fun readFile(filePath: String, context: Context): String = try { + context.assets.open(filePath) .bufferedReader() .use(BufferedReader::readText) } catch (e: IOException) { From cba62e0bbd2a1f0c9a4188aed4e9a4233c68117d Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Sun, 17 Jan 2021 03:58:57 +0530 Subject: [PATCH 03/15] wip #2567-II --- .../kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt | 3 ++- .../org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) 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 4f0b27f85..865a06fca 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 @@ -65,6 +65,7 @@ import org.kiwix.kiwixmobile.core.utils.TAG_KIWIX import org.kiwix.kiwixmobile.core.utils.files.FileUtils import org.kiwix.kiwixmobile.core.utils.titleToUrl import org.kiwix.kiwixmobile.core.utils.urlSuffixToParsableUrl +import org.kiwix.kiwixmobile.kiwixActivityComponent import java.io.File private const val HIDE_TAB_SWITCHER_DELAY: Long = 300 @@ -73,7 +74,7 @@ class KiwixReaderFragment : CoreReaderFragment() { private var isFullScreenVideo: Boolean = false override fun inject(baseActivity: BaseActivity) { - baseActivity.cachedComponent.inject(this) + baseActivity.kiwixActivityComponent.inject(this) } // override fun onCreateView( 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 58450f8d3..130ca99a6 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 @@ -1548,6 +1548,7 @@ public abstract class CoreReaderFragment extends BaseFragment SharedPreferences settings = requireActivity().getSharedPreferences(SharedPreferenceUtil.PREF_KIWIX_MOBILE, 0); String zimArticles = settings.getString(TAG_CURRENT_ARTICLES, null); + String zimFile = settings.getString(TAG_CURRENT_FILE, null); String zimPositions = settings.getString(TAG_CURRENT_POSITIONS, null); int currentTab = safelyGetCurrentTab(settings); if (isInvalidJson(zimArticles) || isInvalidJson(zimPositions)) { From 24b052e27dfa60423422a4401bc41fc09ea49362 Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Sun, 17 Jan 2021 05:45:55 +0530 Subject: [PATCH 04/15] Closes #2567 Demanded Functionality implemented --- .../destination/reader/KiwixReaderFragment.kt | 13 ++++++++---- .../core/main/CoreReaderFragment.java | 20 +++++++++++-------- 2 files changed, 21 insertions(+), 12 deletions(-) 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 865a06fca..e873ba572 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 @@ -278,7 +278,7 @@ class KiwixReaderFragment : CoreReaderFragment() { Log.d(TAG_KIWIX, "Kiwix normal start, no zimFile loaded last time -> display home page") exitBook() } - + private val TAG = "KiwixReaderFragment" override fun restoreViewStateOnValidJSON( zimArticles: String, zimPositions: String, @@ -287,10 +287,15 @@ class KiwixReaderFragment : CoreReaderFragment() { val settings = requireActivity().getSharedPreferences(SharedPreferenceUtil.PREF_KIWIX_MOBILE, 0) val zimFile = settings.getString(TAG_CURRENT_FILE, null) - if (zimFile != null) { - if (zimReaderContainer.zimFile == null) { + if (zimFile != null && File(zimFile).exists()) { + // if (zimReaderContainer.zimFile != null) { openZimFile(File(zimFile)) - } + Log.d( + TAG, + "Kiwix normal start, zimFile loaded last time -> Open last used zimFile $zimFile" + ) + // Log.d(TAG, "restoreViewStateOnValidJSON: started kiwix from the point where it all left offf") + // } } else { getCurrentWebView().snack(R.string.zim_not_opened) } 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 130ca99a6..22ebeca05 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 @@ -1544,17 +1544,19 @@ public abstract class CoreReaderFragment extends BaseFragment return jsonString == null || jsonString.equals("[]"); } + private static final String TAG = "CRF"; protected void manageExternalLaunchAndRestoringViewState() { SharedPreferences settings = requireActivity().getSharedPreferences(SharedPreferenceUtil.PREF_KIWIX_MOBILE, 0); String zimArticles = settings.getString(TAG_CURRENT_ARTICLES, null); - String zimFile = settings.getString(TAG_CURRENT_FILE, null); String zimPositions = settings.getString(TAG_CURRENT_POSITIONS, null); int currentTab = safelyGetCurrentTab(settings); if (isInvalidJson(zimArticles) || isInvalidJson(zimPositions)) { restoreViewStateOnInvalidJSON(); + Log.d(TAG, "manageExternalLaunchAndRestoringViewState: Restoring IN-validJson pe view"); } else { restoreViewStateOnValidJSON(zimArticles, zimPositions, currentTab); + Log.d(TAG, "manageExternalLaunchAndRestoringViewState: Restoring validJson pe view"); } } @@ -1567,14 +1569,16 @@ public abstract class CoreReaderFragment extends BaseFragment try { JSONArray urls = new JSONArray(zimArticles); JSONArray positions = new JSONArray(zimPositions); - webViewList.clear(); - currentWebViewIndex=0; - tabsAdapter.notifyItemRemoved(0); - tabsAdapter.notifyDataSetChanged(); - for (int i = 0; i < urls.length(); i++) { - newTab(UpdateUtils.reformatProviderUrl(urls.getString(i)), i == currentTab) - .setScrollY(positions.getInt(i)); + int i = 0; + getCurrentWebView().loadUrl(UpdateUtils.reformatProviderUrl(urls.getString(i))); + getCurrentWebView().setScrollY(positions.getInt(i)); + i++; + while (i < urls.length()) { + newTab(UpdateUtils.reformatProviderUrl(urls.getString(i))); + getCurrentWebView().setScrollY(positions.getInt(i)); + i++; } + selectTab(currentTab); } catch (JSONException e) { Log.w(TAG_KIWIX, "Kiwix shared preferences corrupted", e); ContextExtensionsKt.toast(getActivity(), "Could not restore tabs.", Toast.LENGTH_LONG); From d8b5f240affa9f2bb21a9c82d063ba7273a9193e Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Sun, 17 Jan 2021 05:52:11 +0530 Subject: [PATCH 05/15] Code Cleanup --- .../destination/reader/KiwixReaderFragment.kt | 29 +++++-------------- .../core/main/CoreReaderFragment.java | 2 -- 2 files changed, 8 insertions(+), 23 deletions(-) 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 e873ba572..dcab8bcb8 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 @@ -25,7 +25,6 @@ import android.os.Handler import android.util.AttributeSet import android.util.Log import android.util.TypedValue.complexToDimensionPixelSize -import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater import android.view.View @@ -65,7 +64,6 @@ import org.kiwix.kiwixmobile.core.utils.TAG_KIWIX import org.kiwix.kiwixmobile.core.utils.files.FileUtils import org.kiwix.kiwixmobile.core.utils.titleToUrl import org.kiwix.kiwixmobile.core.utils.urlSuffixToParsableUrl -import org.kiwix.kiwixmobile.kiwixActivityComponent import java.io.File private const val HIDE_TAB_SWITCHER_DELAY: Long = 300 @@ -74,19 +72,9 @@ class KiwixReaderFragment : CoreReaderFragment() { private var isFullScreenVideo: Boolean = false override fun inject(baseActivity: BaseActivity) { - baseActivity.kiwixActivityComponent.inject(this) + baseActivity.cachedComponent.inject(this) } - // override fun onCreateView( - // inflater: LayoutInflater, - // container: ViewGroup?, - // savedInstanceState: Bundle? - // ): View? { - // val view = super.onCreateView(inflater, container, savedInstanceState) - // openPageInBookFromNavigationArguments() - // return view - // } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -278,7 +266,7 @@ class KiwixReaderFragment : CoreReaderFragment() { Log.d(TAG_KIWIX, "Kiwix normal start, no zimFile loaded last time -> display home page") exitBook() } - private val TAG = "KiwixReaderFragment" + override fun restoreViewStateOnValidJSON( zimArticles: String, zimPositions: String, @@ -288,14 +276,13 @@ class KiwixReaderFragment : CoreReaderFragment() { val zimFile = settings.getString(TAG_CURRENT_FILE, null) if (zimFile != null && File(zimFile).exists()) { - // if (zimReaderContainer.zimFile != null) { + if (zimReaderContainer.zimFile == null) { openZimFile(File(zimFile)) - Log.d( - TAG, - "Kiwix normal start, zimFile loaded last time -> Open last used zimFile $zimFile" - ) - // Log.d(TAG, "restoreViewStateOnValidJSON: started kiwix from the point where it all left offf") - // } + Log.d( + TAG_KIWIX, + "Kiwix normal start, zimFile loaded last time -> Open last used zimFile $zimFile" + ) + } } else { getCurrentWebView().snack(R.string.zim_not_opened) } 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 22ebeca05..b029e997c 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 @@ -1553,10 +1553,8 @@ public abstract class CoreReaderFragment extends BaseFragment int currentTab = safelyGetCurrentTab(settings); if (isInvalidJson(zimArticles) || isInvalidJson(zimPositions)) { restoreViewStateOnInvalidJSON(); - Log.d(TAG, "manageExternalLaunchAndRestoringViewState: Restoring IN-validJson pe view"); } else { restoreViewStateOnValidJSON(zimArticles, zimPositions, currentTab); - Log.d(TAG, "manageExternalLaunchAndRestoringViewState: Restoring validJson pe view"); } } From c82f557aacb504828510245f8d79f580b2f33bf8 Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Sun, 17 Jan 2021 06:11:41 +0530 Subject: [PATCH 06/15] Cleaned up leftOvers --- .../java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java | 1 - 1 file changed, 1 deletion(-) 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 b029e997c..5a6496bf1 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 @@ -1544,7 +1544,6 @@ public abstract class CoreReaderFragment extends BaseFragment return jsonString == null || jsonString.equals("[]"); } - private static final String TAG = "CRF"; protected void manageExternalLaunchAndRestoringViewState() { SharedPreferences settings = requireActivity().getSharedPreferences(SharedPreferenceUtil.PREF_KIWIX_MOBILE, 0); From 342053db7a173d95fd74ba687a6ea536115bd32d Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Sun, 17 Jan 2021 06:44:43 +0530 Subject: [PATCH 07/15] More cleanup --- .../destination/reader/KiwixReaderFragment.kt | 24 ------------------- .../kiwix/kiwixmobile/core/utils/Constants.kt | 1 - 2 files changed, 25 deletions(-) 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 dcab8bcb8..e4431c178 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 @@ -33,7 +33,6 @@ import android.view.View.VISIBLE import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toFile -import androidx.core.net.toUri import androidx.drawerlayout.widget.DrawerLayout import androidx.lifecycle.Observer import kotlinx.android.synthetic.main.activity_kiwix_main.bottom_nav_view @@ -56,7 +55,6 @@ import org.kiwix.kiwixmobile.core.main.CoreWebViewClient import org.kiwix.kiwixmobile.core.main.FIND_IN_PAGE_SEARCH_STRING import org.kiwix.kiwixmobile.core.main.ToolbarScrollingKiwixWebView import org.kiwix.kiwixmobile.core.search.viewmodel.effects.SearchItemToOpen -import org.kiwix.kiwixmobile.core.utils.EXTRA_ZIM_FILE import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.core.utils.TAG_CURRENT_FILE import org.kiwix.kiwixmobile.core.utils.TAG_FILE_SEARCHED @@ -112,25 +110,8 @@ class KiwixReaderFragment : CoreReaderFragment() { } private fun openPageInBookFromNavigationArguments() { - val data = uriFromIntent() val args = KiwixReaderFragmentArgs.fromBundle(requireArguments()) - if (data != null) { - val filePath = FileUtils.getLocalFilePathByUri(requireActivity().applicationContext, data) - - if (filePath == null || !File(filePath).exists()) { - getCurrentWebView().snack(R.string.error_file_not_found) - return - } - - Log.d( - TAG_KIWIX, "Kiwix started from a file manager. Intent filePath: " + - filePath + - " -> open this zim file and load menu_main page" - ) - openZimFile(File(filePath)) - } - if (args.pageUrl.isNotEmpty()) { if (args.zimFileUri.isNotEmpty()) { tryOpeningZimFile(args.zimFileUri) @@ -158,11 +139,6 @@ class KiwixReaderFragment : CoreReaderFragment() { openZimFile(File(filePath)) } - private fun uriFromIntent() = - activity?.intent?.data ?: activity?.intent?.getStringExtra(EXTRA_ZIM_FILE)?.let { - File(FileUtils.getFileName(it)).toUri() - } - override fun loadDrawerViews() { drawerLayout = requireActivity().findViewById(R.id.navigation_container) tableDrawerRightContainer = requireActivity().findViewById(R.id.reader_drawer_nav_view) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/Constants.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/Constants.kt index a20effd73..308849cc3 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/Constants.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/Constants.kt @@ -34,7 +34,6 @@ const val TAG_CURRENT_TAB = "currenttab" const val TAG_FROM_TAB_SWITCHER = "fromtabswitcher" // Extras -const val EXTRA_ZIM_FILE = "zimFile" const val EXTRA_IS_WIDGET_VOICE = "isWidgetVoice" const val HOTSPOT_SERVICE_CHANNEL_ID = "hotspotService" const val OLD_PROVIDER_DOMAIN = "org.kiwix.zim.base" From 38556294260666453ae616a52561c7142f314aed Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Mon, 18 Jan 2021 01:57:22 +0530 Subject: [PATCH 08/15] Fix #2567 Kiwix now launches in Reader always --- .../org/kiwix/kiwixmobile/main/KiwixMainActivity.kt | 4 ++-- app/src/main/res/navigation/kiwix_nav_graph.xml | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) 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 58e78da20..5e5004d5a 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt @@ -38,7 +38,7 @@ import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions import org.kiwix.kiwixmobile.core.di.components.CoreComponent import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.kiwixActivityComponent -import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections +import org.kiwix.kiwixmobile.nav.destination.reader.KiwixReaderFragmentDirections const val NAVIGATE_TO_ZIM_HOST_FRAGMENT = "navigate_to_zim_host_fragment" @@ -95,7 +95,7 @@ class KiwixMainActivity : CoreMainActivity() { } } if (sharedPreferenceUtil.showIntro()) { - navigate(LocalLibraryFragmentDirections.actionLibraryFragmentToIntrofragment()) + navigate(KiwixReaderFragmentDirections.actionReaderFragmentToIntroFragment()) } } diff --git a/app/src/main/res/navigation/kiwix_nav_graph.xml b/app/src/main/res/navigation/kiwix_nav_graph.xml index e51ca0ef7..c88915bc3 100644 --- a/app/src/main/res/navigation/kiwix_nav_graph.xml +++ b/app/src/main/res/navigation/kiwix_nav_graph.xml @@ -19,7 +19,7 @@ + app:startDestination="@id/readerFragment"> + - Date: Mon, 18 Jan 2021 03:11:26 +0530 Subject: [PATCH 09/15] fix tests --- .../search/SearchFragmentTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java index 1a4dd792a..2c19e920b 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java @@ -19,23 +19,30 @@ package org.kiwix.kiwixmobile.search; import android.Manifest; +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import androidx.test.espresso.intent.Intents; import androidx.test.espresso.matcher.ViewMatchers; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; import androidx.test.rule.ActivityTestRule; import androidx.test.rule.GrantPermissionRule; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.main.KiwixMainActivity; +import static androidx.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.CoreMatchers.allOf; +import static org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil.PREF_SHOW_INTRO; @LargeTest @RunWith(AndroidJUnit4.class) @@ -51,10 +58,25 @@ public class SearchFragmentTest { public GrantPermissionRule writePermissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE); + private Context context; + + @Before + public void setUp() { + Intents.init(); + context = getInstrumentation().getTargetContext(); + } + @Test public void SearchFragmentSimple() { + shouldShowIntro(false); onView(allOf(withText(R.string.reader), withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))).perform(click()); onView(withId(R.id.menu_search)); } + + private void shouldShowIntro(boolean value) { + SharedPreferences.Editor preferencesEditor = + PreferenceManager.getDefaultSharedPreferences(context).edit(); + preferencesEditor.putBoolean(PREF_SHOW_INTRO, value).apply(); + } } From 1721eaecb4d8d87e4d543429288ff60693153345 Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Mon, 18 Jan 2021 04:17:17 +0530 Subject: [PATCH 10/15] #2567 fix broken search fragment test --- .../search/SearchFragmentTest.java | 53 +++---------------- 1 file changed, 8 insertions(+), 45 deletions(-) diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java index 2c19e920b..1a8a80500 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java @@ -18,65 +18,28 @@ package org.kiwix.kiwixmobile.search; -import android.Manifest; -import android.content.Context; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import androidx.test.espresso.intent.Intents; -import androidx.test.espresso.matcher.ViewMatchers; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; -import androidx.test.rule.ActivityTestRule; -import androidx.test.rule.GrantPermissionRule; +import androidx.test.internal.runner.junit4.statement.UiThreadStatement; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.kiwix.kiwixmobile.BaseActivityTest; import org.kiwix.kiwixmobile.R; -import org.kiwix.kiwixmobile.main.KiwixMainActivity; -import static androidx.test.InstrumentationRegistry.getInstrumentation; -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility; -import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static org.hamcrest.CoreMatchers.allOf; -import static org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil.PREF_SHOW_INTRO; +import static com.schibsted.spain.barista.assertion.BaristaVisibilityAssertions.assertDisplayed; @LargeTest @RunWith(AndroidJUnit4.class) -public class SearchFragmentTest { - - @Rule - public ActivityTestRule mActivityTestRule = new ActivityTestRule<>( - KiwixMainActivity.class); - @Rule - public GrantPermissionRule readPermissionRule = - GrantPermissionRule.grant(Manifest.permission.READ_EXTERNAL_STORAGE); - @Rule - public GrantPermissionRule writePermissionRule = - GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE); - - private Context context; - +public class SearchFragmentTest extends BaseActivityTest { @Before - public void setUp() { - Intents.init(); - context = getInstrumentation().getTargetContext(); + public void setUp() throws Throwable { + UiThreadStatement.runOnUiThread( + () -> getActivityRule().getActivity().navigate(R.id.searchFragment)); } @Test public void SearchFragmentSimple() { - shouldShowIntro(false); - onView(allOf(withText(R.string.reader), - withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))).perform(click()); - onView(withId(R.id.menu_search)); - } - - private void shouldShowIntro(boolean value) { - SharedPreferences.Editor preferencesEditor = - PreferenceManager.getDefaultSharedPreferences(context).edit(); - preferencesEditor.putBoolean(PREF_SHOW_INTRO, value).apply(); + assertDisplayed(R.string.menu_search_in_text); } } From 9abceb22a00a48d9ce1d74058009479868cb0ef3 Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Mon, 18 Jan 2021 04:35:16 +0530 Subject: [PATCH 11/15] Changed searchFragTest to kt with better internal and implicit exception handling --- ...ragmentTest.java => SearchFragmentTest.kt} | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) rename app/src/androidTest/java/org/kiwix/kiwixmobile/search/{SearchFragmentTest.java => SearchFragmentTest.kt} (51%) diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt similarity index 51% rename from app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java rename to app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt index 1a8a80500..e73ca7b5c 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.java +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt @@ -15,31 +15,26 @@ * along with this program. If not, see . * */ +package org.kiwix.kiwixmobile.search -package org.kiwix.kiwixmobile.search; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.LargeTest; -import androidx.test.internal.runner.junit4.statement.UiThreadStatement; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kiwix.kiwixmobile.BaseActivityTest; -import org.kiwix.kiwixmobile.R; - -import static com.schibsted.spain.barista.assertion.BaristaVisibilityAssertions.assertDisplayed; +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import androidx.test.internal.runner.junit4.statement.UiThreadStatement +import com.schibsted.spain.barista.assertion.BaristaVisibilityAssertions.assertDisplayed +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.kiwix.kiwixmobile.BaseActivityTest +import org.kiwix.kiwixmobile.R @LargeTest -@RunWith(AndroidJUnit4.class) -public class SearchFragmentTest extends BaseActivityTest { - @Before - public void setUp() throws Throwable { - UiThreadStatement.runOnUiThread( - () -> getActivityRule().getActivity().navigate(R.id.searchFragment)); +@RunWith(AndroidJUnit4::class) +class SearchFragmentTest : BaseActivityTest() { + @Before fun setUp() { + UiThreadStatement.runOnUiThread { activityRule.activity.navigate(R.id.searchFragment) } } - @Test - public void SearchFragmentSimple() { - assertDisplayed(R.string.menu_search_in_text); + @Test fun searchFragmentSimple() { + assertDisplayed(R.string.menu_search_in_text) } } From 17f8164296ae6d352e7f493fdb473e5718090d7e Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Mon, 18 Jan 2021 04:36:49 +0530 Subject: [PATCH 12/15] Removed irrelevant annotations that could be inferred from file heirarchies --- .../java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt index e73ca7b5c..bfeccded1 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/search/SearchFragmentTest.kt @@ -17,18 +17,13 @@ */ package org.kiwix.kiwixmobile.search -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.LargeTest import androidx.test.internal.runner.junit4.statement.UiThreadStatement import com.schibsted.spain.barista.assertion.BaristaVisibilityAssertions.assertDisplayed import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.kiwix.kiwixmobile.BaseActivityTest import org.kiwix.kiwixmobile.R -@LargeTest -@RunWith(AndroidJUnit4::class) class SearchFragmentTest : BaseActivityTest() { @Before fun setUp() { UiThreadStatement.runOnUiThread { activityRule.activity.navigate(R.id.searchFragment) } From 3748b17eaff25456e223c0d0b9ae8818aef2c43e Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Mon, 18 Jan 2021 12:55:53 +0530 Subject: [PATCH 13/15] Modified logging statement a bit and made scrolling var name semantic --- .../destination/reader/KiwixReaderFragment.kt | 2 +- .../core/main/CoreReaderFragment.java | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) 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 e4431c178..559c6aebe 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 @@ -256,7 +256,7 @@ class KiwixReaderFragment : CoreReaderFragment() { openZimFile(File(zimFile)) Log.d( TAG_KIWIX, - "Kiwix normal start, zimFile loaded last time -> Open last used zimFile $zimFile" + "Kiwix normal start, Opened last used zimFile: -> $zimFile" ) } } else { 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 5a6496bf1..d36e67d17 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 @@ -1566,14 +1566,14 @@ public abstract class CoreReaderFragment extends BaseFragment try { JSONArray urls = new JSONArray(zimArticles); JSONArray positions = new JSONArray(zimPositions); - int i = 0; - getCurrentWebView().loadUrl(UpdateUtils.reformatProviderUrl(urls.getString(i))); - getCurrentWebView().setScrollY(positions.getInt(i)); - i++; - while (i < urls.length()) { - newTab(UpdateUtils.reformatProviderUrl(urls.getString(i))); - getCurrentWebView().setScrollY(positions.getInt(i)); - i++; + int cursor = 0; + getCurrentWebView().loadUrl(UpdateUtils.reformatProviderUrl(urls.getString(cursor))); + getCurrentWebView().setScrollY(positions.getInt(cursor)); + cursor++; + while (cursor < urls.length()) { + newTab(UpdateUtils.reformatProviderUrl(urls.getString(cursor))); + getCurrentWebView().setScrollY(positions.getInt(cursor)); + cursor++; } selectTab(currentTab); } catch (JSONException e) { From e9500b3faf2f0a608e41bff2fb9eb5e2af5f9d88 Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Mon, 18 Jan 2021 13:03:09 +0530 Subject: [PATCH 14/15] Added a safety comment in tabs restoration method to avoid unexpected modifications in it --- .../org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java | 2 ++ 1 file changed, 2 insertions(+) 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 d36e67d17..19f5c1e2e 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 @@ -1561,6 +1561,8 @@ public abstract class CoreReaderFragment extends BaseFragment return Math.max(settings.getInt(TAG_CURRENT_TAB, 0), 0); } + /* This method restores tabs state in new launches, do not modify it + unless it is explicitly mentioned in the issue you're fixing */ protected void restoreTabs(@Nullable String zimArticles, @Nullable String zimPositions, int currentTab) { try { From 3ea2151117ab01e0d66cb1b52fb2b98b1306e092 Mon Sep 17 00:00:00 2001 From: s-ayush2903 Date: Mon, 18 Jan 2021 15:58:02 +0530 Subject: [PATCH 15/15] Notify tabsAdapter about the changes in tabs --- .../org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java | 3 +++ 1 file changed, 3 insertions(+) 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 19f5c1e2e..8a5485aac 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 @@ -1568,6 +1568,9 @@ public abstract class CoreReaderFragment extends BaseFragment try { JSONArray urls = new JSONArray(zimArticles); JSONArray positions = new JSONArray(zimPositions); + currentWebViewIndex = 0; + tabsAdapter.notifyItemRemoved(0); + tabsAdapter.notifyDataSetChanged(); int cursor = 0; getCurrentWebView().loadUrl(UpdateUtils.reformatProviderUrl(urls.getString(cursor))); getCurrentWebView().setScrollY(positions.getInt(cursor));