1
0
Fork 0
seedvault/app/src/main/java/com/stevesoltys/backup/activity/MainActivityController.java

121 lines
4.6 KiB
Java
Raw Normal View History

2017-09-20 22:42:15 -04:00
package com.stevesoltys.backup.activity;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
2017-09-20 22:42:15 -04:00
import android.content.Intent;
import android.net.Uri;
2017-09-20 22:42:15 -04:00
import android.widget.Toast;
import com.stevesoltys.backup.activity.backup.CreateBackupActivity;
import com.stevesoltys.backup.activity.restore.RestoreBackupActivity;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
2017-09-20 22:42:15 -04:00
import static android.content.Intent.ACTION_OPEN_DOCUMENT;
import static android.content.Intent.ACTION_OPEN_DOCUMENT_TREE;
2017-09-20 22:42:15 -04:00
import static android.content.Intent.CATEGORY_OPENABLE;
import static android.content.Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION;
import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION;
import static android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
import static android.provider.DocumentsContract.buildDocumentUriUsingTree;
import static android.provider.DocumentsContract.createDocument;
import static android.provider.DocumentsContract.getTreeDocumentId;
import static com.stevesoltys.backup.activity.MainActivity.OPEN_DOCUMENT_TREE_REQUEST_CODE;
2017-09-20 22:42:15 -04:00
/**
* @author Steve Soltys
* @author Torsten Grote
2017-09-20 22:42:15 -04:00
*/
class MainActivityController {
private static final String DOCUMENT_MIME_TYPE = "application/octet-stream";
private static final String DOCUMENT_SUFFIX = "yyyy-MM-dd_HH_mm_ss";
2017-09-20 22:42:15 -04:00
void showChooseFolderActivity(Activity parent) {
Intent createDocumentIntent = new Intent(ACTION_OPEN_DOCUMENT_TREE);
createDocumentIntent.addFlags(FLAG_GRANT_PERSISTABLE_URI_PERMISSION |
FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
2017-09-20 22:42:15 -04:00
try {
Intent documentChooser = Intent.createChooser(createDocumentIntent, "Select the backup location");
parent.startActivityForResult(documentChooser, OPEN_DOCUMENT_TREE_REQUEST_CODE);
2017-09-20 22:42:15 -04:00
} catch (ActivityNotFoundException ex) {
Toast.makeText(parent, "Please install a file manager.", Toast.LENGTH_SHORT).show();
}
}
void showLoadDocumentActivity(Activity parent) {
Intent loadDocumentIntent = new Intent(ACTION_OPEN_DOCUMENT);
loadDocumentIntent.addCategory(CATEGORY_OPENABLE);
loadDocumentIntent.setType(DOCUMENT_MIME_TYPE);
try {
Intent documentChooser = Intent.createChooser(loadDocumentIntent, "Select the backup location");
parent.startActivityForResult(documentChooser, MainActivity.LOAD_DOCUMENT_REQUEST_CODE);
} catch (ActivityNotFoundException ex) {
Toast.makeText(parent, "Please install a file manager.", Toast.LENGTH_SHORT).show();
}
}
void handleChooseFolderResult(Intent result, Activity parent) {
2017-09-20 22:42:15 -04:00
if (result == null || result.getData() == null) {
return;
}
Uri folderUri = result.getData();
ContentResolver contentResolver = parent.getContentResolver();
// persist permission to access backup folder across reboots
int takeFlags = result.getFlags() &
(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
contentResolver.takePersistableUriPermission(folderUri, takeFlags);
// create backup file in folder
Uri fileUri;
try {
fileUri = createBackupFile(contentResolver, folderUri);
} catch (IOException e) {
// TODO show better error message once more infrastructure is in place
Toast.makeText(parent, "Error creating backup file", Toast.LENGTH_SHORT).show();
e.printStackTrace();
2017-09-20 22:42:15 -04:00
return;
}
Intent intent = new Intent(parent, CreateBackupActivity.class);
intent.setData(fileUri);
2017-09-20 22:42:15 -04:00
parent.startActivity(intent);
}
void handleLoadDocumentResult(Intent result, Activity parent) {
if (result == null) {
return;
}
Intent intent = new Intent(parent, RestoreBackupActivity.class);
intent.setData(result.getData());
parent.startActivity(intent);
}
private Uri createBackupFile(ContentResolver contentResolver, Uri folderUri) throws IOException {
Uri documentUri = buildDocumentUriUsingTree(folderUri, getTreeDocumentId(folderUri));
Uri fileUri = createDocument(contentResolver, documentUri, DOCUMENT_MIME_TYPE, getBackupFileName());
if (fileUri == null) throw new IOException();
return fileUri;
}
private String getBackupFileName() {
SimpleDateFormat dateFormat = new SimpleDateFormat(DOCUMENT_SUFFIX, Locale.US);
String date = dateFormat.format(new Date());
return "backup-" + date;
}
2017-09-20 22:42:15 -04:00
}