#2159 merge with 2147 and implementation of BaseFragmentActivityExtensions in NavHostFragment

This commit is contained in:
HissPirat 2020-06-24 11:52:11 +02:00
commit 71e6bbcb6e
14 changed files with 193 additions and 179 deletions

View File

@ -5,7 +5,7 @@
<ID>EmptyFunctionBlock:None.kt$None${ }</ID>
<ID>EmptyFunctionBlock:SimplePageChangeListener.kt$SimplePageChangeListener${ }</ID>
<ID>EmptyFunctionBlock:ZimHostActivity.kt$ZimHostActivity.&lt;no name provided&gt;${}</ID>
<ID>ForbiddenComment:KiwixMainFragment.kt$KiwixMainFragment$// TODO: Show to user</ID>
<ID>ForbiddenComment:KiwixReaderFragment.kt$KiwixReaderFragment$// TODO: Show to user</ID>
<ID>ForbiddenComment:ReaderFragment.kt$ReaderFragment$// TODO: Show to user</ID>
<ID>LongParameterList:ZimManageViewModel.kt$ZimManageViewModel$( booksOnFileSystem: List&lt;BookOnDisk&gt;, activeDownloads: List&lt;DownloadModel&gt;, allLanguages: List&lt;Language&gt;, libraryNetworkEntity: LibraryNetworkEntity, filter: String, fileSystemState: FileSystemState )</ID>
<ID>MagicNumber:LibraryListItem.kt$LibraryListItem.LibraryDownloadItem$1000L</ID>
@ -46,7 +46,7 @@
<ID>ReturnCount:Fat32Checker.kt$Fat32Checker$private fun canCreate4GbFile(storage: String): Boolean</ID>
<ID>ReturnCount:LanguageActivity.kt$LanguageActivity$override fun onOptionsItemSelected(item: MenuItem): Boolean</ID>
<ID>TooGenericExceptionCaught:FileWritingFileSystemChecker.kt$FileWritingFileSystemChecker$e: Exception</ID>
<ID>TooGenericExceptionCaught:KiwixMainFragment.kt$KiwixMainFragment$e: Exception</ID>
<ID>TooGenericExceptionCaught:KiwixReaderFragment.kt$KiwixReaderFragment$e: Exception</ID>
<ID>TooGenericExceptionCaught:ReaderFragment.kt$ReaderFragment$e: Exception</ID>
<ID>TooGenericExceptionThrown:ActivityExtensions.kt$throw RuntimeException( """ applicationContext is ${applicationContext::class.java.simpleName} application is ${application::class.java.simpleName} """.trimIndent() )</ID>
<ID>TooGenericExceptionThrown:LibraryViewHolder.kt$LibraryViewHolder.LibraryBookViewHolder$throw RuntimeException("impossible invalid state: ${item.fileSystemState}")</ID>

View File

@ -27,10 +27,10 @@ import org.kiwix.kiwixmobile.intro.IntroModule
import org.kiwix.kiwixmobile.language.LanguageActivity
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.library.OnlineLibraryFragment
import org.kiwix.kiwixmobile.main.KiwixReaderFragment
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragment
import org.kiwix.kiwixmobile.nav.destination.library.OnlineLibraryFragment
import org.kiwix.kiwixmobile.nav.destination.reader.ReaderFragment
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity
import org.kiwix.kiwixmobile.splash.KiwixSplashActivity
@ -63,9 +63,9 @@ interface KiwixActivityComponent {
fun inject(zimHostActivity: ZimHostActivity)
fun inject(introActivity: IntroActivity)
fun inject(kiwixSplashActivity: KiwixSplashActivity)
fun inject(kiwixMainFragment: KiwixMainFragment)
fun inject(kiwixNewNavigationActivity: KiwixNewNavigationActivity)
fun inject(onlineLibraryFragment: OnlineLibraryFragment)
fun inject(kiwixMainFragment: KiwixReaderFragment)
@Subcomponent.Builder
interface Builder {

View File

@ -18,11 +18,8 @@
package org.kiwix.kiwixmobile.main
import android.content.Intent
import android.os.Bundle
import android.view.ActionMode
import org.kiwix.kiwixmobile.R
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions
import org.kiwix.kiwixmobile.core.di.components.CoreComponent
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
import org.kiwix.kiwixmobile.kiwixActivityComponent
@ -32,35 +29,6 @@ class KiwixMainActivity : CoreMainActivity() {
kiwixActivityComponent.inject(this)
}
override fun onActionModeStarted(mode: ActionMode) {
super.onActionModeStarted(mode)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onActionModeStarted(mode, this)
}
}
override fun onActionModeFinished(mode: ActionMode) {
super.onActionModeFinished(mode)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onActionModeFinished(mode, this)
}
}
override fun onBackPressed() {
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
if (it.onBackPressed(this) == BaseFragmentActivityExtensions.Super.ShouldCall) {
super.onBackPressed()
}
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onNewIntent(intent, this)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kiwix_new_navigation)
@ -69,6 +37,6 @@ class KiwixMainActivity : CoreMainActivity() {
return
}
supportFragmentManager.beginTransaction()
.add(R.id.kiwix_fragment_containter, KiwixMainFragment()).commit()
.add(R.id.kiwix_fragment_containter, KiwixReaderFragment()).commit()
}
}

