diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 53648ce78..a68032508 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,8 @@
+
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt
index 59790c3ee..e97562289 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt
+++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/LocalLibraryFragment.kt
@@ -33,6 +33,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
+import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
@@ -51,9 +52,12 @@ import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.navigate
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.viewModel
import org.kiwix.kiwixmobile.core.extensions.toast
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
+import org.kiwix.kiwixmobile.core.navigateToSettings
import org.kiwix.kiwixmobile.core.utils.LanguageUtils
import org.kiwix.kiwixmobile.core.utils.REQUEST_STORAGE_PERMISSION
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
+import org.kiwix.kiwixmobile.core.utils.dialog.DialogShower
+import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BookOnDiskDelegate
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskAdapter
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem
@@ -64,12 +68,6 @@ import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.Re
import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestSelect
import org.kiwix.kiwixmobile.zim_manager.fileselect_view.FileSelectListState
import javax.inject.Inject
-import android.content.Intent
-import android.net.Uri
-import android.provider.Settings
-import androidx.annotation.RequiresApi
-import org.kiwix.kiwixmobile.core.utils.dialog.DialogShower
-import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog
private const val WAS_IN_ACTION_MODE = "WAS_IN_ACTION_MODE"
@@ -223,7 +221,9 @@ class LocalLibraryFragment : BaseFragment() {
// Show Dialog and Go to settings to give permission
dialogShower.show(
KiwixDialog.ManageExternalFilesPermissionDialog,
- ::navigateToSettings
+ {
+ this.activity?.let(FragmentActivity::navigateToSettings)
+ }
)
}
}
@@ -244,13 +244,4 @@ class LocalLibraryFragment : BaseFragment() {
private fun navigateToLocalFileTransferFragment() {
requireActivity().navigate(R.id.localFileTransferFragment)
}
-
- @RequiresApi(Build.VERSION_CODES.R)
- private fun navigateToSettings() {
- val intent = Intent().apply {
- action = Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
- data = Uri.fromParts("package", requireActivity().packageName, null)
- }
- startActivity(intent)
- }
}
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixPrefsFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixPrefsFragment.kt
index 8956f3678..948466170 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixPrefsFragment.kt
+++ b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixPrefsFragment.kt
@@ -18,10 +18,15 @@
package org.kiwix.kiwixmobile.settings
+import android.os.Build
import android.os.Bundle
+import android.os.Environment
import androidx.core.content.ContextCompat
+import androidx.fragment.app.FragmentActivity
import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
import org.kiwix.kiwixmobile.R
+import org.kiwix.kiwixmobile.core.navigateToSettings
import org.kiwix.kiwixmobile.core.settings.CorePrefsFragment
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil.Companion.PREF_STORAGE
@@ -31,6 +36,7 @@ class KiwixPrefsFragment : CorePrefsFragment() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
super.onCreatePreferences(savedInstanceState, rootKey)
setUpLanguageChooser(SharedPreferenceUtil.PREF_LANG)
+ setMangeExternalStoragePermission()
}
override fun setStorage() {
@@ -43,4 +49,34 @@ class KiwixPrefsFragment : CorePrefsFragment() {
private fun internalStorage(): String? =
ContextCompat.getExternalFilesDirs(requireContext(), null).firstOrNull()?.path
+
+ private fun setMangeExternalStoragePermission() {
+ val permissionPref = findPreference(PREF_MANAGE_EXTERNAL_STORAGE_PERMISSION)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ showPermissionPreference()
+ val externalStorageManager = Environment.isExternalStorageManager()
+ if (externalStorageManager) {
+ permissionPref!!.setSummary(org.kiwix.kiwixmobile.core.R.string.allowed)
+ } else {
+ permissionPref!!.setSummary(org.kiwix.kiwixmobile.core.R.string.not_allowed)
+ }
+ permissionPref.onPreferenceClickListener =
+ Preference.OnPreferenceClickListener {
+ activity?.let(FragmentActivity::navigateToSettings)
+ true
+ }
+ }
+ }
+
+ private fun showPermissionPreference() {
+ val preferenceCategory = findPreference(
+ PREF_PERMISSION
+ )
+ preferenceCategory!!.isVisible = true
+ }
+
+ companion object {
+ const val PREF_MANAGE_EXTERNAL_STORAGE_PERMISSION =
+ "pref_manage_external_storage"
+ }
}
diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml
index f9b3b51b1..da773d305 100644
--- a/core/src/main/AndroidManifest.xml
+++ b/core/src/main/AndroidManifest.xml
@@ -8,8 +8,6 @@
-
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/Intents.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/Intents.kt
index ea6f46326..80eda6769 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/Intents.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/Intents.kt
@@ -20,8 +20,20 @@ package org.kiwix.kiwixmobile.core
import android.app.Activity
import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.provider.Settings
+import androidx.annotation.RequiresApi
object Intents {
@JvmStatic fun internal(clazz: Class): Intent =
Intent(clazz.canonicalName).setPackage(CoreApp.instance.packageName)
}
+@RequiresApi(Build.VERSION_CODES.R)
+fun Activity.navigateToSettings() {
+ val intent = Intent().apply {
+ action = Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
+ data = Uri.fromParts("package", packageName, null)
+ }
+ startActivity(intent)
+}
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.java b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.java
index 11d52e618..5a38303cf 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.java
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.java
@@ -20,23 +20,16 @@ package org.kiwix.kiwixmobile.core.settings;
import android.Manifest;
import android.annotation.SuppressLint;
-import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
-import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
-import android.os.Environment;
-import android.provider.Settings;
import android.view.LayoutInflater;
import android.webkit.WebView;
-import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import androidx.navigation.NavController;
import androidx.preference.EditTextPreference;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragmentCompat;
import com.google.android.material.snackbar.Snackbar;
import eu.mhutti1.utils.storage.StorageDevice;
@@ -69,8 +62,6 @@ public abstract class CorePrefsFragment extends PreferenceFragmentCompat impleme
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";
- public static final String PREF_MANAGE_EXTERNAL_STORAGE_PERMISSION =
- "pref_manage_external_storage";
public static final String PREF_PERMISSION = "pref_permissions";
private static final int ZOOM_OFFSET = 2;
private static final int ZOOM_SCALE = 25;
@@ -97,7 +88,6 @@ public abstract class CorePrefsFragment extends PreferenceFragmentCompat impleme
setStorage();
setUpSettings();
setupZoom();
- setMangeExternalStoragePermission();
new LanguageUtils(getActivity()).changeFont(getActivity().getLayoutInflater(),
sharedPreferenceUtil);
}
@@ -185,27 +175,8 @@ public abstract class CorePrefsFragment extends PreferenceFragmentCompat impleme
versionPref.setSummary(getVersionName() + " Build: " + getVersionCode());
}
- private void setMangeExternalStoragePermission() {
- Preference permissionPref = findPreference(PREF_MANAGE_EXTERNAL_STORAGE_PERMISSION);
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
- showPermissionPreference();
- boolean externalStorageManager = Environment.isExternalStorageManager();
- if (externalStorageManager) {
- permissionPref.setSummary(R.string.allowed);
- } else {
- permissionPref.setSummary(R.string.not_allowed);
- }
- permissionPref.setOnPreferenceClickListener(
- preference -> {
- navigateToSettings();
- return true;
- });
- }
- }
- private void showPermissionPreference() {
- PreferenceCategory preferenceCategory = findPreference(PREF_PERMISSION);
- preferenceCategory.setVisible(true);
- }
+
+
private int getVersionCode() {
try {
@@ -316,13 +287,4 @@ public abstract class CorePrefsFragment extends PreferenceFragmentCompat impleme
return Unit.INSTANCE;
}
- // TODO: 28/10/21 Refactor the code. We are using it twice.
- @RequiresApi(Build.VERSION_CODES.R)
- private void navigateToSettings() {
- Intent intent = new Intent();
- intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
- Uri uri = Uri.fromParts("package", getActivity().getPackageName(), null);
- intent.setData(uri);
- startActivity(intent);
- }
}