diff --git a/app/src/main/java/com/stevesoltys/backup/activity/MainActivity.java b/app/src/main/java/com/stevesoltys/backup/activity/MainActivity.java
index a14f8830..64b06014 100644
--- a/app/src/main/java/com/stevesoltys/backup/activity/MainActivity.java
+++ b/app/src/main/java/com/stevesoltys/backup/activity/MainActivity.java
@@ -5,26 +5,46 @@ import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
+import android.widget.Button;
import com.stevesoltys.backup.R;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+
public class MainActivity extends Activity implements View.OnClickListener {
public static final int OPEN_DOCUMENT_TREE_REQUEST_CODE = 1;
- public static final int LOAD_DOCUMENT_REQUEST_CODE = 2;
+ public static final int OPEN_DOCUMENT_TREE_BACKUP_REQUEST_CODE = 2;
+
+ public static final int LOAD_DOCUMENT_REQUEST_CODE = 3;
private MainActivityController controller;
+ private Button changeLocationButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
+ controller = new MainActivityController();
+
findViewById(R.id.create_backup_button).setOnClickListener(this);
findViewById(R.id.restore_backup_button).setOnClickListener(this);
- controller = new MainActivityController();
+ changeLocationButton = findViewById(R.id.change_backup_location_button);
+ changeLocationButton.setOnClickListener(this);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ if (controller.isChangeBackupLocationButtonVisible(this)) {
+ changeLocationButton.setVisibility(VISIBLE);
+ } else {
+ changeLocationButton.setVisibility(GONE);
+ }
}
@Override
@@ -40,6 +60,10 @@ public class MainActivity extends Activity implements View.OnClickListener {
case R.id.restore_backup_button:
controller.showLoadDocumentActivity(this);
break;
+
+ case R.id.change_backup_location_button:
+ controller.onChangeBackupLocationButtonClicked(this);
+ break;
}
}
@@ -54,7 +78,11 @@ public class MainActivity extends Activity implements View.OnClickListener {
switch (requestCode) {
case OPEN_DOCUMENT_TREE_REQUEST_CODE:
- controller.handleChooseFolderResult(result, this);
+ controller.handleChooseFolderResult(result, this, false);
+ break;
+
+ case OPEN_DOCUMENT_TREE_BACKUP_REQUEST_CODE:
+ controller.handleChooseFolderResult(result, this, true);
break;
case LOAD_DOCUMENT_REQUEST_CODE:
diff --git a/app/src/main/java/com/stevesoltys/backup/activity/MainActivityController.java b/app/src/main/java/com/stevesoltys/backup/activity/MainActivityController.java
index 7eb084aa..55f67624 100644
--- a/app/src/main/java/com/stevesoltys/backup/activity/MainActivityController.java
+++ b/app/src/main/java/com/stevesoltys/backup/activity/MainActivityController.java
@@ -24,6 +24,7 @@ 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_BACKUP_REQUEST_CODE;
import static com.stevesoltys.backup.activity.MainActivity.OPEN_DOCUMENT_TREE_REQUEST_CODE;
import static com.stevesoltys.backup.settings.SettingsManager.getBackupFolderUri;
import static com.stevesoltys.backup.settings.SettingsManager.setBackupFolderUri;
@@ -40,26 +41,32 @@ class MainActivityController {
void onBackupButtonClicked(Activity parent) {
Uri folderUri = getBackupFolderUri(parent);
if (folderUri == null) {
- showChooseFolderActivity(parent);
+ showChooseFolderActivity(parent, true);
} else {
try {
Uri fileUri = createBackupFile(parent.getContentResolver(), folderUri);
showCreateBackupActivity(parent, fileUri);
+
} catch (IOException e) {
e.printStackTrace();
- showChooseFolderActivity(parent);
+ showChooseFolderActivity(parent, true);
}
}
}
- private void showChooseFolderActivity(Activity parent) {
- Intent createDocumentIntent = new Intent(ACTION_OPEN_DOCUMENT_TREE);
- createDocumentIntent.addFlags(FLAG_GRANT_PERSISTABLE_URI_PERMISSION |
+ boolean isChangeBackupLocationButtonVisible(Activity parent) {
+ return getBackupFolderUri(parent) != null;
+ }
+
+ private void showChooseFolderActivity(Activity parent, boolean continueToBackup) {
+ Intent openTreeIntent = new Intent(ACTION_OPEN_DOCUMENT_TREE);
+ openTreeIntent.addFlags(FLAG_GRANT_PERSISTABLE_URI_PERMISSION |
FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
try {
- Intent documentChooser = Intent.createChooser(createDocumentIntent, "Select the backup location");
- parent.startActivityForResult(documentChooser, OPEN_DOCUMENT_TREE_REQUEST_CODE);
+ Intent documentChooser = Intent.createChooser(openTreeIntent, "Select the backup location");
+ int requestCode = continueToBackup ? OPEN_DOCUMENT_TREE_BACKUP_REQUEST_CODE : OPEN_DOCUMENT_TREE_REQUEST_CODE;
+ parent.startActivityForResult(documentChooser, requestCode);
} catch (ActivityNotFoundException ex) {
Toast.makeText(parent, "Please install a file manager.", Toast.LENGTH_SHORT).show();
@@ -80,7 +87,11 @@ class MainActivityController {
}
}
- void handleChooseFolderResult(Intent result, Activity parent) {
+ void onChangeBackupLocationButtonClicked(Activity parent) {
+ showChooseFolderActivity(parent, false);
+ }
+
+ void handleChooseFolderResult(Intent result, Activity parent, boolean continueToBackup) {
if (result == null || result.getData() == null) {
return;
@@ -97,18 +108,19 @@ class MainActivityController {
// store backup folder location in settings
setBackupFolderUri(parent, folderUri);
- // create a new backup file in folder
- Uri fileUri;
+ if (!continueToBackup) return;
+
try {
- fileUri = createBackupFile(contentResolver, folderUri);
+ // create a new backup file in folder
+ Uri fileUri = createBackupFile(contentResolver, folderUri);
+
+ showCreateBackupActivity(parent, fileUri);
+
} 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();
- return;
}
-
- showCreateBackupActivity(parent, fileUri);
}
private void showCreateBackupActivity(Activity parent, Uri fileUri) {
@@ -134,6 +146,7 @@ class MainActivityController {
Uri fileUri = createDocument(contentResolver, documentUri, DOCUMENT_MIME_TYPE, getBackupFileName());
if (fileUri == null) throw new IOException();
return fileUri;
+
} catch (SecurityException e) {
// happens when folder was deleted and thus Uri permission don't exist anymore
throw new IOException(e);
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 5a3421ab..705c21a7 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,29 +1,37 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/activity_main"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context="com.stevesoltys.backup.activity.MainActivity">
+ android:layout_marginRight="@dimen/button_horizontal_margin"
+ android:text="@string/create_backup_button" />
+ android:layout_marginRight="@dimen/button_horizontal_margin"
+ android:text="@string/restore_backup_button" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 309dfc3e..4bd56585 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,6 +3,7 @@
Create backup
Restore backup
+ Change backup location
Backup success
Backup failure