diff --git a/.idea/inspectionProfiles/kiwixAndroidInspections.xml b/.idea/inspectionProfiles/kiwixAndroidInspections.xml index 929bc1f6b..e0198680e 100644 --- a/.idea/inspectionProfiles/kiwixAndroidInspections.xml +++ b/.idea/inspectionProfiles/kiwixAndroidInspections.xml @@ -11,6 +11,7 @@ + @@ -57,8 +58,8 @@ - - + + 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 f97ceb307..1e0fc7bd6 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/KiwixMainActivity.kt @@ -21,6 +21,7 @@ package org.kiwix.kiwixmobile.main import android.content.Intent import android.os.Bundle import android.util.Log +import android.view.View import android.widget.Toast import androidx.core.net.toFile import androidx.core.net.toUri @@ -30,6 +31,7 @@ import org.kiwix.kiwixmobile.core.extensions.start import org.kiwix.kiwixmobile.core.extensions.toast import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.main.WebViewCallback +import org.kiwix.kiwixmobile.core.reader.ZimFileReader import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer import org.kiwix.kiwixmobile.core.utils.Constants.EXTRA_ZIM_FILE import org.kiwix.kiwixmobile.core.utils.Constants.TAG_CURRENT_ARTICLES @@ -45,6 +47,7 @@ import org.kiwix.kiwixmobile.zim_manager.ZimManageActivity import java.io.File class KiwixMainActivity : CoreMainActivity() { + private val homeUrl = "file:///android_asset/home.html" override fun injection() { kiwixActivityComponent.inject(this) @@ -55,6 +58,21 @@ class KiwixMainActivity : CoreMainActivity() { manageExternalLaunchAndRestoringViewState() } + override fun onResume() { + super.onResume() + if (zimReaderContainer.zimFile == null && homeUrl != currentWebView.url) { + showHomePage() + } + + if (webViewList.isNotEmpty() && currentWebViewIndex < webViewList.size && + webViewList[currentWebViewIndex].url != null && + webViewList[currentWebViewIndex].url == homeUrl && + webViewList[currentWebViewIndex].findViewById(R.id.get_content_card) != null + ) { + webViewList[currentWebViewIndex].findViewById(R.id.get_content_card).isEnabled = true + } + } + override fun createWebClient( webViewCallback: WebViewCallback, zimReaderContainer: ZimReaderContainer @@ -95,6 +113,24 @@ class KiwixMainActivity : CoreMainActivity() { } } + override fun hasValidFileAndUrl(url: String?, zimFileReader: ZimFileReader?) = + super.hasValidFileAndUrl(url, zimFileReader) && url != homeUrl + + override fun urlIsInvalid() = + super.urlIsInvalid() || currentWebView.url == homeUrl + + override fun showHomePage() { + currentWebView.removeAllViews() + currentWebView.loadUrl(homeUrl) + } + + override fun createNewTab() { + newTab(homeUrl) + } + + override fun isInvalidTitle(zimFileTitle: String?) = + super.isInvalidTitle(zimFileTitle) || homeUrl == currentWebView.url + private fun uriFromIntent() = intent.data ?: intent.getStringExtra(EXTRA_ZIM_FILE)?.let { File(FileUtils.getFileName(it)).toUri() @@ -133,9 +169,7 @@ class KiwixMainActivity : CoreMainActivity() { } override fun manageZimFiles(tab: Int) { - start { - putExtra(ZimManageActivity.TAB_EXTRA, tab) - } + start { putExtra(ZimManageActivity.TAB_EXTRA, tab) } } override fun onNewIntent(intent: Intent?) { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.java b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.java index 6852182da..f232be9bf 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.java @@ -155,8 +155,6 @@ import static org.kiwix.kiwixmobile.core.utils.StyleUtils.dialogStyle; public abstract class CoreMainActivity extends BaseActivity implements WebViewCallback, MainContract.View { - private static final String NEW_TAB = "NEW_TAB"; - private static final String HOME_URL = "file:///android_asset/home.html"; public static boolean isFullscreenOpened; public static boolean refresh; public static boolean wifiOnly; @@ -186,9 +184,9 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa @BindView(R2.id.activity_main_nav_view) NavigationView tableDrawerRightContainer; @BindView(R2.id.activity_main_content_frame) - FrameLayout contentFrame; + protected FrameLayout contentFrame; @BindView(R2.id.bottom_toolbar) - LinearLayout bottomToolbar; + protected LinearLayout bottomToolbar; @BindView(R2.id.bottom_toolbar_bookmark) ImageView bottomToolbarBookmark; @BindView(R2.id.bottom_toolbar_arrow_back) @@ -198,7 +196,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa @BindView(R2.id.tab_switcher_recycler_view) RecyclerView tabRecyclerView; @BindView(R2.id.activity_main_tab_switcher) - View tabSwitcherRoot; + protected View tabSwitcherRoot; @BindView(R2.id.tab_switcher_close_all_tabs) FloatingActionButton closeAllTabsButton; @BindView(R2.id.snackbar_root) @@ -211,7 +209,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa @Inject StorageObserver storageObserver; @Inject - ZimReaderContainer zimReaderContainer; + protected ZimReaderContainer zimReaderContainer; private CountDownTimer hideBackToTopTimer = new CountDownTimer(1200, 1200) { @Override @@ -238,7 +236,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa private KiwixTextToSpeech tts; private CompatFindActionModeCallback compatCallback; private TabsAdapter tabsAdapter; - private int currentWebViewIndex = 0; + protected int currentWebViewIndex = 0; private File file; private ActionMode actionMode = null; private KiwixWebView tempForUndo; @@ -392,11 +390,11 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa selectTab(webViewList.size() - 1); } if (intent.hasExtra(EXTRA_CHOSE_X_URL)) { - newTab(); + newMainPageTab(); getCurrentWebView().loadUrl(intent.getStringExtra(EXTRA_CHOSE_X_URL)); } if (intent.hasExtra(EXTRA_CHOSE_X_TITLE)) { - newTab(); + newMainPageTab(); getCurrentWebView().loadUrl(intent.getStringExtra(EXTRA_CHOSE_X_TITLE)); } } @@ -507,7 +505,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa } } - private void hideTabSwitcher() { + protected void hideTabSwitcher() { actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setDisplayShowTitleEnabled(true); @@ -644,15 +642,15 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa } private void updateTitle() { - String zimFileTitle = zimReaderContainer.getZimFileTitle(); - if (zimFileTitle == null) { - zimFileTitle = getString(R.string.app_name); - } - if (zimFileTitle.trim().isEmpty() || HOME_URL.equals(getCurrentWebView().getUrl())) { - actionBar.setTitle(createMenuText(getString(R.string.app_name))); - } else { - actionBar.setTitle(createMenuText(zimFileTitle)); - } + actionBar.setTitle(createMenuText(getValidTitle(zimReaderContainer.getZimFileTitle()))); + } + + private String getValidTitle(String zimFileTitle) { + return isInvalidTitle(zimFileTitle) ? getString(R.string.app_name) : zimFileTitle; + } + + protected boolean isInvalidTitle(String zimFileTitle) { + return zimFileTitle == null || zimFileTitle.trim().isEmpty(); } private void setUpTTS() { @@ -768,7 +766,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa WebViewCallback webViewCallback, ZimReaderContainer zimReaderContainer); - private KiwixWebView newTab() { + protected KiwixWebView newMainPageTab() { return newTab(contentUrl(zimReaderContainer.getMainPage())); } @@ -830,7 +828,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa } protected KiwixWebView getCurrentWebView() { - if (webViewList.size() == 0) return newTab(); + if (webViewList.size() == 0) return newMainPageTab(); if (currentWebViewIndex < webViewList.size()) { return webViewList.get(currentWebViewIndex); } else { @@ -845,7 +843,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa if (tabSwitcherRoot.getVisibility() == View.VISIBLE) { hideTabSwitcher(); } - newTab(HOME_URL); + createNewTab(); return true; } else if (itemId == R.id.menu_add_note) { if (requestExternalStorageWritePermissionForNotes()) { @@ -898,6 +896,8 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa return super.onOptionsItemSelected(item); } + protected abstract void createNewTab(); + /** Creates the full screen AddNoteDialog, which is a DialogFragment */ private void showAddNoteDialog() { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); @@ -986,12 +986,6 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa } } - @Override - public void showHomePage() { - getCurrentWebView().removeAllViews(); - getCurrentWebView().loadUrl(HOME_URL); - } - @Override public void openExternalUrl(Intent intent) { if (intent.resolveActivity(getPackageManager()) != null) { @@ -1219,12 +1213,13 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa private void openHomeScreen() { new Handler().postDelayed(() -> { if (webViewList.size() == 0) { - newTab(HOME_URL); + createNewTab(); hideTabSwitcher(); } }, 300); } + @OnClick(R2.id.bottom_toolbar_bookmark) public void toggleBookmark() { //Check maybe need refresh @@ -1277,17 +1272,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa recreate(); } presenter.loadCurrentZimBookmarksUrl(); - if (zimReaderContainer.getZimFile() == null && - !HOME_URL.equals(getCurrentWebView().getUrl())) { - showHomePage(); - } - if (!webViewList.isEmpty() && currentWebViewIndex < webViewList.size() && - webViewList.get(currentWebViewIndex).getUrl() != null && - webViewList.get(currentWebViewIndex).getUrl().equals(HOME_URL) && - webViewList.get(currentWebViewIndex).findViewById(R.id.get_content_card) != null) { - webViewList.get(currentWebViewIndex).findViewById(R.id.get_content_card).setEnabled(true); - } updateBottomToolbarVisibility(); presenter.loadBooks(); @@ -1324,9 +1309,6 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa startActivityForResult(i, REQUEST_FILE_SEARCH); } break; - case NEW_TAB: - newTab(HOME_URL); - break; } } updateWidgets(this); @@ -1334,8 +1316,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa private void updateBottomToolbarVisibility() { if (checkNull(bottomToolbar)) { - if (!HOME_URL.equals( - getCurrentWebView().getUrl()) + if (!urlIsInvalid() && tabSwitcherRoot.getVisibility() != View.VISIBLE) { bottomToolbar.setVisibility(View.VISIBLE); if (getCurrentWebView() instanceof ToolbarStaticKiwixWebView) { @@ -1507,7 +1488,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa } if (resultCode == RESULT_HISTORY_CLEARED) { webViewList.clear(); - newTab(); + newMainPageTab(); tabsAdapter.notifyDataSetChanged(); } loadPrefs(); @@ -1522,7 +1503,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa kiwixWebView.clearHistory(); } webViewList.clear(); - newTab(HOME_URL); + createNewTab(); } else { String title = data.getStringExtra(EXTRA_CHOSE_X_TITLE); String url = data.getStringExtra(EXTRA_CHOSE_X_URL); @@ -1550,7 +1531,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa finish(); return; } - newTab(); + newMainPageTab(); if (url != null) { getCurrentWebView().loadUrl(url); } else if (title != null) { @@ -1608,7 +1589,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa menu.findItem(R.id.menu_read_aloud).setVisible(false); } else { menu.findItem(R.id.menu_fullscreen).setVisible(true); - if (urlIsHomeOrNull()) { + if (urlIsInvalid()) { menu.findItem(R.id.menu_search).setVisible(false); menu.findItem(R.id.menu_read_aloud).setVisible(false); menu.findItem(R.id.menu_random_article).setVisible(false); @@ -1621,9 +1602,8 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa return true; } - private boolean urlIsHomeOrNull() { - return getCurrentWebView().getUrl() == null || - getCurrentWebView().getUrl().equals(HOME_URL); + protected boolean urlIsInvalid(){ + return getCurrentWebView().getUrl() == null; } private void updateTabSwitcherIcon() { @@ -1638,15 +1618,10 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa private void refreshBookmarkSymbol() { if (checkNull(bottomToolbarBookmark)) { - if (getCurrentWebView().getUrl() != null && - zimReaderContainer.getId() != null && - !getCurrentWebView().getUrl().equals(HOME_URL)) { - int icon = bookmarks.contains(getCurrentWebView().getUrl()) ? R.drawable.ic_bookmark_24dp - : R.drawable.ic_bookmark_border_24dp; - bottomToolbarBookmark.setImageResource(icon); - } else { - bottomToolbarBookmark.setImageResource(R.drawable.ic_bookmark_border_24dp); - } + bottomToolbarBookmark.setImageResource( + bookmarks.contains(getCurrentWebView().getUrl()) ? R.drawable.ic_bookmark_24dp + : R.drawable.ic_bookmark_border_24dp + ); } } @@ -1734,7 +1709,7 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa updateBottomToolbarArrowsAlpha(); String url = getCurrentWebView().getUrl(); final ZimFileReader zimFileReader = zimReaderContainer.getZimFileReader(); - if (url != null && !url.equals(HOME_URL) && zimFileReader != null) { + if (hasValidFileAndUrl(url, zimFileReader)) { final long timeStamp = System.currentTimeMillis(); SimpleDateFormat sdf = new SimpleDateFormat("d MMM yyyy", LanguageUtils.getCurrentLocale(this)); @@ -1750,6 +1725,10 @@ public abstract class CoreMainActivity extends BaseActivity implements WebViewCa updateBottomToolbarVisibility(); } + protected boolean hasValidFileAndUrl(String url, ZimFileReader zimFileReader) { + return url != null && zimFileReader != null; + } + @Override public void webViewFailedLoading(String url) { String error = String.format(getString(R.string.error_article_url_not_found), url); diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/files/FileUtils.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/files/FileUtils.kt index 9cef4eed6..fc92d8c7a 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/files/FileUtils.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/files/FileUtils.kt @@ -26,7 +26,6 @@ import android.os.Build.VERSION_CODES import android.os.Environment import android.provider.DocumentsContract import android.util.Log -import org.kiwix.kiwixmobile.core.CoreApp import org.kiwix.kiwixmobile.core.downloader.ChunkUtils import org.kiwix.kiwixmobile.core.entity.LibraryNetworkEntity.Book import org.kiwix.kiwixmobile.core.extensions.get @@ -37,10 +36,6 @@ import java.util.ArrayList object FileUtils { - private val saveFilePath = - "${Environment.getExternalStorageDirectory()}${File.separator}Android" + - "${File.separator}obb${File.separator}${CoreApp.getInstance().packageName}" - @JvmStatic fun getFileCacheDir(context: Context): File? = if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) { context.externalCacheDir @@ -95,11 +90,6 @@ object FileUtils { return false } - /** - * Returns the filename (where the file should be saved) from info about a download - */ - @JvmStatic fun generateSaveFileName(fileName: String) = "$saveFilePath${File.separator}$fileName" - /** * Helper function to ascertain the existence of a file and return true/false appropriately * diff --git a/custom/src/customexample/info.json b/custom/src/customexample/info.json index e843aa4c0..6e34580fb 100644 --- a/custom/src/customexample/info.json +++ b/custom/src/customexample/info.json @@ -4,7 +4,7 @@ "version_name": "2017-07", "version_code": "1", "zim_file": "wikipedia_fr_test_2017-07.zim", - "embed_zim": true, + "embed_zim": false, "ic_launcher": "icon.png", "enforced_lang": "en" -} \ No newline at end of file +} diff --git a/custom/src/customexample/main.1.org.kiwix.kiwixcustomexample.obb b/custom/src/customexample/main.1.org.kiwix.kiwixcustomexample.obb new file mode 100644 index 000000000..789f27252 Binary files /dev/null and b/custom/src/customexample/main.1.org.kiwix.kiwixcustomexample.obb differ diff --git a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt index 69c7de7f2..333435c2c 100644 --- a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt +++ b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt @@ -39,6 +39,15 @@ import java.io.File import java.util.Locale class CustomMainActivity : CoreMainActivity() { + + override fun showHomePage() { + Log.e("CustomMain", "tried to show home page") + } + + override fun createNewTab() { + newMainPageTab() + } + override fun injection() { customActivityComponent.inject(this) } @@ -111,8 +120,7 @@ class CustomMainActivity : CoreMainActivity() { ) } } else { - val fileName = getExpansionAPKFileName() - filePath = FileUtils.generateSaveFileName(fileName) + filePath = generateExpansionFilePath() } Log.d(TAG_KIWIX, "BuildConfig.ZIM_FILE_SIZE = " + BuildConfig.ZIM_FILE_SIZE) @@ -146,12 +154,10 @@ class CustomMainActivity : CoreMainActivity() { } companion object { - /** - * Returns the file name (without full path) for an Expansion APK file from the given context. - * - * @return String the file name of the expansion file - */ - @JvmStatic fun getExpansionAPKFileName() = - "patch.${BuildConfig.CONTENT_VERSION_CODE}.${CoreApp.getInstance().packageName}.obb" + private fun getExpansionAPKFileName() = + "main.${BuildConfig.CONTENT_VERSION_CODE}.${CoreApp.getInstance().packageName}.obb" + + fun generateExpansionFilePath(fileName: String = getExpansionAPKFileName()) = + "${CoreApp.getInstance().obbDir}${File.separator}$fileName" } }