View File

@ -30,10 +30,10 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
import org.kiwix.kiwixmobile.R
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions
import org.kiwix.kiwixmobile.core.di.components.CoreComponent
import org.kiwix.kiwixmobile.core.main.CoreNewNavigationActivity
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
import org.kiwix.kiwixmobile.kiwixActivityComponent
class KiwixNewNavigationActivity : CoreNewNavigationActivity() {
class KiwixNewNavigationActivity : CoreMainActivity() {
private lateinit var navController: NavController
private lateinit var appBarConfiguration: AppBarConfiguration
override fun injection(coreComponent: CoreComponent) {

View File

@ -53,7 +53,7 @@ import org.kiwix.kiwixmobile.webserver.ZimHostActivity
import org.kiwix.kiwixmobile.zim_manager.ZimManageActivity
import java.io.File
class KiwixMainFragment : CoreReaderFragment() {
class KiwixReaderFragment : CoreReaderFragment() {
override fun inject(baseActivity: BaseActivity) {
baseActivity.kiwixActivityComponent.inject(this)

View File

@ -19,11 +19,87 @@
package org.kiwix.kiwixmobile.main
import android.content.Intent
import android.view.ActionMode
import android.view.Menu
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions.Super
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions.Super.ShouldCall
import org.kiwix.kiwixmobile.core.main.KiwixWebView
import org.kiwix.kiwixmobile.core.main.WebViewProvider
class NavigationHostFragment : NavHostFragment() {
class NavigationHostFragment : NavHostFragment(), WebViewProvider, BaseFragmentActivityExtensions {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
childFragmentManager.fragments.forEach { it.onActivityResult(requestCode, resultCode, data) }
}
override fun getCurrentWebView(): KiwixWebView? {
return childFragmentManager.fragments.filterIsInstance<WebViewProvider>().firstOrNull()
?.getCurrentWebView()
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
childFragmentManager.fragments.forEach {
it.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}
override fun onActionModeStarted(
actionMode: ActionMode,
activity: AppCompatActivity
): Super {
var result = ShouldCall
childFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
result = it.onActionModeStarted(actionMode, activity)
}
return result
}
override fun onActionModeFinished(
actionMode: ActionMode,
activity: AppCompatActivity
): Super {
var result = ShouldCall
childFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
result = it.onActionModeFinished(actionMode, activity)
}
return result
}
override fun onBackPressed(activity: AppCompatActivity): Super {
var result = ShouldCall
childFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
result = it.onBackPressed(activity)
}
return result
}
override fun onNewIntent(
intent: Intent,
activity: AppCompatActivity
): Super {
var result = ShouldCall
childFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
result = it.onNewIntent(intent, activity)
}
return result
}
override fun onCreateOptionsMenu(
menu: Menu,
activity: AppCompatActivity
): Super {
var result = ShouldCall
childFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
result = it.onCreateOptionsMenu(menu, activity)
}
return result
}
}

View File

@ -22,16 +22,17 @@ import android.content.Intent
import android.view.ActionMode
import android.view.Menu
import androidx.appcompat.app.AppCompatActivity
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions.Super.ShouldCall
interface BaseFragmentActivityExtensions {
enum class Super {
ShouldCall,
DontCall
ShouldNotCall
}
fun onActionModeStarted(actionMode: ActionMode, activity: AppCompatActivity): Super
fun onActionModeFinished(actionMode: ActionMode, activity: AppCompatActivity): Super
fun onBackPressed(activity: AppCompatActivity): Super
fun onNewIntent(intent: Intent, activity: AppCompatActivity): Super
fun onCreateOptionsMenu(menu: Menu, activity: AppCompatActivity): Super
fun onActionModeStarted(actionMode: ActionMode, activity: AppCompatActivity): Super = ShouldCall
fun onActionModeFinished(actionMode: ActionMode, activity: AppCompatActivity): Super = ShouldCall
fun onBackPressed(activity: AppCompatActivity): Super = ShouldCall
fun onNewIntent(intent: Intent, activity: AppCompatActivity): Super = ShouldCall
fun onCreateOptionsMenu(menu: Menu, activity: AppCompatActivity): Super = ShouldCall
}

View File

@ -1,50 +0,0 @@
/*
* Kiwix Android
* Copyright (c) 2019 Kiwix <android.kiwix.org>
* 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 <http://www.gnu.org/licenses/>.
*
*/
package org.kiwix.kiwixmobile.core.main;
import android.content.Intent;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import org.jetbrains.annotations.Nullable;
import org.kiwix.kiwixmobile.core.R;
import org.kiwix.kiwixmobile.core.base.BaseActivity;
public abstract class CoreMainActivity extends BaseActivity implements WebViewProvider {
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override protected void onActivityResult(int requestCode, int resultCode,
@androidx.annotation.Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
for (Fragment it : getSupportFragmentManager().getFragments()) {
it.onActivityResult(requestCode, resultCode, data);
}
}
@androidx.annotation.Nullable @Override public KiwixWebView getCurrentWebView() {
for (Fragment frag : getSupportFragmentManager().getFragments()) {
if (frag instanceof WebViewProvider) {
return ((WebViewProvider) frag).getCurrentWebView();
}
}
return null;
}
}

View File

@ -0,0 +1,83 @@
/*
* Kiwix Android
* Copyright (c) 2019 Kiwix <android.kiwix.org>
* 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 <http://www.gnu.org/licenses/>.
*
*/
package org.kiwix.kiwixmobile.core.main
import android.content.Intent
import android.os.Bundle
import android.view.ActionMode
import org.kiwix.kiwixmobile.core.R
import org.kiwix.kiwixmobile.core.base.BaseActivity
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions.Super.ShouldCall
abstract class CoreMainActivity : BaseActivity(), WebViewProvider {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
supportFragmentManager.fragments.forEach { it.onActivityResult(requestCode, resultCode, data) }
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
supportFragmentManager.fragments.forEach {
it.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}
override fun onActionModeStarted(mode: ActionMode) {
super.onActionModeStarted(mode)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onActionModeStarted(mode, this)
}
}
override fun onActionModeFinished(mode: ActionMode) {
super.onActionModeFinished(mode)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onActionModeFinished(mode, this)
}
}
override fun onBackPressed() {
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
if (it.onBackPressed(this) == ShouldCall) {
super.onBackPressed()
}
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onNewIntent(intent, this)
}
}
override fun getCurrentWebView(): KiwixWebView? {
return supportFragmentManager.fragments.filterIsInstance<WebViewProvider>().firstOrNull()
?.getCurrentWebView()
}
}

