Add check and request for SMS read permission to perform export.
This commit is contained in:
parent
dfdf68b7b5
commit
08b7dcb1ee
4 changed files with 53 additions and 8 deletions
|
@ -1,5 +1,6 @@
|
|||
package org.thoughtcrime.securesms.exporter.flow
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.text.format.Formatter
|
||||
|
@ -16,6 +17,7 @@ import org.signal.smsexporter.SmsExportService
|
|||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.databinding.ExportingSmsMessagesFragmentBinding
|
||||
import org.thoughtcrime.securesms.exporter.SignalSmsExportService
|
||||
import org.thoughtcrime.securesms.permissions.Permissions
|
||||
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
||||
import org.thoughtcrime.securesms.util.mb
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
|
@ -87,13 +89,29 @@ class ExportingSmsMessagesFragment : Fragment(R.layout.exporting_sms_messages_fr
|
|||
MaterialAlertDialogBuilder(requireContext())
|
||||
.setTitle(R.string.ExportingSmsMessagesFragment__you_may_not_have_enough_disk_space)
|
||||
.setMessage(getString(R.string.ExportingSmsMessagesFragment__you_need_approximately_s_to_export_your_messages_ensure_you_have_enough_space_before_continuing, Formatter.formatFileSize(requireContext(), estimatedRequiredSpace)))
|
||||
.setPositiveButton(R.string.ExportingSmsMessagesFragment__continue_anyway) { _, _ -> SignalSmsExportService.start(requireContext()) }
|
||||
.setPositiveButton(R.string.ExportingSmsMessagesFragment__continue_anyway) { _, _ -> checkPermissionsAndStartExport() }
|
||||
.setNegativeButton(android.R.string.cancel) { _, _ -> findNavController().safeNavigate(ExportingSmsMessagesFragmentDirections.actionDirectToExportYourSmsMessagesFragment()) }
|
||||
.setCancelable(false)
|
||||
.show()
|
||||
} else {
|
||||
SignalSmsExportService.start(requireContext())
|
||||
checkPermissionsAndStartExport()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("OVERRIDE_DEPRECATION")
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String?>, grantResults: IntArray) {
|
||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults)
|
||||
}
|
||||
|
||||
private fun checkPermissionsAndStartExport() {
|
||||
Permissions.with(this)
|
||||
.request(Manifest.permission.READ_SMS)
|
||||
.ifNecessary()
|
||||
.withRationaleDialog(getString(R.string.ExportingSmsMessagesFragment__signal_needs_the_sms_permission_to_be_able_to_export_your_sms_messages), R.drawable.ic_messages_solid_24)
|
||||
.onAllGranted { SignalSmsExportService.start(requireContext()) }
|
||||
.withPermanentDenialDialog(getString(R.string.ExportingSmsMessagesFragment__signal_needs_the_sms_permission_to_be_able_to_export_your_sms_messages)) { requireActivity().finish() }
|
||||
.onAnyDenied { checkPermissionsAndStartExport() }
|
||||
.execute()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.permissions;
|
|||
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
|
@ -16,12 +15,14 @@ import android.view.WindowManager;
|
|||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.annimon.stream.function.Consumer;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
|
@ -104,7 +105,11 @@ public class Permissions {
|
|||
}
|
||||
|
||||
public PermissionsBuilder withPermanentDenialDialog(@NonNull String message) {
|
||||
return onAnyPermanentlyDenied(new SettingsDialogListener(permissionObject.getContext(), message));
|
||||
return withPermanentDenialDialog(message, null);
|
||||
}
|
||||
|
||||
public PermissionsBuilder withPermanentDenialDialog(@NonNull String message, @Nullable Runnable onDialogDismissed) {
|
||||
return onAnyPermanentlyDenied(new SettingsDialogListener(permissionObject.getContext(), message, onDialogDismissed));
|
||||
}
|
||||
|
||||
public PermissionsBuilder onAllGranted(Runnable allGrantedListener) {
|
||||
|
@ -360,11 +365,13 @@ public class Permissions {
|
|||
private static class SettingsDialogListener implements Runnable {
|
||||
|
||||
private final WeakReference<Context> context;
|
||||
private final Runnable onDialogDismissed;
|
||||
private final String message;
|
||||
|
||||
SettingsDialogListener(Context context, String message) {
|
||||
this.message = message;
|
||||
this.context = new WeakReference<>(context);
|
||||
SettingsDialogListener(Context context, String message, @Nullable Runnable onDialogDismissed) {
|
||||
this.message = message;
|
||||
this.context = new WeakReference<>(context);
|
||||
this.onDialogDismissed = onDialogDismissed;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -372,11 +379,17 @@ public class Permissions {
|
|||
Context context = this.context.get();
|
||||
|
||||
if (context != null) {
|
||||
new AlertDialog.Builder(context)
|
||||
new MaterialAlertDialogBuilder(context)
|
||||
.setTitle(R.string.Permissions_permission_required)
|
||||
.setMessage(message)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(R.string.Permissions_continue, (dialog, which) -> context.startActivity(getApplicationSettingsIntent(context)))
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setOnDismissListener(d -> {
|
||||
if (onDialogDismissed != null) {
|
||||
onDialogDismissed.run();
|
||||
}
|
||||
})
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
|
12
app/src/main/res/drawable/ic_messages_solid_24.xml
Normal file
12
app/src/main/res/drawable/ic_messages_solid_24.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="20"
|
||||
android:viewportHeight="20">
|
||||
<path
|
||||
android:pathData="M1.5,9C1.5,5.686 4.6333,3 8.5,3C11.3471,3 13.8406,4.4937 14.9246,6.6276C14.4647,6.5439 13.9882,6.5 13.5,6.5C9.682,6.5 6.5,9.2566 6.5,12.6578C6.5,13.4296 6.6613,14.1681 6.9559,14.8489C6.6572,14.79 6.3616,14.7141 6.0707,14.6213L3.032,15.634C2.6847,15.75 2.4493,15.5486 2.5093,15.1873L2.9353,12.63C2.0245,11.6391 1.5132,10.3458 1.5,9Z"
|
||||
android:fillColor="#000000"/>
|
||||
<path
|
||||
android:pathData="M13.5,8.3334C16.2619,8.3334 18.5,10.2418 18.5,12.5965C18.4906,13.5527 18.1253,14.4716 17.4748,15.1757L17.779,16.9927C17.8219,17.2494 17.6538,17.3925 17.4057,17.31L15.2352,16.5905C14.6742,16.7685 14.0889,16.8592 13.5,16.8596C10.7381,16.8596 8.5,14.9511 8.5,12.5965C8.5,10.2418 10.7729,8.3334 13.5,8.3334Z"
|
||||
android:fillColor="#000000"/>
|
||||
</vector>
|
|
@ -5366,6 +5366,8 @@
|
|||
<string name="ExportingSmsMessagesFragment__you_need_approximately_s_to_export_your_messages_ensure_you_have_enough_space_before_continuing">You need approximately %1$s to export your messages, ensure you have enough space before continuing.</string>
|
||||
<!-- Alert dialog button to continue with exporting sms after seeing the lack of storage warning -->
|
||||
<string name="ExportingSmsMessagesFragment__continue_anyway">Continue anyway</string>
|
||||
<!-- Dialog text shown when Signal isn't granted the sms permission needed to export messages, different than being selected as the sms app -->
|
||||
<string name="ExportingSmsMessagesFragment__signal_needs_the_sms_permission_to_be_able_to_export_your_sms_messages">Signal needs the SMS permission to be able to export your SMS messages.</string>
|
||||
|
||||
<!-- ChooseANewDefaultSmsAppFragment -->
|
||||
<!-- Title of the screen -->
|
||||
|
|
Loading…
Add table
Reference in a new issue