diff --git a/app/src/main/java/org/kiwix/kiwixmobile/main/AddNoteDialog.java b/app/src/main/java/org/kiwix/kiwixmobile/main/AddNoteDialog.java
index dfda49a15..d27fc36c2 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/main/AddNoteDialog.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/main/AddNoteDialog.java
@@ -35,12 +35,11 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.kiwix.kiwixmobile.BuildConfig;
+import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.data.ZimContentProvider;
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
-import static org.kiwix.kiwixmobile.utils.Constants.NOTES_DIRECTORY;
-
/**
* Created by @author Aditya-Sood (21/05/19) as a part of GSoC 2019
*
@@ -53,6 +52,8 @@ import static org.kiwix.kiwixmobile.utils.Constants.NOTES_DIRECTORY;
public class AddNoteDialog extends DialogFragment
implements ConfirmationAlertDialogFragment.UserClickListener {
+ public static final String NOTES_DIRECTORY =
+ Environment.getExternalStorageDirectory() + "/Kiwix/Notes/";
public static final String TAG = "AddNoteDialog";
private SharedPreferenceUtil sharedPreferenceUtil;
@@ -298,7 +299,7 @@ public class AddNoteDialog extends DialogFragment
* "{External Storage}/Kiwix/Notes/ZimFileTitle/ArticleTitle.txt"
* */
- if (isExternalStorageWritable()) {
+ if (KiwixApplication.getInstance().isExternalStorageWritable()) {
if (ContextCompat.checkSelfPermission(getContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
@@ -415,10 +416,6 @@ public class AddNoteDialog extends DialogFragment
}
}
- static boolean isExternalStorageWritable() {
- return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
- }
-
private void showToast(int stringResource, int duration) {
Toast.makeText(getActivity(), stringResource, duration).show();
}
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java
index e975f182b..223b2ad5d 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java
@@ -26,7 +26,6 @@ import android.appwidget.AppWidgetManager;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@@ -86,7 +85,6 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.navigation.NavigationView;
import com.google.android.material.snackbar.Snackbar;
import io.reactivex.android.schedulers.AndroidSchedulers;
-
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -136,8 +134,6 @@ import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_LIBRARY;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_SEARCH;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_ZIM_FILE;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_ZIM_FILE_2;
-import static org.kiwix.kiwixmobile.utils.Constants.NOTES_DIRECTORY;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_KIWIX_MOBILE;
import static org.kiwix.kiwixmobile.utils.Constants.REQUEST_FILE_SEARCH;
import static org.kiwix.kiwixmobile.utils.Constants.REQUEST_FILE_SELECT;
import static org.kiwix.kiwixmobile.utils.Constants.REQUEST_HISTORY_ITEM_CHOSEN;
@@ -154,11 +150,12 @@ import static org.kiwix.kiwixmobile.utils.Constants.TAG_CURRENT_TAB;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_FILE_SEARCHED;
import static org.kiwix.kiwixmobile.utils.Constants.TAG_KIWIX;
import static org.kiwix.kiwixmobile.utils.LanguageUtils.getResourceString;
+import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_KIWIX_MOBILE;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
import static org.kiwix.kiwixmobile.utils.UpdateUtils.reformatProviderUrl;
public class MainActivity extends BaseActivity implements WebViewCallback,
- MainContract.View {
+ MainContract.View {
private static final String NEW_TAB = "NEW_TAB";
private static final String HOME_URL = "file:///android_asset/home.html";
@@ -256,21 +253,21 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private ItemTouchHelper.Callback tabCallback = new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView,
- @NonNull RecyclerView.ViewHolder viewHolder) {
+ @NonNull RecyclerView.ViewHolder viewHolder) {
return makeMovementFlags(0, ItemTouchHelper.UP | ItemTouchHelper.DOWN);
}
@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
- @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState,
- boolean isCurrentlyActive) {
+ @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState,
+ boolean isCurrentlyActive) {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
viewHolder.itemView.setAlpha(1 - Math.abs(dY) / viewHolder.itemView.getMeasuredHeight());
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView,
- @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
+ @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@@ -314,13 +311,13 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void readAloudSelection(Menu menu) {
if (menu != null) {
menu.findItem(R.id.menu_speak_text)
- .setOnMenuItemClickListener(item -> {
- tts.readSelection(getCurrentWebView());
- if (actionMode != null) {
- actionMode.finish();
- }
- return true;
- });
+ .setOnMenuItemClickListener(item -> {
+ tts.readSelection(getCurrentWebView());
+ if (actionMode != null) {
+ actionMode.finish();
+ }
+ return true;
+ });
}
}
@@ -347,7 +344,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
});
tableDrawerRight =
- tableDrawerRightContainer.getHeaderView(0).findViewById(R.id.right_drawer_list);
+ tableDrawerRightContainer.getHeaderView(0).findViewById(R.id.right_drawer_list);
checkForRateDialog();
@@ -364,7 +361,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
setupDocumentParser();
if (BuildConfig.IS_CUSTOM_APP) {
- Log.d(TAG_KIWIX, "This is a custom app:" +BuildConfig.APPLICATION_ID);
+ Log.d(TAG_KIWIX, "This is a custom app:" + BuildConfig.APPLICATION_ID);
if (loadCustomAppContent()) {
Log.d(TAG_KIWIX, "Found custom content, continuing...");
// Continue
@@ -375,7 +372,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
// it didn't crash yet today the app crashes because it tries to load books
// in onResume();
}
-
} else {
manageExternalLaunchAndRestoringViewState();
@@ -388,14 +384,14 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
wasHideToolbar = isHideToolbar;
booksAdapter = new BooksOnDiskAdapter(
- new BookOnDiskDelegate.BookDelegate(sharedPreferenceUtil,
- bookOnDiskItem -> {
- open(bookOnDiskItem);
- return Unit.INSTANCE;
- },
- null,
- null),
- BookOnDiskDelegate.LanguageDelegate.INSTANCE
+ new BookOnDiskDelegate.BookDelegate(sharedPreferenceUtil,
+ bookOnDiskItem -> {
+ open(bookOnDiskItem);
+ return Unit.INSTANCE;
+ },
+ null,
+ null),
+ BookOnDiskDelegate.LanguageDelegate.INSTANCE
);
searchFiles();
@@ -513,8 +509,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
@Override
public void onSectionClick(View view, int position) {
getCurrentWebView().loadUrl("javascript:document.getElementById('"
- + documentSections.get(position).id
- + "').scrollIntoView();");
+ + documentSections.get(position).id
+ + "').scrollIntoView();");
drawerLayout.closeDrawers();
}
});
@@ -524,7 +520,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void showTabSwitcher() {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(
- ContextCompat.getDrawable(this, R.drawable.ic_round_add_white_36dp));
+ ContextCompat.getDrawable(this, R.drawable.ic_round_add_white_36dp));
actionBar.setDisplayShowTitleEnabled(false);
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
@@ -535,7 +531,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
tabSwitcherRoot.setVisibility(View.VISIBLE);
supportInvalidateOptionsMenu();
if (tabsAdapter.getSelected() < webViewList.size() &&
- tabRecyclerView.getLayoutManager() != null) {
+ tabRecyclerView.getLayoutManager() != null) {
tabRecyclerView.getLayoutManager().scrollToPosition(tabsAdapter.getSelected());
}
}
@@ -546,7 +542,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
closeAllTabsButton.setImageDrawable(
- ContextCompat.getDrawable(this, R.drawable.ic_close_black_24dp));
+ ContextCompat.getDrawable(this, R.drawable.ic_close_black_24dp));
tabSwitcherRoot.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
contentFrame.setVisibility(View.VISIBLE);
@@ -598,8 +594,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
visitCounterPref.setCount(tempVisitCount);
if (tempVisitCount >= 10
- && !visitCounterPref.getNoThanksState()
- && NetworkUtils.isNetworkAvailable(this) && !BuildConfig.DEBUG) {
+ && !visitCounterPref.getNoThanksState()
+ && NetworkUtils.isNetworkAvailable(this) && !BuildConfig.DEBUG) {
showRateDialog();
}
}
@@ -607,26 +603,26 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void showRateDialog() {
String title = getString(R.string.rate_dialog_title);
String message = getString(R.string.rate_dialog_msg_1) + " "
- + getString(R.string.app_name)
- + getString(R.string.rate_dialog_msg_2);
+ + getString(R.string.app_name)
+ + getString(R.string.rate_dialog_msg_2);
String positive = getString(R.string.rate_dialog_positive);
String negative = getString(R.string.rate_dialog_negative);
String neutral = getString(R.string.rate_dialog_neutral);
new AlertDialog.Builder(this, dialogStyle())
- .setTitle(title)
- .setMessage(message)
- .setPositiveButton(positive, (dialog, id) -> {
- visitCounterPref.setNoThanksState(true);
- goToRateApp();
- })
- .setNegativeButton(negative, (dialog, id) -> visitCounterPref.setNoThanksState(true))
- .setNeutralButton(neutral, (dialog, id) -> {
- tempVisitCount = 0;
- visitCounterPref.setCount(tempVisitCount);
- })
- .setIcon(ContextCompat.getDrawable(this, R.mipmap.kiwix_icon))
- .show();
+ .setTitle(title)
+ .setMessage(message)
+ .setPositiveButton(positive, (dialog, id) -> {
+ visitCounterPref.setNoThanksState(true);
+ goToRateApp();
+ })
+ .setNegativeButton(negative, (dialog, id) -> visitCounterPref.setNoThanksState(true))
+ .setNeutralButton(neutral, (dialog, id) -> {
+ tempVisitCount = 0;
+ visitCounterPref.setCount(tempVisitCount);
+ })
+ .setIcon(ContextCompat.getDrawable(this, R.mipmap.kiwix_icon))
+ .show();
}
private void goToSearch(boolean isVoice) {
@@ -641,22 +637,21 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
}
private void goToRateApp() {
- Uri kiwixLocalMarketUri = Uri.parse("market://details?id=" + getPackageName());
- Uri kiwixBrowserMarketUri =
- Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName());
+ Uri kiwixLocalMarketUri = Uri.parse("market://details?id=" + getPackageName());
+ Uri kiwixBrowserMarketUri =
+ Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName());
-
- Intent goToMarket = new Intent(Intent.ACTION_VIEW, kiwixLocalMarketUri);
+ Intent goToMarket = new Intent(Intent.ACTION_VIEW, kiwixLocalMarketUri);
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
- Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET |
- Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
+ Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET |
+ Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
- kiwixBrowserMarketUri));
+ kiwixBrowserMarketUri));
}
}
@@ -683,7 +678,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
isSpeaking = true;
runOnUiThread(() -> {
menu.findItem(R.id.menu_read_aloud)
- .setTitle(createMenuItem(getResources().getString(R.string.menu_read_aloud_stop)));
+ .setTitle(createMenuItem(getResources().getString(R.string.menu_read_aloud_stop)));
TTSControls.setVisibility(View.VISIBLE);
});
}
@@ -693,7 +688,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
isSpeaking = false;
runOnUiThread(() -> {
menu.findItem(R.id.menu_read_aloud)
- .setTitle(createMenuItem(getResources().getString(R.string.menu_read_aloud)));
+ .setTitle(createMenuItem(getResources().getString(R.string.menu_read_aloud)));
TTSControls.setVisibility(View.GONE);
pauseTTSButton.setText(R.string.tts_pause);
});
@@ -768,8 +763,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
KiwixWebView webView;
if (!isHideToolbar) {
webView =
- new ToolbarScrollingKiwixWebView(MainActivity.this, this, toolbarContainer, bottomToolbar,
- attrs);
+ new ToolbarScrollingKiwixWebView(MainActivity.this, this, toolbarContainer, bottomToolbar,
+ attrs);
} else {
webView = new ToolbarStaticKiwixWebView(MainActivity.this, this, attrs);
}
@@ -780,7 +775,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private KiwixWebView newTab() {
String mainPage =
- Uri.parse(ZimContentProvider.CONTENT_URI + ZimContentProvider.getMainPage()).toString();
+ Uri.parse(ZimContentProvider.CONTENT_URI + ZimContentProvider.getMainPage()).toString();
return newTab(mainPage);
}
@@ -808,13 +803,13 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
tabsAdapter.notifyItemRemoved(index);
tabsAdapter.notifyItemRangeChanged(index, webViewList.size());
Snackbar.make(snackbarRoot, R.string.tab_closed, Snackbar.LENGTH_LONG)
- .setAction(R.string.undo, v -> {
- webViewList.add(index, tempForUndo);
- tabsAdapter.notifyItemInserted(index);
- setUpWebView();
- updateTabSwitcherIcon();
- })
- .show();
+ .setAction(R.string.undo, v -> {
+ webViewList.add(index, tempForUndo);
+ tabsAdapter.notifyItemInserted(index);
+ setUpWebView();
+ updateTabSwitcherIcon();
+ })
+ .show();
openHomeScreen();
updateTabSwitcherIcon();
}
@@ -853,7 +848,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
- case R.id.menu_new_tab:
case android.R.id.home:
if (tabSwitcherRoot.getVisibility() == View.VISIBLE) {
hideTabSwitcher();
@@ -861,17 +855,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
newTab(HOME_URL);
return true;
- case R.id.menu_home:
- openMainPage();
- break;
-
- case R.id.menu_searchintext:
- compatCallback.setActive();
- compatCallback.setWebView(getCurrentWebView());
- startSupportActionMode(compatCallback);
- compatCallback.showSoftInput();
- break;
-
case R.id.menu_add_note:
if (requestExternalStorageWritePermissionForNotes()) {
// Check permission since notes are stored in the public-external storage
@@ -879,12 +862,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
}
break;
- case R.id.menu_clear_notes:
- if (requestExternalStorageWritePermissionForNotes()) { // Check permission since notes are stored in the public-external storage
- showClearAllNotesDialog();
- }
- break;
-
case R.id.menu_bookmarks_list:
goToBookmarks();
break;
@@ -928,7 +905,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
case R.id.menu_history:
startActivityForResult(new Intent(this, HistoryActivity.class),
- REQUEST_HISTORY_ITEM_CHOSEN);
+ REQUEST_HISTORY_ITEM_CHOSEN);
return true;
case R.id.menu_support_kiwix:
@@ -950,75 +927,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
return super.onOptionsItemSelected(item);
}
- /** Dialog to take user confirmation before deleting all notes */
- private void showClearAllNotesDialog() {
-
- AlertDialog.Builder builder;
- if (sharedPreferenceUtil != null && sharedPreferenceUtil.nightMode()) { // Night Mode support
- builder = new AlertDialog.Builder(this, R.style.AppTheme_Dialog_Night);
- } else {
- builder = new AlertDialog.Builder(this);
- }
-
- builder.setMessage(R.string.delete_notes_confirmation_msg)
- .setNegativeButton(android.R.string.cancel, null) // Do nothing for 'Cancel' button
- .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- clearAllNotes();
- }
- })
- .show();
- }
-
- /** Method to delete all user notes */
- void clearAllNotes() {
-
- boolean result = true; // Result of all delete() calls is &&-ed to this variable
-
- if (AddNoteDialog.isExternalStorageWritable()) {
- if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
- != PackageManager.PERMISSION_GRANTED) {
- Log.d("MainActivity", "WRITE_EXTERNAL_STORAGE permission not granted");
- showToast(R.string.ext_storage_permission_not_granted, Toast.LENGTH_LONG);
- return;
- }
-
- // TODO: Replace below code with Kotlin's deleteRecursively() method
-
- File notesDirectory = new File(NOTES_DIRECTORY);
- File[] filesInNotesDirectory = notesDirectory.listFiles();
-
- if (filesInNotesDirectory == null) { // Notes folder doesn't exist
- showToast(R.string.notes_deletion_none_found, Toast.LENGTH_LONG);
- return;
- }
-
- for (File wikiFileDirectory : filesInNotesDirectory) {
- if (wikiFileDirectory.isDirectory()) {
- File[] filesInWikiDirectory = wikiFileDirectory.listFiles();
-
- for (File noteFile : filesInWikiDirectory) {
- if (noteFile.isFile()) {
- result = result && noteFile.delete();
- }
- }
- }
-
- result = result && wikiFileDirectory.delete(); // Wiki specific notes directory deleted
- }
-
- result =
- result && notesDirectory.delete(); // "{External Storage}/Kiwix/Notes" directory deleted
- }
-
- if (result) {
- showToast(R.string.notes_deletion_successful, Toast.LENGTH_SHORT);
- } else {
- showToast(R.string.notes_deletion_unsuccessful, Toast.LENGTH_SHORT);
- }
- }
-
/** Creates the full screen AddNoteDialog, which is a DialogFragment */
private void showAddNoteDialog() {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
@@ -1039,7 +947,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
if (Build.VERSION.SDK_INT >= 23) { // For Marshmallow & higher API levels
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
- == PackageManager.PERMISSION_GRANTED) {
+ == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
@@ -1051,7 +959,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
}
requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
- REQUEST_WRITE_STORAGE_PERMISSION_ADD_NOTE);
+ REQUEST_WRITE_STORAGE_PERMISSION_ADD_NOTE);
}
} else { // For Android versions below Marshmallow 6.0 (API 23)
return true; // As already requested at install time
@@ -1122,8 +1030,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
// Show popup with warning that this url is external and could lead to additional costs
// or may event not work when the user is offline.
if (intent.hasExtra(EXTRA_EXTERNAL_LINK)
- && intent.getBooleanExtra(EXTRA_EXTERNAL_LINK, false)
- && isExternalLinkPopup) {
+ && intent.getBooleanExtra(EXTRA_EXTERNAL_LINK, false)
+ && isExternalLinkPopup) {
externalLinkPopup(intent);
} else {
startActivity(intent);
@@ -1139,25 +1047,25 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
? R.drawable.ic_warning_white : R.drawable.ic_warning_black;
new AlertDialog.Builder(this, dialogStyle())
- .setTitle(R.string.external_link_popup_dialog_title)
- .setMessage(R.string.external_link_popup_dialog_message)
- .setNegativeButton(android.R.string.no, (dialogInterface, i) -> {
- // do nothing
- })
- .setNeutralButton(R.string.do_not_ask_anymore, (dialogInterface, i) -> {
- sharedPreferenceUtil.putPrefExternalLinkPopup(false);
- isExternalLinkPopup = false;
+ .setTitle(R.string.external_link_popup_dialog_title)
+ .setMessage(R.string.external_link_popup_dialog_message)
+ .setNegativeButton(android.R.string.no, (dialogInterface, i) -> {
+ // do nothing
+ })
+ .setNeutralButton(R.string.do_not_ask_anymore, (dialogInterface, i) -> {
+ sharedPreferenceUtil.putPrefExternalLinkPopup(false);
+ isExternalLinkPopup = false;
- startActivity(intent);
- })
- .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> startActivity(intent))
- .setIcon(warningResId)
- .show();
+ startActivity(intent);
+ })
+ .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> startActivity(intent))
+ .setIcon(warningResId)
+ .show();
}
private void openZimFile(File file, boolean clearHistory) {
if (file.canRead() || Build.VERSION.SDK_INT < 19 || (BuildConfig.IS_CUSTOM_APP
- && Build.VERSION.SDK_INT != 23)) {
+ && Build.VERSION.SDK_INT != 23)) {
if (file.exists()) {
if (ZimContentProvider.setZimFile(file.getAbsolutePath()) != null) {
@@ -1175,40 +1083,40 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
presenter.loadCurrentZimBookmarksUrl();
} else {
Toast.makeText(this, getResources().getString(R.string.error_file_invalid),
- Toast.LENGTH_LONG).show();
+ Toast.LENGTH_LONG).show();
showHomePage();
}
} else {
Log.w(TAG_KIWIX, "ZIM file doesn't exist at " + file.getAbsolutePath());
Toast.makeText(this, getResources().getString(R.string.error_file_not_found),
- Toast.LENGTH_LONG)
- .show();
+ Toast.LENGTH_LONG)
+ .show();
showHomePage();
}
} else {
this.file = file;
ActivityCompat.requestPermissions(this,
- new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
- REQUEST_STORAGE_PERMISSION);
+ new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
+ REQUEST_STORAGE_PERMISSION);
if (BuildConfig.IS_CUSTOM_APP && Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
Toast.makeText(this, getResources().getString(R.string.request_storage_custom),
- Toast.LENGTH_LONG)
- .show();
+ Toast.LENGTH_LONG)
+ .show();
} else {
Toast.makeText(this, getResources().getString(R.string.request_storage), Toast.LENGTH_LONG)
- .show();
+ .show();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
- @NonNull String[] permissions, @NonNull int[] grantResults) {
+ @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_STORAGE_PERMISSION: {
if (grantResults.length > 0
- && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
finish();
Intent newZimFile = new Intent(MainActivity.this, MainActivity.class);
newZimFile.setData(Uri.fromFile(file));
@@ -1224,17 +1132,17 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
case REQUEST_READ_STORAGE_PERMISSION: {
if (grantResults.length > 0
- && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
scanStorageForZims();
} else {
Snackbar.make(snackbarRoot, R.string.request_storage, Snackbar.LENGTH_LONG)
- .setAction(R.string.menu_settings, view -> {
- Intent intent = new Intent();
- intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
- Uri uri = Uri.fromParts("package", getPackageName(), null);
- intent.setData(uri);
- startActivity(intent);
- }).show();
+ .setAction(R.string.menu_settings, view -> {
+ Intent intent = new Intent();
+ intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ Uri uri = Uri.fromParts("package", getPackageName(), null);
+ intent.setData(uri);
+ startActivity(intent);
+ }).show();
}
break;
}
@@ -1246,7 +1154,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
showAddNoteDialog();
} else {
Toast.makeText(getApplicationContext(),
- getString(R.string.ext_storage_write_permission_denied_add_note), Toast.LENGTH_LONG);
+ getString(R.string.ext_storage_write_permission_denied_add_note), Toast.LENGTH_LONG)
+ .show();
}
break;
@@ -1256,9 +1165,9 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void scanStorageForZims() {
storageObserver.getBooksOnFileSystem()
- .take(1)
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(presenter::saveBooks, Throwable::printStackTrace);
+ .take(1)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(presenter::saveBooks, Throwable::printStackTrace);
}
// Workaround for popup bottom menu on older devices
@@ -1290,9 +1199,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void initAllMenuItems() {
try {
menu.findItem(R.id.menu_fullscreen).setVisible(true);
- menu.findItem(R.id.menu_home).setVisible(true);
menu.findItem(R.id.menu_random_article).setVisible(true);
- menu.findItem(R.id.menu_searchintext).setVisible(true);
MenuItem searchItem = menu.findItem(R.id.menu_search);
searchItem.setVisible(true);
@@ -1309,7 +1216,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
menu.findItem(R.id.menu_read_aloud).setVisible(true);
if (isSpeaking) {
menu.findItem(R.id.menu_read_aloud)
- .setTitle(createMenuItem(getResources().getString(R.string.menu_read_aloud_stop)));
+ .setTitle(createMenuItem(getResources().getString(R.string.menu_read_aloud_stop)));
}
}
} catch (Exception e) {
@@ -1368,7 +1275,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
boolean isBookmark = false;
if (articleUrl != null && !bookmarks.contains(articleUrl)) {
if (ZimContentProvider.getId() != null) {
- presenter.saveBookmark( BookmarkItem.fromZimContentProvider(getCurrentWebView().getTitle(), articleUrl));
+ presenter.saveBookmark(
+ BookmarkItem.fromZimContentProvider(getCurrentWebView().getTitle(), articleUrl));
} else {
Toast.makeText(this, R.string.unable_to_add_to_bookmarks, Toast.LENGTH_SHORT).show();
}
@@ -1384,12 +1292,12 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void popBookmarkSnackbar(boolean isBookmark) {
if (isBookmark) {
Snackbar.make(snackbarRoot, R.string.bookmark_added, Snackbar.LENGTH_LONG)
- .setAction(getString(R.string.open), v -> goToBookmarks())
- .setActionTextColor(getResources().getColor(R.color.white))
- .show();
+ .setAction(getString(R.string.open), v -> goToBookmarks())
+ .setActionTextColor(getResources().getColor(R.color.white))
+ .show();
} else {
Snackbar.make(snackbarRoot, R.string.bookmark_removed, Snackbar.LENGTH_LONG)
- .show();
+ .show();
}
}
@@ -1421,9 +1329,9 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
}
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).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();
@@ -1482,12 +1390,12 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void updateBottomToolbarVisibility() {
if (checkNull(bottomToolbar)) {
if (!HOME_URL.equals(
- getCurrentWebView().getUrl())
- && tabSwitcherRoot.getVisibility() != View.VISIBLE) {
+ getCurrentWebView().getUrl())
+ && tabSwitcherRoot.getVisibility() != View.VISIBLE) {
bottomToolbar.setVisibility(View.VISIBLE);
if (getCurrentWebView() instanceof ToolbarStaticKiwixWebView) {
contentFrame.setPadding(0, 0, 0,
- (int) getResources().getDimension(R.dimen.bottom_toolbar_height));
+ (int) getResources().getDimension(R.dimen.bottom_toolbar_height));
} else {
contentFrame.setPadding(0, 0, 0, 0);
}
@@ -1528,10 +1436,10 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
AlertDialog.Builder builder = new AlertDialog.Builder(this, dialogStyle());
builder.setMessage(getString(R.string.hint_contents_drawer_message))
- .setPositiveButton(getString(R.string.got_it), (dialog, id) -> {
- })
- .setTitle(getString(R.string.did_you_know))
- .setIcon(R.drawable.icon_question);
+ .setPositiveButton(getString(R.string.got_it), (dialog, id) -> {
+ })
+ .setTitle(getString(R.string.did_you_know))
+ .setIcon(R.drawable.icon_question);
AlertDialog alert = builder.create();
alert.show();
}
@@ -1539,7 +1447,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void openArticle(String articleUrl) {
if (articleUrl != null) {
getCurrentWebView().loadUrl(
- Uri.parse(ZimContentProvider.CONTENT_URI + articleUrl).toString());
+ Uri.parse(ZimContentProvider.CONTENT_URI + articleUrl).toString());
}
}
@@ -1590,13 +1498,10 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void toggleActionItemsConfig() {
if (menu != null) {
MenuItem random = menu.findItem(R.id.menu_random_article);
- MenuItem home = menu.findItem(R.id.menu_home);
if (getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE) {
random.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
- home.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
} else {
random.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
- home.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
}
}
}
@@ -1621,7 +1526,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
case REQUEST_FILE_SEARCH:
if (resultCode == RESULT_OK) {
String title =
- data.getStringExtra(TAG_FILE_SEARCHED).replace("", "").replace("", "");
+ data.getStringExtra(TAG_FILE_SEARCHED).replace("", "").replace("", "");
boolean isSearchInText = data.getBooleanExtra(EXTRA_SEARCH_IN_TEXT, false);
if (isSearchInText) {
//if the search is localized trigger find in page UI.
@@ -1738,7 +1643,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
this.menu = menu;
if (getCurrentWebView().getUrl() == null ||
- getCurrentWebView().getUrl().equals(HOME_URL)) {
+ getCurrentWebView().getUrl().equals(HOME_URL)) {
menu.findItem(R.id.menu_read_aloud).setVisible(false);
} else {
menu.findItem(R.id.menu_read_aloud).setVisible(true);
@@ -1747,25 +1652,19 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
if (tabSwitcherRoot.getVisibility() == View.VISIBLE) {
menu.findItem(R.id.menu_search).setVisible(false);
menu.findItem(R.id.menu_fullscreen).setVisible(false);
- menu.findItem(R.id.menu_home).setVisible(false);
menu.findItem(R.id.menu_random_article).setVisible(false);
- menu.findItem(R.id.menu_searchintext).setVisible(false);
menu.findItem(R.id.menu_read_aloud).setVisible(false);
} else {
menu.findItem(R.id.menu_search).setVisible(true);
menu.findItem(R.id.menu_fullscreen).setVisible(true);
if (getCurrentWebView().getUrl() == null ||
- getCurrentWebView().getUrl().equals(HOME_URL)) {
+ getCurrentWebView().getUrl().equals(HOME_URL)) {
menu.findItem(R.id.menu_read_aloud).setVisible(false);
- menu.findItem(R.id.menu_home).setVisible(false);
menu.findItem(R.id.menu_random_article).setVisible(false);
- menu.findItem(R.id.menu_searchintext).setVisible(false);
menu.findItem(R.id.menu_host_books).setVisible(true);
} else {
menu.findItem(R.id.menu_read_aloud).setVisible(true);
- menu.findItem(R.id.menu_home).setVisible(true);
menu.findItem(R.id.menu_random_article).setVisible(true);
- menu.findItem(R.id.menu_searchintext).setVisible(true);
}
}
return true;
@@ -1784,10 +1683,10 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void refreshBookmarkSymbol() {
if (checkNull(bottomToolbarBookmark)) {
if (getCurrentWebView().getUrl() != null &&
- ZimContentProvider.getId() != null &&
- !getCurrentWebView().getUrl().equals(HOME_URL)) {
+ ZimContentProvider.getId() != null &&
+ !getCurrentWebView().getUrl().equals(HOME_URL)) {
int icon = bookmarks.contains(getCurrentWebView().getUrl()) ? R.drawable.ic_bookmark_24dp
- : R.drawable.ic_bookmark_border_24dp;
+ : R.drawable.ic_bookmark_border_24dp;
bottomToolbarBookmark.setImageResource(icon);
} else {
bottomToolbarBookmark.setImageResource(R.drawable.ic_bookmark_border_24dp);
@@ -1905,100 +1804,100 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
* loadCustomAppContent Return true if all's well, else false.
*/
private boolean loadCustomAppContent() {
- Log.d(TAG_KIWIX, "Kiwix Custom App starting for the first time. Checking Companion ZIM: "
- + BuildConfig.ZIM_FILE_NAME);
+ Log.d(TAG_KIWIX, "Kiwix Custom App starting for the first time. Checking Companion ZIM: "
+ + BuildConfig.ZIM_FILE_NAME);
- String currentLocaleCode = Locale.getDefault().toString();
- // Custom App recommends to start off a specific language
- if (BuildConfig.ENFORCED_LANG.length() > 0 && !BuildConfig.ENFORCED_LANG
- .equals(currentLocaleCode)) {
+ String currentLocaleCode = Locale.getDefault().toString();
+ // Custom App recommends to start off a specific language
+ if (BuildConfig.ENFORCED_LANG.length() > 0 && !BuildConfig.ENFORCED_LANG
+ .equals(currentLocaleCode)) {
- // change the locale machinery
- LanguageUtils.handleLocaleChange(this, BuildConfig.ENFORCED_LANG);
+ // change the locale machinery
+ LanguageUtils.handleLocaleChange(this, BuildConfig.ENFORCED_LANG);
- // save new locale into preferences for next startup
- sharedPreferenceUtil.putPrefLanguage(BuildConfig.ENFORCED_LANG);
+ // save new locale into preferences for next startup
+ sharedPreferenceUtil.putPrefLanguage(BuildConfig.ENFORCED_LANG);
- // restart activity for new locale to take effect
- this.setResult(1236);
- this.finish();
- this.startActivity(new Intent(this, this.getClass()));
- return false;
+ // restart activity for new locale to take effect
+ this.setResult(1236);
+ this.finish();
+ this.startActivity(new Intent(this, this.getClass()));
+ return false;
+ }
+
+ String filePath = "";
+ if (BuildConfig.HAS_EMBEDDED_ZIM) {
+ String appPath = getPackageResourcePath();
+ File libDir = new File(appPath.substring(0, appPath.lastIndexOf("/")) + "/lib/");
+ if (libDir.exists() && libDir.listFiles().length > 0) {
+ filePath = libDir.listFiles()[0].getPath() + "/" + BuildConfig.ZIM_FILE_NAME;
}
-
- String filePath = "";
- if (BuildConfig.HAS_EMBEDDED_ZIM) {
- String appPath = getPackageResourcePath();
- File libDir = new File(appPath.substring(0, appPath.lastIndexOf("/")) + "/lib/");
- if (libDir.exists() && libDir.listFiles().length > 0) {
- filePath = libDir.listFiles()[0].getPath() + "/" + BuildConfig.ZIM_FILE_NAME;
- }
- if (filePath.isEmpty() || !new File(filePath).exists()) {
- filePath = String.format("/data/data/%s/lib/%s", BuildConfig.APPLICATION_ID,
- BuildConfig.ZIM_FILE_NAME);
- }
- } else {
- String fileName = FileUtils.getExpansionAPKFileName(true);
- filePath = FileUtils.generateSaveFileName(fileName);
+ if (filePath.isEmpty() || !new File(filePath).exists()) {
+ filePath = String.format("/data/data/%s/lib/%s", BuildConfig.APPLICATION_ID,
+ BuildConfig.ZIM_FILE_NAME);
}
+ } else {
+ String fileName = FileUtils.getExpansionAPKFileName(true);
+ filePath = FileUtils.generateSaveFileName(fileName);
+ }
- Log.d(TAG_KIWIX, "BuildConfig.ZIM_FILE_SIZE = " + BuildConfig.ZIM_FILE_SIZE);
- if (!FileUtils.doesFileExist(filePath, BuildConfig.ZIM_FILE_SIZE, false)) {
+ Log.d(TAG_KIWIX, "BuildConfig.ZIM_FILE_SIZE = " + BuildConfig.ZIM_FILE_SIZE);
+ if (!FileUtils.doesFileExist(filePath, BuildConfig.ZIM_FILE_SIZE, false)) {
- AlertDialog.Builder zimFileMissingBuilder =
- new AlertDialog.Builder(this, dialogStyle());
- zimFileMissingBuilder.setTitle(R.string.app_name);
- zimFileMissingBuilder.setMessage(R.string.custom_app_missing_content);
- zimFileMissingBuilder.setIcon(R.mipmap.kiwix_icon);
- final Activity activity = this;
- zimFileMissingBuilder.setPositiveButton(getString(R.string.go_to_play_store),
- (dialog, which) -> {
- String market_uri = "market://details?id=" + BuildConfig.APPLICATION_ID;
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setData(Uri.parse(market_uri));
- startActivity(intent);
- activity.finish();
- });
- zimFileMissingBuilder.setCancelable(false);
- AlertDialog zimFileMissingDialog = zimFileMissingBuilder.create();
- zimFileMissingDialog.show();
- return false;
- } else {
- openZimFile(new File(filePath), true);
- return true;
- }
+ AlertDialog.Builder zimFileMissingBuilder =
+ new AlertDialog.Builder(this, dialogStyle());
+ zimFileMissingBuilder.setTitle(R.string.app_name);
+ zimFileMissingBuilder.setMessage(R.string.custom_app_missing_content);
+ zimFileMissingBuilder.setIcon(R.mipmap.kiwix_icon);
+ final Activity activity = this;
+ zimFileMissingBuilder.setPositiveButton(getString(R.string.go_to_play_store),
+ (dialog, which) -> {
+ String market_uri = "market://details?id=" + BuildConfig.APPLICATION_ID;
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(market_uri));
+ startActivity(intent);
+ activity.finish();
+ });
+ zimFileMissingBuilder.setCancelable(false);
+ AlertDialog zimFileMissingDialog = zimFileMissingBuilder.create();
+ zimFileMissingDialog.show();
+ return false;
+ } else {
+ openZimFile(new File(filePath), true);
+ return true;
+ }
}
private void manageExternalLaunchAndRestoringViewState() {
if (getIntent().getData() != null) {
String filePath =
- FileUtils.getLocalFilePathByUri(getApplicationContext(), getIntent().getData());
+ FileUtils.getLocalFilePathByUri(getApplicationContext(), getIntent().getData());
if (filePath == null || !new File(filePath).exists()) {
- Toast.makeText(MainActivity.this, getString(R.string.error_file_not_found), Toast.LENGTH_LONG)
- .show();
+ Toast.makeText(MainActivity.this, getString(R.string.error_file_not_found),
+ Toast.LENGTH_LONG)
+ .show();
return;
}
Log.d(TAG_KIWIX, "Kiwix started from a file manager. Intent filePath: "
- + filePath
- + " -> open this zim file and load menu_main page");
+ + filePath
+ + " -> open this zim file and load menu_main page");
openZimFile(new File(filePath), false);
} else {
SharedPreferences settings = getSharedPreferences(PREF_KIWIX_MOBILE, 0);
String zimFile = settings.getString(TAG_CURRENT_FILE, null);
if (zimFile != null && new File(zimFile).exists()) {
Log.d(TAG_KIWIX,
- "Kiwix normal start, zimFile loaded last time -> Open last used zimFile " + zimFile);
+ "Kiwix normal start, zimFile loaded last time -> Open last used zimFile " + zimFile);
restoreTabStates();
// Alternative would be to restore webView state. But more effort to implement, and actually
// fits better normal android behavior if after closing app ("back" button) state is not maintained.
} else {
- Log.d(TAG_KIWIX, "Kiwix normal start, no zimFile loaded last time -> display home page");
- showHomePage();
- }
-
+ Log.d(TAG_KIWIX, "Kiwix normal start, no zimFile loaded last time -> display home page");
+ showHomePage();
+ }
}
}
@@ -2007,7 +1906,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
super.onPause();
saveTabStates();
Log.d(TAG_KIWIX,
- "onPause Save current zim file to preferences: " + ZimContentProvider.getZimFile());
+ "onPause Save current zim file to preferences: " + ZimContentProvider.getZimFile());
}
@Override
@@ -2029,18 +1928,18 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
if (url != null && !url.equals(HOME_URL)) {
final long timeStamp = System.currentTimeMillis();
SimpleDateFormat sdf =
- new SimpleDateFormat("d MMM yyyy", LanguageUtils.getCurrentLocale(this));
+ new SimpleDateFormat("d MMM yyyy", LanguageUtils.getCurrentLocale(this));
HistoryListItem.HistoryItem history = new HistoryListItem.HistoryItem(
- 0L,
- ZimContentProvider.getId(),
- ZimContentProvider.getName(),
- ZimContentProvider.getZimFile(),
- ZimContentProvider.getFavicon(),
- getCurrentWebView().getTitle(),
- getCurrentWebView().getUrl(),
- sdf.format(new Date(timeStamp)),
- timeStamp,
- 0L
+ 0L,
+ ZimContentProvider.getId(),
+ ZimContentProvider.getName(),
+ ZimContentProvider.getZimFile(),
+ ZimContentProvider.getFavicon(),
+ getCurrentWebView().getTitle(),
+ getCurrentWebView().getUrl(),
+ sdf.format(new Date(timeStamp)),
+ timeStamp,
+ 0L
);
presenter.saveHistory(history);
}
@@ -2060,7 +1959,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
if (progress == 100) {
if (requestClearHistoryAfterLoad) {
Log.d(TAG_KIWIX,
- "Loading article finished and requestClearHistoryAfterLoad -> clearHistory");
+ "Loading article finished and requestClearHistoryAfterLoad -> clearHistory");
getCurrentWebView().clearHistory();
requestClearHistoryAfterLoad = false;
}
@@ -2082,8 +1981,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
hideBackToTopTimer.start();
if (getCurrentWebView().getScrollY() > 200) {
if ((backToTopButton.getVisibility() == View.GONE
- || backToTopButton.getVisibility() == View.INVISIBLE)
- && TTSControls.getVisibility() == View.GONE) {
+ || backToTopButton.getVisibility() == View.INVISIBLE)
+ && TTSControls.getVisibility() == View.GONE) {
backToTopButton.show();
}
} else {
@@ -2114,11 +2013,11 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
if (isOpenNewTabInBackground) {
newTabInBackground(url);
Snackbar.make(snackbarRoot, R.string.new_tab_snack_bar, Snackbar.LENGTH_LONG)
- .setAction(getString(R.string.open), v -> {
- if (webViewList.size() > 1) selectTab(webViewList.size() - 1);
- })
- .setActionTextColor(getResources().getColor(R.color.white))
- .show();
+ .setAction(getString(R.string.open), v -> {
+ if (webViewList.size() > 1) selectTab(webViewList.size() - 1);
+ })
+ .setActionTextColor(getResources().getColor(R.color.white))
+ .show();
} else {
newTab(url);
}
@@ -2154,11 +2053,11 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
private void searchFiles() {
if (Build.VERSION.SDK_INT >= VERSION_CODES.M && ContextCompat.checkSelfPermission(this,
- Manifest.permission.READ_EXTERNAL_STORAGE)
- != PackageManager.PERMISSION_GRANTED) {
+ Manifest.permission.READ_EXTERNAL_STORAGE)
+ != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
- new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
- REQUEST_READ_STORAGE_PERMISSION);
+ new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
+ REQUEST_READ_STORAGE_PERMISSION);
} else {
scanStorageForZims();
}
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java
index 65bf92804..723246591 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixSettingsActivity.java
@@ -19,6 +19,7 @@
package org.kiwix.kiwixmobile.settings;
+import android.Manifest;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@@ -37,6 +38,7 @@ import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
+import androidx.core.content.ContextCompat;
import eu.mhutti1.utils.storage.StorageDevice;
import eu.mhutti1.utils.storage.StorageSelectDialog;
import java.io.File;
@@ -44,27 +46,27 @@ import java.util.List;
import java.util.Locale;
import javax.inject.Inject;
import kotlin.Unit;
+import kotlin.io.FilesKt;
import org.kiwix.kiwixmobile.BuildConfig;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.base.BaseActivity;
+import org.kiwix.kiwixmobile.extensions.ContextExtensionsKt;
+import org.kiwix.kiwixmobile.main.AddNoteDialog;
import org.kiwix.kiwixmobile.main.MainActivity;
import org.kiwix.kiwixmobile.utils.LanguageUtils;
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_WEBVIEWS_LIST;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_AUTONIGHTMODE;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_CLEAR_ALL_HISTORY;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_CREDITS;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_LANG;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_NIGHTMODE;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_STORAGE;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_VERSION;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_WIFI_ONLY;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_ZOOM;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_ZOOM_ENABLED;
import static org.kiwix.kiwixmobile.utils.Constants.RESULT_HISTORY_CLEARED;
import static org.kiwix.kiwixmobile.utils.Constants.RESULT_RESTART;
+import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_AUTONIGHTMODE;
+import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_LANG;
+import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_NIGHTMODE;
+import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_STORAGE;
+import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_WIFI_ONLY;
+import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_ZOOM;
+import static org.kiwix.kiwixmobile.utils.SharedPreferenceUtil.PREF_ZOOM_ENABLED;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
public class KiwixSettingsActivity extends BaseActivity {
@@ -112,6 +114,10 @@ public class KiwixSettingsActivity extends BaseActivity {
SettingsContract.View,
SharedPreferences.OnSharedPreferenceChangeListener {
+ public static final String PREF_VERSION = "pref_version";
+ public static final String PREF_CLEAR_ALL_HISTORY = "pref_clear_all_history";
+ public static final String PREF_CLEAR_ALL_NOTES = "pref_clear_all_notes";
+ public static final String PREF_CREDITS = "pref_credits";
@Inject
SettingsPresenter presenter;
@Inject
@@ -298,6 +304,40 @@ public class KiwixSettingsActivity extends BaseActivity {
.show();
}
+ private void showClearAllNotesDialog() {
+ AlertDialog.Builder builder;
+ if (sharedPreferenceUtil.nightMode()) { // Night Mode support
+ builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_Dialog_Night);
+ } else {
+ builder = new AlertDialog.Builder(getActivity());
+ }
+
+ builder.setMessage(R.string.delete_notes_confirmation_msg)
+ .setNegativeButton(android.R.string.cancel, null) // Do nothing for 'Cancel' button
+ .setPositiveButton(R.string.yes, (dialog, which) -> clearAllNotes())
+ .show();
+ }
+
+ private void clearAllNotes() {
+ if (KiwixApplication.getInstance().isExternalStorageWritable()) {
+ if (ContextCompat.checkSelfPermission(getActivity(),
+ Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ != PackageManager.PERMISSION_GRANTED) {
+ ContextExtensionsKt.toast(getActivity(), R.string.ext_storage_permission_not_granted,
+ Toast.LENGTH_LONG);
+ return;
+ }
+
+ if (FilesKt.deleteRecursively(new File(AddNoteDialog.NOTES_DIRECTORY))) {
+ ContextExtensionsKt.toast(getActivity(), R.string.notes_deletion_successful,
+ Toast.LENGTH_SHORT);
+ return;
+ }
+ }
+ ContextExtensionsKt.toast(getActivity(), R.string.notes_deletion_unsuccessful,
+ Toast.LENGTH_SHORT);
+ }
+
public void openCredits() {
WebView view =
(WebView) LayoutInflater.from(getActivity()).inflate(R.layout.credits_webview, null);
@@ -318,6 +358,9 @@ public class KiwixSettingsActivity extends BaseActivity {
if (preference.getKey().equalsIgnoreCase(PREF_CLEAR_ALL_HISTORY)) {
clearAllHistoryDialog();
}
+ if (preference.getKey().equalsIgnoreCase(PREF_CLEAR_ALL_NOTES)) {
+ showClearAllNotesDialog();
+ }
if (preference.getKey().equalsIgnoreCase(PREF_CREDITS)) {
openCredits();
@@ -332,15 +375,12 @@ public class KiwixSettingsActivity extends BaseActivity {
public void openFolderSelect() {
StorageSelectDialog dialogFragment = new StorageSelectDialog();
- dialogFragment.setOnSelectListener(storageDevice -> {
- selectionCallback(storageDevice);
- return Unit.INSTANCE;
- });
+ dialogFragment.setOnSelectListener(this::onStorageDeviceSelected);
dialogFragment.show(((AppCompatActivity) getActivity()).getSupportFragmentManager(),
getResources().getString(R.string.pref_storage));
}
- private void selectionCallback(StorageDevice storageDevice) {
+ private Unit onStorageDeviceSelected(StorageDevice storageDevice) {
findPreference(PREF_STORAGE).setSummary(
storageCalculator.calculateAvailableSpace(storageDevice.getFile())
);
@@ -354,6 +394,7 @@ public class KiwixSettingsActivity extends BaseActivity {
sharedPreferenceUtil.putPrefStorageTitle(
getResources().getString(R.string.external_storage));
}
+ return Unit.INSTANCE;
}
}
}
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/utils/Constants.java b/app/src/main/java/org/kiwix/kiwixmobile/utils/Constants.java
index 1245b0d8a..11fa33044 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/utils/Constants.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/utils/Constants.java
@@ -17,8 +17,6 @@
*/
package org.kiwix.kiwixmobile.utils;
-import android.os.Environment;
-
import org.kiwix.kiwixmobile.BuildConfig;
public final class Constants {
@@ -49,46 +47,6 @@ public final class Constants {
public static final int RESULT_HISTORY_CLEARED = 1239;
- // Prefs
- public static final String PREF_LANG = "pref_language_chooser";
-
- public static final String PREF_VERSION = "pref_version";
-
- public static final String PREF_CLEAR_ALL_HISTORY = "pref_clear_all_history";
-
- public static final String PREF_CREDITS = "pref_credits";
-
- public static final String PREF_STORAGE = "pref_select_folder";
-
- public static final String PREF_AUTONIGHTMODE = "pref_auto_nightmode";
-
- public static final String PREF_NIGHTMODE = "pref_nightmode";
-
- public static final String PREF_WIFI_ONLY = "pref_wifi_only";
-
- public static final String PREF_KIWIX_MOBILE = "kiwix-mobile";
-
- public static final String PREF_BACK_TO_TOP = "pref_backtotop";
-
- public static final String PREF_HIDE_TOOLBAR = "pref_hidetoolbar";
-
- public static final String PREF_ZOOM = "pref_zoom_slider";
-
- public static final String PREF_ZOOM_ENABLED = "pref_zoom_enabled";
-
- public static final String PREF_FULLSCREEN = "pref_fullscreen";
-
- public static final String PREF_NEW_TAB_BACKGROUND = "pref_newtab_background";
-
- public static final String PREF_FULL_TEXT_SEARCH = "pref_full_text_search";
-
- public static final String PREF_STORAGE_TITLE = "pref_selected_title";
-
- public static final String PREF_EXTERNAL_LINK_POPUP = "pref_external_link_popup";
-
- public static final String PREF_IS_FIRST_RUN = "isFirstRun";
-
- public static final String PREF_SHOW_INTRO = "showIntro";
// Tags
public static final String TAG_FILE_SEARCHED = "searchedarticle";
@@ -138,7 +96,4 @@ public final class Constants {
public static final String OLD_PROVIDER_DOMAIN = "org.kiwix.zim.base";
public static final String NEW_PROVIDER_DOMAIN = BuildConfig.APPLICATION_ID + ".zim.base";
-
- // Path Constants
- public static final String NOTES_DIRECTORY = Environment.getExternalStorageDirectory() + "/Kiwix/Notes/";
}
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/utils/SharedPreferenceUtil.java b/app/src/main/java/org/kiwix/kiwixmobile/utils/SharedPreferenceUtil.java
index e3d8b6925..4435c0277 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/utils/SharedPreferenceUtil.java
+++ b/app/src/main/java/org/kiwix/kiwixmobile/utils/SharedPreferenceUtil.java
@@ -5,34 +5,35 @@ import android.content.SharedPreferences;
import android.os.Environment;
import android.preference.PreferenceManager;
import io.reactivex.Flowable;
-import io.reactivex.processors.BehaviorProcessor;
import io.reactivex.processors.PublishProcessor;
import java.util.Calendar;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_AUTONIGHTMODE;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_BACK_TO_TOP;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_EXTERNAL_LINK_POPUP;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_FULLSCREEN;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_HIDE_TOOLBAR;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_IS_FIRST_RUN;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_LANG;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_NEW_TAB_BACKGROUND;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_NIGHTMODE;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_SHOW_INTRO;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_STORAGE;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_STORAGE_TITLE;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_WIFI_ONLY;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_ZOOM;
-import static org.kiwix.kiwixmobile.utils.Constants.PREF_ZOOM_ENABLED;
-
/**
* Manager for the Default Shared Preferences of the application.
*/
@Singleton
public class SharedPreferenceUtil {
+ // Prefs
+ public static final String PREF_LANG = "pref_language_chooser";
+ public static final String PREF_STORAGE = "pref_select_folder";
+ public static final String PREF_AUTONIGHTMODE = "pref_auto_nightmode";
+ public static final String PREF_NIGHTMODE = "pref_nightmode";
+ public static final String PREF_WIFI_ONLY = "pref_wifi_only";
+ public static final String PREF_KIWIX_MOBILE = "kiwix-mobile";
+ public static final String PREF_BACK_TO_TOP = "pref_backtotop";
+ public static final String PREF_HIDE_TOOLBAR = "pref_hidetoolbar";
+ public static final String PREF_ZOOM = "pref_zoom_slider";
+ public static final String PREF_ZOOM_ENABLED = "pref_zoom_enabled";
+ public static final String PREF_FULLSCREEN = "pref_fullscreen";
+ public static final String PREF_NEW_TAB_BACKGROUND = "pref_newtab_background";
+ public static final String PREF_FULL_TEXT_SEARCH = "pref_full_text_search";
+ public static final String PREF_STORAGE_TITLE = "pref_selected_title";
+ public static final String PREF_EXTERNAL_LINK_POPUP = "pref_external_link_popup";
+ public static final String PREF_IS_FIRST_RUN = "isFirstRun";
+ public static final String PREF_SHOW_INTRO = "showIntro";
private static final String PREF_SHOW_BOOKMARKS_CURRENT_BOOK = "show_bookmarks_current_book";
private static final String PREF_SHOW_HISTORY_CURRENT_BOOK = "show_history_current_book";
private SharedPreferences sharedPreferences;
@@ -59,7 +60,6 @@ public class SharedPreferenceUtil {
return sharedPreferences.getBoolean(PREF_FULLSCREEN, false);
}
-
public boolean getPrefBackToTop() {
return sharedPreferences.getBoolean(PREF_BACK_TO_TOP, false);
}
@@ -86,7 +86,7 @@ public class SharedPreferenceUtil {
public String getPrefStorage() {
return sharedPreferences.getString(PREF_STORAGE,
- Environment.getExternalStorageDirectory().getPath());
+ Environment.getExternalStorageDirectory().getPath());
}
private boolean getPrefNightMode() {
@@ -127,7 +127,7 @@ public class SharedPreferenceUtil {
prefStorages.onNext(storage);
}
- public Flowable getPrefStorages(){
+ public Flowable getPrefStorages() {
return prefStorages.startWith(getPrefStorage());
}
@@ -153,8 +153,8 @@ public class SharedPreferenceUtil {
public void setShowHistoryCurrentBook(boolean prefShowHistoryCurrentBook) {
sharedPreferences.edit()
- .putBoolean(PREF_SHOW_HISTORY_CURRENT_BOOK, prefShowHistoryCurrentBook)
- .apply();
+ .putBoolean(PREF_SHOW_HISTORY_CURRENT_BOOK, prefShowHistoryCurrentBook)
+ .apply();
}
public boolean nightMode() {
@@ -174,7 +174,7 @@ public class SharedPreferenceUtil {
public void setShowBookmarksCurrentBook(boolean prefShowBookmarksFromCurrentBook) {
sharedPreferences.edit()
- .putBoolean(PREF_SHOW_BOOKMARKS_CURRENT_BOOK, prefShowBookmarksFromCurrentBook)
- .apply();
+ .putBoolean(PREF_SHOW_BOOKMARKS_CURRENT_BOOK, prefShowBookmarksFromCurrentBook)
+ .apply();
}
}
diff --git a/app/src/main/res/drawable/ic_baseline_delete_sweep_24px.xml b/app/src/main/res/drawable/ic_baseline_delete_sweep_24px.xml
deleted file mode 100644
index c5495c74c..000000000
--- a/app/src/main/res/drawable/ic_baseline_delete_sweep_24px.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 28a2123c9..c5d90a8e4 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -1,102 +1,85 @@
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fe3488a2c..31b9b72da 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,7 +1,7 @@
Kiwi
- Get Content
+ Library
Help
Home
Settings
@@ -237,7 +237,6 @@
Bookmarks from current book
Search bookmarks
- New tab
Switch tabs
:D
Close all tabs
@@ -260,7 +259,6 @@
Unknown HTTP code received
Unknown
HTTP code %s
- Add Note
Save
Note
Wiki Article Title
@@ -272,10 +270,8 @@
Note file doesn\'t exist
Share note file with:
Discard unsaved changes?
- Clear All Notes
Delete all notes?
Error: Storage permissions not granted
- No notes found for deletion
Entire notes folder deleted
Some files not deleted
@@ -308,4 +304,6 @@
Performing handshake....
Local ZIM Sharing
Status
+ Clears all notes on all articles
+ Clear all notes
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 4d36dcd32..8bd718a4b 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -101,6 +101,16 @@
android:summary="@string/pref_clear_all_history_summary"
android:title="@string/pref_clear_all_history_title"/>
+
+
+
+
+