Cleanup backup permissions.

This commit is contained in:
Anton Chekulaev 2020-09-16 16:30:39 +10:00
parent bc3ded29bf
commit c0785e4da7
3 changed files with 15 additions and 28 deletions

View File

@ -152,17 +152,11 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
private class BackupClickListener implements Preference.OnPreferenceClickListener { private class BackupClickListener implements Preference.OnPreferenceClickListener {
@Override @Override
public boolean onPreferenceClick(Preference preference) { public boolean onPreferenceClick(Preference preference) {
Permissions.with(ChatsPreferenceFragment.this) if (!((SwitchPreferenceCompat)preference).isChecked()) {
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE) BackupDialog.showEnableBackupDialog(getActivity(), (SwitchPreferenceCompat)preference, backupDirSelector);
.onAllGranted(() -> { } else {
if (!((SwitchPreferenceCompat)preference).isChecked()) { BackupDialog.showDisableBackupDialog(getActivity(), (SwitchPreferenceCompat)preference);
BackupDialog.showEnableBackupDialog(getActivity(), (SwitchPreferenceCompat)preference, backupDirSelector); }
} else {
BackupDialog.showDisableBackupDialog(getActivity(), (SwitchPreferenceCompat)preference);
}
})
.withPermanentDenialDialog(getString(R.string.ChatsPreferenceFragment_signal_requires_external_storage_permission_in_order_to_create_backups))
.execute();
return true; return true;
} }
@ -172,16 +166,10 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
@Override @Override
public boolean onPreferenceClick(Preference preference) { public boolean onPreferenceClick(Preference preference) {
Permissions.with(ChatsPreferenceFragment.this) Log.i(TAG, "Queuing backup...");
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE) ApplicationContext.getInstance(getContext())
.onAllGranted(() -> { .getJobManager()
Log.i(TAG, "Queing backup..."); .add(new LocalBackupJob());
ApplicationContext.getInstance(getContext())
.getJobManager()
.add(new LocalBackupJob());
})
.withPermanentDenialDialog(getString(R.string.ChatsPreferenceFragment_signal_requires_external_storage_permission_in_order_to_create_backups))
.execute();
return true; return true;
} }

View File

@ -23,6 +23,7 @@ import java.io.IOException
import java.security.SecureRandom import java.security.SecureRandom
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
import kotlin.jvm.Throws
object BackupUtil { object BackupUtil {
private const val TAG = "BackupUtil" private const val TAG = "BackupUtil"
@ -43,14 +44,10 @@ object BackupUtil {
@JvmStatic @JvmStatic
fun generateBackupPassphrase(): Array<String> { fun generateBackupPassphrase(): Array<String> {
val result = arrayOfNulls<String>(6) val random = ByteArray(30).also { SecureRandom().nextBytes(it) }
val random = ByteArray(30) return Array(6) {i ->
SecureRandom().nextBytes(random) String.format("%05d", ByteUtil.byteArray5ToLong(random, i * 5) % 100000)
for (i in 0..5) {
result[i] = String.format("%05d", ByteUtil.byteArray5ToLong(random, i * 5) % 100000)
} }
@Suppress("UNCHECKED_CAST")
return result as Array<String>
} }
@JvmStatic @JvmStatic

View File

@ -18,9 +18,11 @@ import java.io.File
import java.io.IOException import java.io.IOException
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import kotlin.jvm.Throws
/** /**
* Saves attachment files to an external storage using [MediaStore] API. * Saves attachment files to an external storage using [MediaStore] API.
* Requires [android.Manifest.permission.WRITE_EXTERNAL_STORAGE] on API 28 and below.
*/ */
class SaveAttachmentTask : ProgressDialogAsyncTask<SaveAttachmentTask.Attachment, Void, Pair<Int, String?>> { class SaveAttachmentTask : ProgressDialogAsyncTask<SaveAttachmentTask.Attachment, Void, Pair<Int, String?>> {