fix 'create backup' button
This commit is contained in:
parent
ae35bce828
commit
359b386a6c
|
@ -1,33 +1,101 @@
|
|||
package eu.siacs.conversations.ui.fragment.settings;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
import eu.siacs.conversations.BuildConfig;
|
||||
import eu.siacs.conversations.R;
|
||||
import eu.siacs.conversations.persistance.FileBackend;
|
||||
import eu.siacs.conversations.services.ExportBackupService;
|
||||
|
||||
public class MainSettingsFragment extends PreferenceFragmentCompat {
|
||||
|
||||
private static final String CREATE_BACKUP = "create_backup";
|
||||
|
||||
private ActivityResultLauncher<String> requestStorageForBackupLauncher =
|
||||
registerForActivityResult(
|
||||
new ActivityResultContracts.RequestPermission(),
|
||||
isGranted -> {
|
||||
if (isGranted) {
|
||||
startBackup();
|
||||
} else {
|
||||
Toast.makeText(
|
||||
requireActivity(),
|
||||
getString(
|
||||
R.string.no_storage_permission,
|
||||
getString(R.string.app_name)),
|
||||
Toast.LENGTH_LONG)
|
||||
.show();
|
||||
}
|
||||
});
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) {
|
||||
setPreferencesFromResource(R.xml.preferences_main, rootKey);
|
||||
final var about = findPreference("about");
|
||||
final var connection = findPreference("connection");
|
||||
if (about == null || connection == null) {
|
||||
throw new IllegalStateException("The preference resource file is missing some preferences");
|
||||
final var backup = findPreference(CREATE_BACKUP);
|
||||
if (about == null || connection == null || backup == null) {
|
||||
throw new IllegalStateException(
|
||||
"The preference resource file is missing some preferences");
|
||||
}
|
||||
backup.setSummary(
|
||||
getString(
|
||||
R.string.pref_create_backup_summary,
|
||||
FileBackend.getBackupDirectory(requireContext()).getAbsolutePath()));
|
||||
backup.setOnPreferenceClickListener(this::onBackupPreferenceClicked);
|
||||
about.setTitle(getString(R.string.title_activity_about_x, BuildConfig.APP_NAME));
|
||||
about.setSummary(String.format("%s %s %s (%s)", BuildConfig.APP_NAME, BuildConfig.VERSION_NAME, im.conversations.webrtc.BuildConfig.WEBRTC_VERSION, Strings.nullToEmpty(Build.DEVICE)));
|
||||
about.setSummary(
|
||||
String.format(
|
||||
"%s %s %s (%s)",
|
||||
BuildConfig.APP_NAME,
|
||||
BuildConfig.VERSION_NAME,
|
||||
im.conversations.webrtc.BuildConfig.WEBRTC_VERSION,
|
||||
Strings.nullToEmpty(Build.DEVICE)));
|
||||
if (ConnectionSettingsFragment.hideChannelDiscovery()) {
|
||||
connection.setSummary(R.string.pref_connection_summary);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean onBackupPreferenceClicked(final Preference preference) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
||||
if (ContextCompat.checkSelfPermission(
|
||||
requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
requestStorageForBackupLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
} else {
|
||||
startBackup();
|
||||
}
|
||||
} else {
|
||||
startBackup();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void startBackup() {
|
||||
ContextCompat.startForegroundService(
|
||||
requireContext(), new Intent(requireContext(), ExportBackupService.class));
|
||||
final MaterialAlertDialogBuilder builder =
|
||||
new MaterialAlertDialogBuilder(requireActivity());
|
||||
builder.setMessage(R.string.backup_started_message);
|
||||
builder.setPositiveButton(R.string.ok, null);
|
||||
builder.create().show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
|
Loading…
Reference in a new issue