diff --git a/app/src/main/java/com/amaze/filemanager/ui/activities/superclasses/PermissionsActivity.java b/app/src/main/java/com/amaze/filemanager/ui/activities/superclasses/PermissionsActivity.java index 821f433420..8ce4119e2e 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/activities/superclasses/PermissionsActivity.java +++ b/app/src/main/java/com/amaze/filemanager/ui/activities/superclasses/PermissionsActivity.java @@ -241,13 +241,15 @@ private void requestPermission( */ public void requestAllFilesAccess(@NonNull final OnPermissionGranted onPermissionGranted) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) { + final boolean hasHtml = true; final MaterialDialog materialDialog = GeneralDialogCreation.showBasicDialog( this, R.string.grant_all_files_permission, R.string.grantper, R.string.grant, - R.string.cancel); + R.string.cancel, + hasHtml); materialDialog.getActionButton(DialogAction.NEGATIVE).setOnClickListener(v -> finish()); materialDialog .getActionButton(DialogAction.POSITIVE) diff --git a/app/src/main/java/com/amaze/filemanager/ui/dialogs/GeneralDialogCreation.java b/app/src/main/java/com/amaze/filemanager/ui/dialogs/GeneralDialogCreation.java index b4c6e7c81f..4e7f0e0565 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/dialogs/GeneralDialogCreation.java +++ b/app/src/main/java/com/amaze/filemanager/ui/dialogs/GeneralDialogCreation.java @@ -96,6 +96,8 @@ import android.text.Spanned; import android.text.TextUtils; import android.text.format.Formatter; +import android.text.method.LinkMovementMethod; +import android.text.util.Linkify; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; @@ -124,15 +126,25 @@ public class GeneralDialogCreation { private static final Logger LOG = LoggerFactory.getLogger(GeneralDialogCreation.class); public static MaterialDialog showBasicDialog( - ThemedActivity themedActivity, + @NonNull ThemedActivity themedActivity, @StringRes int content, @StringRes int title, @StringRes int postiveText, @StringRes int negativeText) { + return showBasicDialog(themedActivity, content, title, postiveText, negativeText, false); + } + + public static MaterialDialog showBasicDialog( + @NonNull ThemedActivity themedActivity, + @StringRes int content, + @StringRes int title, + @StringRes int postiveText, + @StringRes int negativeText, + boolean hasHtml) { int accentColor = themedActivity.getAccent(); - MaterialDialog.Builder a = + MaterialDialog.Builder dialogBuilder = new MaterialDialog.Builder(themedActivity) - .content(content) + .content("") // HACK make it empty and then fill it manually for links to work .widgetColor(accentColor) .theme(themedActivity.getAppTheme().getMaterialDialogTheme()) .title(title) @@ -140,7 +152,17 @@ public static MaterialDialog showBasicDialog( .positiveColor(accentColor) .negativeText(negativeText) .negativeColor(accentColor); - return a.build(); + MaterialDialog dialog = dialogBuilder.build(); + + if (hasHtml) { + dialog.getContentView().setMovementMethod(LinkMovementMethod.getInstance()); + dialog.getContentView().setAutoLinkMask(Linkify.WEB_URLS); + dialog.getContentView().setLinksClickable(true); + dialog + .getContentView() + .setText(HtmlCompat.fromHtml(themedActivity.getString(content), FROM_HTML_MODE_COMPACT)); + } + return dialog; } public static MaterialDialog showNameDialog( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6316a662bb..1e73c75b59 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -776,9 +776,15 @@ You only need to do this once, until the next time you select a new location for Select similar Select fill Error fetching product list from Google Play. - Since Android 11, Google requests File Managers to request user permission for managing all files on the device. Details here. - \n\nAmaze File Manager needs this permission too. After pressing \'Grant\', please select Allow access to manage all files option on the next screen. - \n\nCanceling this dialog will exit the app. + + + Since Android 11, Google requests File Managers to request user permission for managing all files on the device. Details available at https://developer.android.com/training/data-storage/manage-all-files.

+ Amaze File Manager needs this permission too. After pressing 'Grant', please select Allow access to manage all files option on the next screen.

+ Canceling this dialog will exit the app. + + + ]]>
User apps Appearance Behavior diff --git a/app/src/test/java/com/amaze/filemanager/ui/activities/PermissionsActivityTest.kt b/app/src/test/java/com/amaze/filemanager/ui/activities/PermissionsActivityTest.kt index 548d0b2bf4..c4f178d511 100644 --- a/app/src/test/java/com/amaze/filemanager/ui/activities/PermissionsActivityTest.kt +++ b/app/src/test/java/com/amaze/filemanager/ui/activities/PermissionsActivityTest.kt @@ -29,6 +29,8 @@ import android.os.Build.VERSION_CODES.P import android.os.Build.VERSION_CODES.R import android.os.storage.StorageManager import android.provider.Settings +import androidx.core.text.HtmlCompat +import androidx.core.text.HtmlCompat.FROM_HTML_MODE_COMPACT import androidx.lifecycle.Lifecycle import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ApplicationProvider @@ -128,9 +130,10 @@ class PermissionsActivityTest { this.titleView.text, ) assertEquals( - activity.getString( - com.amaze.filemanager.R.string.grant_all_files_permission, - ), + HtmlCompat.fromHtml( + activity.getString(com.amaze.filemanager.R.string.grant_all_files_permission), + FROM_HTML_MODE_COMPACT, + ).toString(), this.contentView?.text.toString(), ) this.getActionButton(DialogAction.POSITIVE).run {