View File

@ -1,39 +0,0 @@
/*
* Kiwix Android
* Copyright (c) 2020 Kiwix <android.kiwix.org>
* 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 <http://www.gnu.org/licenses/>.
*
*/
package org.kiwix.kiwixmobile.core.main;
import android.content.Intent;
import androidx.fragment.app.Fragment;
import org.kiwix.kiwixmobile.core.base.BaseActivity;
public abstract class CoreNewNavigationActivity extends BaseActivity {
@Override protected void onActivityResult(int requestCode, int resultCode,
@androidx.annotation.Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
for (Fragment it : getSupportFragmentManager().getFragments()) {
it.onActivityResult(requestCode, resultCode, data);
}
}
@Override public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
}
}

View File

@ -300,13 +300,12 @@ public abstract class CoreReaderFragment extends BaseFragment
getActivity().getMenuInflater().inflate(R.menu.menu_webview_action, menu);
configureWebViewSelectionHandler(menu);
}
return Super.ShouldCall;
}
@NotNull @Override public Super onActionModeFinished(@NotNull ActionMode actionMode,
@NotNull AppCompatActivity activity) {
actionMode = null;
this.actionMode = null;
return Super.ShouldCall;
}
@ -654,7 +653,7 @@ public abstract class CoreReaderFragment extends BaseFragment
} else {
return Super.ShouldCall;
}
return Super.DontCall;
return Super.ShouldNotCall;
}
private void checkForRateDialog() {

View File

@ -23,6 +23,7 @@ import android.view.Menu
import android.view.MenuItem
import android.widget.TextView
import androidx.core.view.isVisible
import org.kiwix.kiwixmobile.core.BuildConfig
import org.kiwix.kiwixmobile.core.Intents.internal
import org.kiwix.kiwixmobile.core.R
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.intent
@ -108,6 +109,9 @@ class MainMenu(
tabSwitcher = null
tabSwitcherTextView = null
}
newNavigation.isVisible = BuildConfig.DEBUG
randomArticle.setShowAsAction(
if (activity.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE)
MenuItem.SHOW_AS_ACTION_IF_ROOM

View File

@ -18,10 +18,7 @@
package org.kiwix.kiwixmobile.custom.main
import android.content.Intent
import android.os.Bundle
import android.view.ActionMode
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions
import org.kiwix.kiwixmobile.core.di.components.CoreComponent
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
import org.kiwix.kiwixmobile.custom.R
@ -35,35 +32,6 @@ class CustomMainActivity : CoreMainActivity() {
customActivityComponent.inject(this)
}
override fun onActionModeStarted(mode: ActionMode) {
super.onActionModeStarted(mode)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onActionModeStarted(mode, this)
}
}
override fun onActionModeFinished(mode: ActionMode) {
super.onActionModeFinished(mode)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onActionModeFinished(mode, this)
}
}
override fun onBackPressed() {
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
if (it.onBackPressed(this) == BaseFragmentActivityExtensions.Super.ShouldCall) {
super.onBackPressed()
}
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onNewIntent(intent, this)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

View File

@ -40,11 +40,13 @@ import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.drawerlayout.widget.DrawerLayout
import org.kiwix.kiwixmobile.core.base.BaseActivity
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions.Super
import org.kiwix.kiwixmobile.core.base.BaseFragmentActivityExtensions.Super.ShouldCall
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start
import org.kiwix.kiwixmobile.core.main.CoreReaderFragment
import org.kiwix.kiwixmobile.core.main.MainMenu
import org.kiwix.kiwixmobile.core.main.WebViewCallback
import org.kiwix.kiwixmobile.core.reader.ZimFileReader.Companion.CONTENT_PREFIX
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
import org.kiwix.kiwixmobile.core.utils.DialogShower
import org.kiwix.kiwixmobile.core.utils.KiwixDialog
@ -120,6 +122,14 @@ class CustomReaderFragment : CoreReaderFragment() {
)
}
override fun onBackPressed(activity: AppCompatActivity): Super {
val result = super.onBackPressed(activity)
if (zimReaderContainer.mainPage == getCurrentWebView().url.substringAfter(CONTENT_PREFIX)) {
return ShouldCall
}
return result
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
@ -151,18 +161,12 @@ class CustomReaderFragment : CoreReaderFragment() {
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
val onCreateOptionsMenu = super.onCreateOptionsMenu(menu, requireActivity().menuInflater)
menu.findItem(R.id.menu_help)?.isVisible = false
menu.findItem(R.id.menu_new_navigation)?.isVisible = false
menu.findItem(R.id.menu_openfile)?.isVisible = false
menu.findItem(R.id.menu_host_books)?.isVisible = false
}
override fun onCreateOptionsMenu(
menu: Menu,
activity: AppCompatActivity
): BaseFragmentActivityExtensions.Super = BaseFragmentActivityExtensions.Super.ShouldCall
override fun getIconResId() = R.mipmap.ic_launcher
override fun createWebClient(