mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 18:56:44 -04:00
Merge pull request #2735 from kiwix/#2732_refactor_all_files_access_permission_code_to_app_module
This commit is contained in:
commit
e1011c5e00
@ -6,6 +6,8 @@
|
|||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
|
||||||
|
tools:ignore="ScopedStorage" />
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
|
@ -33,6 +33,7 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import androidx.appcompat.view.ActionMode
|
import androidx.appcompat.view.ActionMode
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
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.ActivityExtensions.viewModel
|
||||||
import org.kiwix.kiwixmobile.core.extensions.toast
|
import org.kiwix.kiwixmobile.core.extensions.toast
|
||||||
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
||||||
|
import org.kiwix.kiwixmobile.core.navigateToSettings
|
||||||
import org.kiwix.kiwixmobile.core.utils.LanguageUtils
|
import org.kiwix.kiwixmobile.core.utils.LanguageUtils
|
||||||
import org.kiwix.kiwixmobile.core.utils.REQUEST_STORAGE_PERMISSION
|
import org.kiwix.kiwixmobile.core.utils.REQUEST_STORAGE_PERMISSION
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
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.BookOnDiskDelegate
|
||||||
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskAdapter
|
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskAdapter
|
||||||
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem
|
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.ZimManageViewModel.FileSelectActions.RequestSelect
|
||||||
import org.kiwix.kiwixmobile.zim_manager.fileselect_view.FileSelectListState
|
import org.kiwix.kiwixmobile.zim_manager.fileselect_view.FileSelectListState
|
||||||
import javax.inject.Inject
|
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"
|
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
|
// Show Dialog and Go to settings to give permission
|
||||||
dialogShower.show(
|
dialogShower.show(
|
||||||
KiwixDialog.ManageExternalFilesPermissionDialog,
|
KiwixDialog.ManageExternalFilesPermissionDialog,
|
||||||
::navigateToSettings
|
{
|
||||||
|
this.activity?.let(FragmentActivity::navigateToSettings)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -244,13 +244,4 @@ class LocalLibraryFragment : BaseFragment() {
|
|||||||
private fun navigateToLocalFileTransferFragment() {
|
private fun navigateToLocalFileTransferFragment() {
|
||||||
requireActivity().navigate(R.id.localFileTransferFragment)
|
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,15 @@
|
|||||||
|
|
||||||
package org.kiwix.kiwixmobile.settings
|
package org.kiwix.kiwixmobile.settings
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Environment
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
|
import androidx.preference.PreferenceCategory
|
||||||
import org.kiwix.kiwixmobile.R
|
import org.kiwix.kiwixmobile.R
|
||||||
|
import org.kiwix.kiwixmobile.core.navigateToSettings
|
||||||
import org.kiwix.kiwixmobile.core.settings.CorePrefsFragment
|
import org.kiwix.kiwixmobile.core.settings.CorePrefsFragment
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil.Companion.PREF_STORAGE
|
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil.Companion.PREF_STORAGE
|
||||||
@ -31,6 +36,7 @@ class KiwixPrefsFragment : CorePrefsFragment() {
|
|||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
super.onCreatePreferences(savedInstanceState, rootKey)
|
super.onCreatePreferences(savedInstanceState, rootKey)
|
||||||
setUpLanguageChooser(SharedPreferenceUtil.PREF_LANG)
|
setUpLanguageChooser(SharedPreferenceUtil.PREF_LANG)
|
||||||
|
setMangeExternalStoragePermission()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setStorage() {
|
override fun setStorage() {
|
||||||
@ -43,4 +49,34 @@ class KiwixPrefsFragment : CorePrefsFragment() {
|
|||||||
|
|
||||||
private fun internalStorage(): String? =
|
private fun internalStorage(): String? =
|
||||||
ContextCompat.getExternalFilesDirs(requireContext(), null).firstOrNull()?.path
|
ContextCompat.getExternalFilesDirs(requireContext(), null).firstOrNull()?.path
|
||||||
|
|
||||||
|
private fun setMangeExternalStoragePermission() {
|
||||||
|
val permissionPref = findPreference<Preference>(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<PreferenceCategory>(
|
||||||
|
PREF_PERMISSION
|
||||||
|
)
|
||||||
|
preferenceCategory!!.isVisible = true
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val PREF_MANAGE_EXTERNAL_STORAGE_PERMISSION =
|
||||||
|
"pref_manage_external_storage"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
|
|
||||||
tools:ignore="ScopedStorage" />
|
|
||||||
|
|
||||||
<!-- Device with versions >= Pie need this permission -->
|
<!-- Device with versions >= Pie need this permission -->
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
@ -20,8 +20,20 @@ package org.kiwix.kiwixmobile.core
|
|||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
|
import android.provider.Settings
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
|
||||||
object Intents {
|
object Intents {
|
||||||
@JvmStatic fun <T : Activity> internal(clazz: Class<T>): Intent =
|
@JvmStatic fun <T : Activity> internal(clazz: Class<T>): Intent =
|
||||||
Intent(clazz.canonicalName).setPackage(CoreApp.instance.packageName)
|
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)
|
||||||
|
}
|
||||||
|
@ -20,23 +20,16 @@ package org.kiwix.kiwixmobile.core.settings;
|
|||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
|
||||||
import android.provider.Settings;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
import androidx.preference.EditTextPreference;
|
import androidx.preference.EditTextPreference;
|
||||||
import androidx.preference.ListPreference;
|
import androidx.preference.ListPreference;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceCategory;
|
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
import androidx.preference.PreferenceFragmentCompat;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import eu.mhutti1.utils.storage.StorageDevice;
|
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_HISTORY = "pref_clear_all_history";
|
||||||
public static final String PREF_CLEAR_ALL_NOTES = "pref_clear_all_notes";
|
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_CREDITS = "pref_credits";
|
||||||
public static final String PREF_MANAGE_EXTERNAL_STORAGE_PERMISSION =
|
|
||||||
"pref_manage_external_storage";
|
|
||||||
public static final String PREF_PERMISSION = "pref_permissions";
|
public static final String PREF_PERMISSION = "pref_permissions";
|
||||||
private static final int ZOOM_OFFSET = 2;
|
private static final int ZOOM_OFFSET = 2;
|
||||||
private static final int ZOOM_SCALE = 25;
|
private static final int ZOOM_SCALE = 25;
|
||||||
@ -97,7 +88,6 @@ public abstract class CorePrefsFragment extends PreferenceFragmentCompat impleme
|
|||||||
setStorage();
|
setStorage();
|
||||||
setUpSettings();
|
setUpSettings();
|
||||||
setupZoom();
|
setupZoom();
|
||||||
setMangeExternalStoragePermission();
|
|
||||||
new LanguageUtils(getActivity()).changeFont(getActivity().getLayoutInflater(),
|
new LanguageUtils(getActivity()).changeFont(getActivity().getLayoutInflater(),
|
||||||
sharedPreferenceUtil);
|
sharedPreferenceUtil);
|
||||||
}
|
}
|
||||||
@ -185,27 +175,8 @@ public abstract class CorePrefsFragment extends PreferenceFragmentCompat impleme
|
|||||||
versionPref.setSummary(getVersionName() + " Build: " + getVersionCode());
|
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() {
|
private int getVersionCode() {
|
||||||
try {
|
try {
|
||||||
@ -316,13 +287,4 @@ public abstract class CorePrefsFragment extends PreferenceFragmentCompat impleme
|
|||||||
return Unit.INSTANCE;
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user