#2253 merge with history bookmarks 2238

This commit is contained in:
HissPirat 2020-08-05 15:18:12 +02:00
commit c43f1d69be
20 changed files with 98 additions and 91 deletions

View File

@ -31,13 +31,11 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.kiwix.kiwixmobile.core.R; 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 com.schibsted.spain.barista.interaction.BaristaClickInteractions.clickOn;
import static org.kiwix.kiwixmobile.testutils.TestUtils.TEST_PAUSE_MS; import static org.kiwix.kiwixmobile.testutils.TestUtils.TEST_PAUSE_MS;
import static org.kiwix.kiwixmobile.testutils.TestUtils.getResourceString; import static org.kiwix.kiwixmobile.testutils.TestUtils.getResourceString;
import static org.kiwix.kiwixmobile.utils.StandardActions.enterSettings; import static org.kiwix.kiwixmobile.utils.StandardActions.enterSettings;
import static org.kiwix.kiwixmobile.utils.StandardActions.openDrawer;
@LargeTest @LargeTest
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
@ -64,10 +62,6 @@ public class MainActivityTest {
clickOn(R.string.menu_help); clickOn(R.string.menu_help);
} }
private void openDrawer() {
onView(withContentDescription(R.string.open_drawer)).perform(click());
}
@Test @Test
public void navigateSettings() { public void navigateSettings() {
BaristaSleepInteractions.sleep(TEST_PAUSE_MS); BaristaSleepInteractions.sleep(TEST_PAUSE_MS);

View File

@ -23,7 +23,10 @@ import com.schibsted.spain.barista.interaction.BaristaSleepInteractions;
import org.kiwix.kiwixmobile.core.R; import org.kiwix.kiwixmobile.core.R;
import static androidx.test.espresso.Espresso.onData; 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.action.ViewActions.longClick;
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static com.schibsted.spain.barista.interaction.BaristaDialogInteractions.clickDialogPositiveButton; import static com.schibsted.spain.barista.interaction.BaristaDialogInteractions.clickDialogPositiveButton;
import static org.kiwix.kiwixmobile.testutils.TestUtils.TEST_PAUSE_MS; import static org.kiwix.kiwixmobile.testutils.TestUtils.TEST_PAUSE_MS;
@ -41,6 +44,10 @@ public class StandardActions {
BaristaMenuClickInteractions.clickMenu(getResourceString(R.string.menu_settings)); 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) { public static void deleteZimIfExists(String zimName, Integer adapterId) {
try { try {
onData(withContent(zimName)).inAdapterView(withId(adapterId)).perform(longClick()); onData(withContent(zimName)).inAdapterView(withId(adapterId)).perform(longClick());

View File

@ -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.intent
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start
import org.kiwix.kiwixmobile.core.main.CoreMainActivity 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.core.utils.REQUEST_PREFERENCES
import org.kiwix.kiwixmobile.kiwixActivityComponent import org.kiwix.kiwixmobile.kiwixActivityComponent
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity
import org.kiwix.kiwixmobile.webserver.ZimHostActivity import org.kiwix.kiwixmobile.webserver.ZimHostActivity
const val PAGE_URL_KEY = "pageUrl"
const val ZIM_FILE_URI_KEY = "zimFileUri"
class KiwixMainActivity : CoreMainActivity() { class KiwixMainActivity : CoreMainActivity() {
private var actionMode: ActionMode? = null private var actionMode: ActionMode? = null
@ -100,11 +99,6 @@ class KiwixMainActivity : CoreMainActivity() {
actionMode = mode actionMode = mode
} }
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp() ||
super.onSupportNavigateUp()
}
override fun onBackPressed() { override fun onBackPressed() {
if (readerDrawerIsOpen()) { if (readerDrawerIsOpen()) {
closeReaderDrawer() closeReaderDrawer()

View File

@ -25,7 +25,6 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import kotlinx.android.synthetic.main.fragment_destination_library.go_to_downloads_button_no_files import kotlinx.android.synthetic.main.fragment_destination_library.go_to_downloads_button_no_files
import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.R
@ -60,11 +59,6 @@ class LocalLibraryFragment : ZimFileSelectFragment() {
(baseActivity as KiwixMainActivity).cachedComponent.inject(this) (baseActivity as KiwixMainActivity).cachedComponent.inject(this)
} }
override fun onDestroyView() {
super.onDestroyView()
(activity as AppCompatActivity).setSupportActionBar(null)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_zim_manager, menu) inflater.inflate(R.menu.menu_zim_manager, menu)
val searchItem = menu.findItem(R.id.action_search) val searchItem = menu.findItem(R.id.action_search)
@ -88,7 +82,6 @@ class LocalLibraryFragment : ZimFileSelectFragment() {
): View? { ): View? {
LanguageUtils(requireActivity()) LanguageUtils(requireActivity())
.changeFont(requireActivity().layoutInflater, sharedPreferenceUtil) .changeFont(requireActivity().layoutInflater, sharedPreferenceUtil)
setHasOptionsMenu(true)
val root = inflater.inflate(R.layout.fragment_destination_library, container, false) val root = inflater.inflate(R.layout.fragment_destination_library, container, false)
val toolbar = root.findViewById<Toolbar>(R.id.toolbar) val toolbar = root.findViewById<Toolbar>(R.id.toolbar)
val activity = activity as CoreMainActivity val activity = activity as CoreMainActivity
@ -98,6 +91,7 @@ class LocalLibraryFragment : ZimFileSelectFragment() {
setTitle(R.string.library) setTitle(R.string.library)
} }
activity.setupDrawerToggle(toolbar) activity.setupDrawerToggle(toolbar)
setHasOptionsMenu(true)
return root return root
} }

View File

@ -57,11 +57,6 @@ class OnlineLibraryFragment : LibraryFragment(), FragmentActivityExtensions {
zimManageViewModel.requestFiltering.onNext("") zimManageViewModel.requestFiltering.onNext("")
} }
override fun onDestroyView() {
super.onDestroyView()
(activity as AppCompatActivity).setSupportActionBar(null)
}
override fun onBackPressed(activity: AppCompatActivity): FragmentActivityExtensions.Super { override fun onBackPressed(activity: AppCompatActivity): FragmentActivityExtensions.Super {
getActivity()?.finish() getActivity()?.finish()
return FragmentActivityExtensions.Super.ShouldNotCall return FragmentActivityExtensions.Super.ShouldNotCall

View File

@ -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
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super.ShouldCall import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super.ShouldCall
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super.ShouldNotCall 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.getAttribute
import org.kiwix.kiwixmobile.core.extensions.setImageDrawableCompat import org.kiwix.kiwixmobile.core.extensions.setImageDrawableCompat
import org.kiwix.kiwixmobile.core.extensions.snack import org.kiwix.kiwixmobile.core.extensions.snack
@ -69,8 +70,8 @@ class KiwixReaderFragment : CoreReaderFragment() {
(baseActivity as KiwixMainActivity).cachedComponent.inject(this) (baseActivity as KiwixMainActivity).cachedComponent.inject(this)
} }
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onViewCreated(view, savedInstanceState)
val activity = activity as CoreMainActivity val activity = activity as CoreMainActivity
noOpenBookButton.setOnClickListener { noOpenBookButton.setOnClickListener {
@ -135,7 +136,7 @@ class KiwixReaderFragment : CoreReaderFragment() {
override fun hideTabSwitcher() { override fun hideTabSwitcher() {
if (actionBar != null) { if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(true) actionBar.setDisplayShowTitleEnabled(true)
(activity as CoreMainActivity).setupDrawerToggle(toolbar) activity?.setupDrawerToggle(toolbar)
setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED) 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() { override fun openFullScreen() {
super.openFullScreen() super.openFullScreen()
requireActivity().bottom_nav_view.visibility = GONE requireActivity().bottom_nav_view.visibility = GONE

View File

@ -20,12 +20,11 @@ package org.kiwix.kiwixmobile.zim_manager.fileselect_view.effects
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import org.kiwix.kiwixmobile.core.base.SideEffect 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 import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections
object NavigateToDownloads : SideEffect<Unit> { object NavigateToDownloads : SideEffect<Unit> {
override fun invokeWith(activity: AppCompatActivity) { override fun invokeWith(activity: AppCompatActivity) {
(activity as CoreMainActivity) activity.navigate(LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationDownloads())
.navigate(LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationDownloads())
} }
} }

View File

@ -22,8 +22,8 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.net.toUri import androidx.core.net.toUri
import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.R
import org.kiwix.kiwixmobile.core.base.SideEffect 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.extensions.toast
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationReader import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationReader
@ -35,7 +35,7 @@ data class OpenFileWithNavigation(private val bookOnDisk: BooksOnDiskListItem.Bo
if (!file.canRead()) { if (!file.canRead()) {
activity.toast(R.string.error_file_not_found) activity.toast(R.string.error_file_not_found)
} else { } else {
(activity as CoreMainActivity).navigate( activity.navigate(
actionNavigationLibraryToNavigationReader().apply { zimFileUri = file.toUri().toString() } actionNavigationLibraryToNavigationReader().apply { zimFileUri = file.toUri().toString() }
) )
} }

View File

@ -20,15 +20,20 @@ package org.kiwix.kiwixmobile.core.extensions
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelProviders import androidx.lifecycle.ViewModelProviders
import androidx.navigation.NavDirections
import org.kiwix.kiwixmobile.core.CoreApp import org.kiwix.kiwixmobile.core.CoreApp
import org.kiwix.kiwixmobile.core.di.components.CoreActivityComponent
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
object ActivityExtensions { object ActivityExtensions {
@ -75,6 +80,23 @@ object ActivityExtensions {
ViewModelProviders.of(this, viewModelFactory) ViewModelProviders.of(this, viewModelFactory)
.get(T::class.java) .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 val Activity.coreActivityComponent
get() = CoreApp.coreComponent.activityComponentBuilder().activity(this).build() get() = CoreApp.coreComponent.activityComponentBuilder().activity(this).build()
} }

View File

@ -25,6 +25,4 @@ import androidx.lifecycle.ViewModelProviders
inline fun <reified T : ViewModel> Fragment.viewModel( inline fun <reified T : ViewModel> Fragment.viewModel(
viewModelFactory: ViewModelProvider.Factory viewModelFactory: ViewModelProvider.Factory
) = ) = ViewModelProviders.of(this, viewModelFactory).get(T::class.java)
ViewModelProviders.of(this, viewModelFactory)
.get(T::class.java)

View File

@ -20,6 +20,7 @@ package org.kiwix.kiwixmobile.core.main
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.ActionMode import android.view.ActionMode
import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
@ -38,6 +39,8 @@ import org.kiwix.kiwixmobile.core.utils.ExternalLinkOpener
import javax.inject.Inject import javax.inject.Inject
const val KIWIX_SUPPORT_URL = "https://www.kiwix.org/support" 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 { abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
@ -94,6 +97,9 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
?.getCurrentWebView() ?.getCurrentWebView()
} }
override fun onSupportNavigateUp(): Boolean =
navController.navigateUp() || super.onSupportNavigateUp()
open fun setupDrawerToggle(toolbar: Toolbar) { open fun setupDrawerToggle(toolbar: Toolbar) {
drawerToggle = drawerToggle =
ActionBarDrawerToggle( ActionBarDrawerToggle(
@ -163,6 +169,20 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
} }
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean {
if (activeFragments().filterIsInstance<FragmentActivityExtensions>().isEmpty()) {
return super.onCreateOptionsMenu(menu)
}
var returnValue = true
activeFragments().filterIsInstance<FragmentActivityExtensions>().forEach {
if (it.onCreateOptionsMenu(menu, this) == FragmentActivityExtensions.Super.ShouldCall) {
returnValue = super.onCreateOptionsMenu(menu)
}
}
return returnValue
}
private fun activeFragments(): MutableList<Fragment> = private fun activeFragments(): MutableList<Fragment> =
supportFragmentManager.fragments supportFragmentManager.fragments

View File

@ -282,15 +282,10 @@ public abstract class CoreReaderFragment extends BaseFragment
} }
} }
@SuppressLint("ClickableViewAccessibility") @Override @SuppressLint("ClickableViewAccessibility")
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { @Override public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true); setHasOptionsMenu(true);
}
@SuppressLint("ClickableViewAccessibility")
@Override public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
AppCompatActivity activity = (AppCompatActivity) getActivity(); AppCompatActivity activity = (AppCompatActivity) getActivity();
new WebView(activity).destroy(); // Workaround for buggy webViews see #710 new WebView(activity).destroy(); // Workaround for buggy webViews see #710
handleLocaleCheck(); handleLocaleCheck();
@ -786,11 +781,9 @@ public abstract class CoreReaderFragment extends BaseFragment
@Override public void onDestroyView() { @Override public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
safeDispose(); safeDispose();
super.onDestroy();
tabCallback = null; tabCallback = null;
hideBackToTopTimer.cancel(); hideBackToTopTimer.cancel();
hideBackToTopTimer = null; hideBackToTopTimer = null;
webViewList.clear();
// TODO create a base Activity class that class this. // TODO create a base Activity class that class this.
FileUtils.deleteCachedFiles(getActivity()); FileUtils.deleteCachedFiles(getActivity());
tts.shutdown(); tts.shutdown();
@ -811,7 +804,7 @@ public abstract class CoreReaderFragment extends BaseFragment
} }
private KiwixWebView initalizeWebView(String url) { 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); KiwixWebView webView = createWebView(attrs);
loadUrl(url, webView); loadUrl(url, webView);
return webView; return webView;
@ -1601,7 +1594,7 @@ public abstract class CoreReaderFragment extends BaseFragment
@Override @Override
public void webViewProgressChanged(int progress) { public void webViewProgressChanged(int progress) {
if (checkNull(progressBar)) { if (checkNull(progressBar) && isAdded()) {
progressBar.show(); progressBar.show();
progressBar.setProgress(progress); progressBar.setProgress(progress);
if (progress == 100) { if (progress == 100) {

View File

@ -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) { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_page, menu) inflater.inflate(R.menu.menu_page, menu)
val search = menu.findItem(R.id.menu_page_search).actionView as SearchView 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 { search.setOnQueryTextListener(SimpleTextListener {
pageViewModel.actions.offer(Action.Filter(it)) pageViewModel.actions.offer(Action.Filter(it))
}) })
pageViewModel.state.observe(viewLifecycleOwner, Observer(::render)) super<BaseFragment>.onCreateOptionsMenu(menu, inflater)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
@ -110,18 +115,16 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
} }
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onViewCreated(view, savedInstanceState)
val activity = requireActivity() as CoreMainActivity val activity = requireActivity() as CoreMainActivity
recycler_view.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false)
recycler_view.adapter = pageAdapter
activity.setSupportActionBar(toolbar) activity.setSupportActionBar(toolbar)
activity.supportActionBar?.apply { activity.supportActionBar?.apply {
setDisplayHomeAsUpEnabled(true) setDisplayHomeAsUpEnabled(true)
title = title title = title
} }
recycler_view.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false)
recycler_view.adapter = pageAdapter
no_page.text = noItemsString no_page.text = noItemsString
page_switch.text = switchString page_switch.text = switchString
@ -130,16 +133,14 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
page_switch.setOnCheckedChangeListener { _, isChecked -> page_switch.setOnCheckedChangeListener { _, isChecked ->
pageViewModel.actions.offer(Action.UserClickedShowAllToggle(isChecked)) pageViewModel.actions.offer(Action.UserClickedShowAllToggle(isChecked))
} }
pageViewModel.state.observe(viewLifecycleOwner, Observer(::render))
} }
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? = inflater.inflate(R.layout.fragment_page, container, false)
setHasOptionsMenu(true)
return inflater.inflate(R.layout.fragment_page, container, false)
}
override fun onDestroy() { override fun onDestroy() {
compositeDisposable.clear() compositeDisposable.clear()

View File

@ -2,8 +2,8 @@ package org.kiwix.kiwixmobile.core.page.bookmark
import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.R
import org.kiwix.kiwixmobile.core.base.BaseActivity 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.extensions.viewModel
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
import org.kiwix.kiwixmobile.core.page.PageFragment import org.kiwix.kiwixmobile.core.page.PageFragment
import org.kiwix.kiwixmobile.core.page.adapter.PageAdapter import org.kiwix.kiwixmobile.core.page.adapter.PageAdapter
import org.kiwix.kiwixmobile.core.page.adapter.PageDelegate.PageItemDelegate 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 noItemsString: String by lazy { getString(R.string.no_bookmarks) }
override val switchString: String by lazy { getString(R.string.bookmarks_from_current_book) } override val switchString: String by lazy { getString(R.string.bookmarks_from_current_book) }
override val switchIsChecked: Boolean by lazy { sharedPreferenceUtil.showBookmarksAllBooks } override val switchIsChecked: Boolean by lazy { sharedPreferenceUtil.showBookmarksAllBooks }
override fun inject(baseActivity: BaseActivity) { 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) } override val searchQueryHint: String by lazy { getString(R.string.search_bookmarks) }

View File

@ -35,11 +35,7 @@ class BookmarkViewModel @Inject constructor(
) : PageViewModel<BookmarkItem, BookmarkState>(bookmarksDao, sharedPrefs, zimReaderContainer) { ) : PageViewModel<BookmarkItem, BookmarkState>(bookmarksDao, sharedPrefs, zimReaderContainer) {
override fun initialState(): BookmarkState = override fun initialState(): BookmarkState =
BookmarkState( BookmarkState(emptyList(), sharedPreferenceUtil.showBookmarksAllBooks, zimReaderContainer.id)
emptyList(),
sharedPreferenceUtil.showBookmarksAllBooks,
zimReaderContainer.id
)
override fun updatePagesBasedOnFilter( override fun updatePagesBasedOnFilter(
state: BookmarkState, state: BookmarkState,

View File

@ -22,7 +22,7 @@ import androidx.appcompat.app.AppCompatActivity
import io.reactivex.processors.PublishProcessor import io.reactivex.processors.PublishProcessor
import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.base.SideEffect
import org.kiwix.kiwixmobile.core.dao.PageDao 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.bookmark.adapter.BookmarkItem
import org.kiwix.kiwixmobile.core.page.viewmodel.PageState import org.kiwix.kiwixmobile.core.page.viewmodel.PageState
import org.kiwix.kiwixmobile.core.page.viewmodel.effects.DeletePageItems import org.kiwix.kiwixmobile.core.page.viewmodel.effects.DeletePageItems
@ -38,7 +38,7 @@ data class ShowDeleteBookmarksDialog(
) : SideEffect<Unit> { ) : SideEffect<Unit> {
@Inject lateinit var dialogShower: DialogShower @Inject lateinit var dialogShower: DialogShower
override fun invokeWith(activity: AppCompatActivity) { override fun invokeWith(activity: AppCompatActivity) {
(activity as CoreMainActivity).cachedComponent.inject(this) activity.cachedComponent().inject(this)
dialogShower.show(if (state.isInSelectionState) DeleteSelectedBookmarks else DeleteAllBookmarks, dialogShower.show(if (state.isInSelectionState) DeleteSelectedBookmarks else DeleteAllBookmarks,
{ effects.offer(DeletePageItems(state, pageDao)) }) { effects.offer(DeletePageItems(state, pageDao)) })
} }

View File

@ -13,11 +13,7 @@ import org.kiwix.kiwixmobile.core.page.history.viewmodel.HistoryViewModel
const val USER_CLEARED_HISTORY: String = "user_cleared_history" const val USER_CLEARED_HISTORY: String = "user_cleared_history"
class HistoryFragment : PageFragment() { class HistoryFragment : PageFragment() {
override val pageViewModel by lazy { override val pageViewModel by lazy { viewModel<HistoryViewModel>(viewModelFactory) }
viewModel<HistoryViewModel>(
viewModelFactory
)
}
override val pageAdapter by lazy { override val pageAdapter by lazy {
PageAdapter(PageItemDelegate(this), HistoryDateDelegate()) PageAdapter(PageItemDelegate(this), HistoryDateDelegate())
@ -29,7 +25,7 @@ class HistoryFragment : PageFragment() {
override val switchIsChecked: Boolean by lazy { sharedPreferenceUtil.showHistoryAllBooks } override val switchIsChecked: Boolean by lazy { sharedPreferenceUtil.showHistoryAllBooks }
override fun inject(baseActivity: BaseActivity) { override fun inject(baseActivity: BaseActivity) {
requireActivity().coreActivityComponent.inject(this) baseActivity.coreActivityComponent.inject(this)
} }
override val searchQueryHint: String by lazy { getString(R.string.search_history) } override val searchQueryHint: String by lazy { getString(R.string.search_history) }

View File

@ -22,7 +22,7 @@ import androidx.appcompat.app.AppCompatActivity
import io.reactivex.processors.PublishProcessor import io.reactivex.processors.PublishProcessor
import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.base.SideEffect
import org.kiwix.kiwixmobile.core.dao.PageDao 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.history.viewmodel.HistoryState
import org.kiwix.kiwixmobile.core.page.viewmodel.effects.DeletePageItems import org.kiwix.kiwixmobile.core.page.viewmodel.effects.DeletePageItems
import org.kiwix.kiwixmobile.core.utils.DialogShower import org.kiwix.kiwixmobile.core.utils.DialogShower
@ -37,7 +37,7 @@ data class ShowDeleteHistoryDialog(
) : SideEffect<Unit> { ) : SideEffect<Unit> {
@Inject lateinit var dialogShower: DialogShower @Inject lateinit var dialogShower: DialogShower
override fun invokeWith(activity: AppCompatActivity) { override fun invokeWith(activity: AppCompatActivity) {
(activity as CoreMainActivity).cachedComponent.inject(this) activity.cachedComponent().inject(this)
dialogShower.show(if (state.isInSelectionState) DeleteSelectedHistory else DeleteAllHistory, { dialogShower.show(if (state.isInSelectionState) DeleteSelectedHistory else DeleteAllHistory, {
effects.offer(DeletePageItems(state, pageDao)) effects.offer(DeletePageItems(state, pageDao))
}) })

View File

@ -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.di.components.CoreComponent
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.intent import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.intent
import org.kiwix.kiwixmobile.core.main.CoreMainActivity 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.core.utils.REQUEST_PREFERENCES
import org.kiwix.kiwixmobile.custom.R import org.kiwix.kiwixmobile.custom.R
import org.kiwix.kiwixmobile.custom.customActivityComponent 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 { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (drawerToggle.isDrawerIndicatorEnabled) { if (drawerToggle.isDrawerIndicatorEnabled) {
return drawerToggle.onOptionsItemSelected(item) return drawerToggle.onOptionsItemSelected(item)
@ -87,7 +85,7 @@ class CustomMainActivity : CoreMainActivity() {
} }
override fun openPage(pageUrl: String, zimFilePath: String) { 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) navigate(R.id.customReaderFragment, bundle)
} }
} }

View File

@ -30,6 +30,7 @@ import android.os.Bundle
import android.provider.Settings import android.provider.Settings
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.View
import android.widget.ImageView import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat 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.BaseActivity
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions.Super 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.ShouldCall
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setupDrawerToggle
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start 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.CoreReaderFragment
import org.kiwix.kiwixmobile.core.main.MainMenu import org.kiwix.kiwixmobile.core.main.MainMenu
import org.kiwix.kiwixmobile.core.reader.ZimFileReader.Companion.CONTENT_PREFIX 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 customFileValidator: CustomFileValidator
@Inject lateinit var dialogShower: DialogShower @Inject lateinit var dialogShower: DialogShower
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onViewCreated(view, savedInstanceState)
if (enforcedLanguage()) { if (enforcedLanguage()) {
return return
} }
@ -79,8 +80,10 @@ class CustomReaderFragment : CoreReaderFragment() {
val toolbarToc = activity?.findViewById<ImageView>(R.id.bottom_toolbar_toc) val toolbarToc = activity?.findViewById<ImageView>(R.id.bottom_toolbar_toc)
toolbarToc?.isEnabled = false toolbarToc?.isEnabled = false
} }
(activity as AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(true) with(activity as AppCompatActivity) {
(activity as CoreMainActivity).setupDrawerToggle(toolbar) supportActionBar!!.setDisplayHomeAsUpEnabled(true)
setupDrawerToggle(toolbar)
}
} }
private fun loadPageFromNavigationArguments() { private fun loadPageFromNavigationArguments() {