diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java
index 2064d0a2a..984f03ec8 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java
@@ -295,7 +295,7 @@ public class GBApplication extends Application {
}
/**
- * Deletes the entire Activity database and recreates it with empty tables.
+ * Deletes both the old Activity database and the new one recreates it with empty tables.
*
* @return true on successful deletion
*/
@@ -313,6 +313,20 @@ public class GBApplication extends Application {
return result;
}
+ /**
+ * Deletes the legacy (pre 0.12) Activity database
+ *
+ * @return true on successful deletion
+ */
+ public static synchronized boolean deleteOldActivityDatabase(Context context) {
+ DBHelper dbHelper = new DBHelper(context);
+ boolean result = true;
+ if (dbHelper.existsDB(DBConstants.DATABASE_NAME)) {
+ result = getContext().deleteDatabase(DBConstants.DATABASE_NAME);
+ }
+ return result;
+ }
+
private int getPrefsFileVersion() {
try {
return Integer.parseInt(sharedPrefs.getString(PREFS_VERSION, "0")); //0 is legacy
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DbManagementActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DbManagementActivity.java
index 6320102fc..874af5ba9 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DbManagementActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DbManagementActivity.java
@@ -11,6 +11,7 @@ import android.support.v4.app.NavUtils;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
+import android.widget.TextView;
import android.widget.Toast;
import org.slf4j.Logger;
@@ -37,7 +38,9 @@ public class DbManagementActivity extends GBActivity {
private Button exportDBButton;
private Button importDBButton;
private Button importOldActivityDataButton;
+ private Button deleteOldActivityDBButton;
private Button deleteDBButton;
+ private TextView dbPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -47,6 +50,9 @@ public class DbManagementActivity extends GBActivity {
IntentFilter filter = new IntentFilter();
filter.addAction(GBApplication.ACTION_QUIT);
+ dbPath = (TextView) findViewById(R.id.activity_db_management_path);
+ dbPath.setText(getExternalPath());
+
exportDBButton = (Button) findViewById(R.id.exportDBButton);
exportDBButton.setOnClickListener(new View.OnClickListener() {
@Override
@@ -70,6 +76,14 @@ public class DbManagementActivity extends GBActivity {
}
});
+ deleteOldActivityDBButton = (Button) findViewById(R.id.deleteOldActivityDB);
+ deleteOldActivityDBButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ deleteOldActivityDbFile();
+ }
+ });
+
deleteDBButton = (Button) findViewById(R.id.emptyDBButton);
deleteDBButton.setOnClickListener(new View.OnClickListener() {
@Override
@@ -79,6 +93,14 @@ public class DbManagementActivity extends GBActivity {
});
}
+ private String getExternalPath() {
+ try {
+ return FileUtils.getExternalFilesDir().getAbsolutePath();
+ } catch (Exception ex) {
+ }
+ return "Cannot access export path. Please contact the developers.";
+ }
+
private void exportDB() {
try (DBHandler dbHandler = GBApplication.acquireDB()) {
DBHelper helper = new DBHelper(this);
@@ -203,6 +225,29 @@ public class DbManagementActivity extends GBActivity {
.show();
}
+ private void deleteOldActivityDbFile() {
+ new AlertDialog.Builder(this)
+ .setCancelable(true)
+ .setTitle("Delete old Activity Database?")
+ .setMessage("Really delete the old activity database? Activity data that were not imported will be lost.")
+ .setPositiveButton("Delete", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (GBApplication.deleteOldActivityDatabase(DbManagementActivity.this)) {
+ GB.toast(DbManagementActivity.this, "Old Activity database successfully deleted.", Toast.LENGTH_SHORT, GB.INFO);
+ } else {
+ GB.toast(DbManagementActivity.this, "Old Activity database deletion failed.", Toast.LENGTH_SHORT, GB.INFO);
+ }
+ }
+ })
+ .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ }
+ })
+ .show();
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
diff --git a/app/src/main/res/layout/activity_db_management.xml b/app/src/main/res/layout/activity_db_management.xml
index 22632959a..0787c6a6e 100644
--- a/app/src/main/res/layout/activity_db_management.xml
+++ b/app/src/main/res/layout/activity_db_management.xml
@@ -2,68 +2,108 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
tools:context="nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter">
+ android:layout_height="wrap_content">
-
+ android:paddingBottom="@dimen/activity_vertical_margin"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+ android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingTop="@dimen/activity_vertical_margin">
+
+
+
+
+
+
+
+
+
+
+
-
+ android:layout_marginTop="40dp"
+ android:text="@string/activity_db_management_merge_old_explanation"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
-
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b0bc9a94a..ac0c6783c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -299,4 +299,6 @@
If checked the data is stored \"as is\" and is available for later interpretation. NB: the database will be bigger in this case!
Database Management
Database management
+ The database operations use the following path on your device. \nThis path is accessible to other android applications and your computer. \nExpect to find your exported database (or place the database you want to import) there:
+ The activity data recorded with Gadgetbridge versions prior to 0.12 must be converted to a new format. \nYou can do this using the button below. Be aware that you must be connected to the device you want to associate the old activity data with! \nIf you already imported your data and are happy with the result, you may delete the old database.