diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DataManagementActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DataManagementActivity.java
index c83d264b5..5db3df455 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DataManagementActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DataManagementActivity.java
@@ -28,13 +28,10 @@ import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.DocumentsContract;
-import android.text.TextUtils;
-import android.util.Pair;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
@@ -45,9 +42,7 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
@@ -140,6 +135,17 @@ public class DataManagementActivity extends AbstractGBActivity {
}
});
+ TextView dbPath2 = findViewById(R.id.activity_data_management_path2);
+ dbPath2.setText(getExternalPath());
+
+ Button cleanExportDirectoryButton = findViewById(R.id.cleanExportDirectoryButton);
+ cleanExportDirectoryButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ cleanExportDirectory();
+ }
+ });
+
Prefs prefs = GBApplication.getPrefs();
boolean autoExportEnabled = prefs.getBoolean(GBPrefs.AUTO_EXPORT_ENABLED, false);
int autoExportInterval = prefs.getInt(GBPrefs.AUTO_EXPORT_INTERVAL, 0);
@@ -174,8 +180,7 @@ public class DataManagementActivity extends AbstractGBActivity {
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
}
- private void showDirectoryContent() {
- }
+
//would rather re-use method of SettingsActivity... but lifecycle...
private String getAutoExportLocationSummary() {
@@ -196,8 +201,8 @@ public class DataManagementActivity extends AbstractGBActivity {
if (cursor != null && cursor.moveToFirst()) {
return cursor.getString(cursor.getColumnIndex(DocumentsContract.Document.COLUMN_DISPLAY_NAME));
}
- } catch (Exception fdfsdfds) {
- LOG.error("Error", fdfsdfds);
+ } catch (Exception exception) {
+ LOG.error("Error getting export path", exception);
}
}
return "";
@@ -275,6 +280,7 @@ public class DataManagementActivity extends AbstractGBActivity {
private void exportDB() {
new AlertDialog.Builder(this)
.setCancelable(true)
+ .setIcon(R.drawable.ic_warning)
.setTitle(R.string.dbmanagementactivity_export_data_title)
.setMessage(R.string.dbmanagementactivity_export_confirmation)
.setPositiveButton(R.string.activity_DB_ExportButton, new DialogInterface.OnClickListener() {
@@ -302,6 +308,7 @@ public class DataManagementActivity extends AbstractGBActivity {
private void importDB() {
new AlertDialog.Builder(this)
.setCancelable(true)
+ .setIcon(R.drawable.ic_warning)
.setTitle(R.string.dbmanagementactivity_import_data_title)
.setMessage(R.string.dbmanagementactivity_overwrite_database_confirmation)
.setPositiveButton(R.string.dbmanagementactivity_overwrite, new DialogInterface.OnClickListener() {
@@ -332,6 +339,7 @@ public class DataManagementActivity extends AbstractGBActivity {
private void deleteActivityDatabase() {
new AlertDialog.Builder(this)
.setCancelable(true)
+ .setIcon(R.drawable.ic_warning)
.setTitle(R.string.dbmanagementactivity_delete_activity_data_title)
.setMessage(R.string.dbmanagementactivity_really_delete_entire_db)
.setPositiveButton(R.string.Delete, new DialogInterface.OnClickListener() {
@@ -353,10 +361,12 @@ public class DataManagementActivity extends AbstractGBActivity {
}
private void deleteOldActivityDbFile() {
- new AlertDialog.Builder(this).setCancelable(true);
- new AlertDialog.Builder(this).setTitle(R.string.dbmanagementactivity_delete_old_activity_db);
- new AlertDialog.Builder(this).setMessage(R.string.dbmanagementactivity_delete_old_activitydb_confirmation);
- new AlertDialog.Builder(this).setPositiveButton(R.string.Delete, new DialogInterface.OnClickListener() {
+ new AlertDialog.Builder(this)
+ .setCancelable(true)
+ .setTitle(R.string.dbmanagementactivity_delete_old_activity_db)
+ .setIcon(R.drawable.ic_warning)
+ .setMessage(R.string.dbmanagementactivity_delete_old_activitydb_confirmation)
+ .setPositiveButton(R.string.Delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (GBApplication.deleteOldActivityDatabase(DataManagementActivity.this)) {
@@ -374,6 +384,45 @@ public class DataManagementActivity extends AbstractGBActivity {
new AlertDialog.Builder(this).show();
}
+ private void cleanExportDirectory() {
+ new AlertDialog.Builder(this)
+ .setCancelable(true)
+ .setIcon(R.drawable.ic_warning)
+ .setTitle(R.string.activity_DB_clean_export_directory_warning_title)
+ .setMessage(getString(R.string.activity_DB_clean_export_directory_warning_message))
+ .setPositiveButton(R.string.Delete, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ try {
+ File externalFilesDir = FileUtils.getExternalFilesDir();
+ String autoexportFile = getAutoExportLocationSummary();
+ for (File file : externalFilesDir.listFiles()) {
+ if (file.isFile() &&
+ (!FileUtils.getExtension(file.toString()).toLowerCase().equals("gpx")) && //keep GPX files
+ (!file.toString().equals(autoexportFile)) // do not remove autoexport
+ ) {
+ LOG.debug("Deleting file: " + file);
+ try {
+ file.delete();
+ } catch (Exception exception) {
+ LOG.error("Error erasing file: " + exception);
+ }
+ }
+ }
+ GB.toast(getString(R.string.dbmanagementactivity_export_finished), Toast.LENGTH_SHORT, GB.INFO);
+ } catch (Exception ex) {
+ GB.toast(DataManagementActivity.this, getString(R.string.dbmanagementactivity_error_cleaning_export_directory, ex.getMessage()), Toast.LENGTH_LONG, GB.ERROR, ex);
+ }
+ }
+ })
+ .setNegativeButton(R.string.Cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ }
+ })
+ .show();
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/FileUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/FileUtils.java
index 101c4f82b..505eb6fee 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/FileUtils.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/FileUtils.java
@@ -338,4 +338,16 @@ public class FileUtils {
public static String makeValidFileName(String name) {
return name.replaceAll("[\0/:\\r\\n\\\\]", "_");
}
+ /**
+ *Returns extension of a file
+ * @param file string filename
+ */
+ public static String getExtension(String file) {
+ int i = file.lastIndexOf('.');
+ String extension = "";
+ if (i > 0) {
+ extension = file.substring(i + 1);
+ }
+ return extension;
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_warning.xml b/app/src/main/res/drawable/ic_warning.xml
new file mode 100644
index 000000000..506d0586e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_warning.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_data_management.xml b/app/src/main/res/layout/activity_data_management.xml
index 260360b44..d72cb5216 100644
--- a/app/src/main/res/layout/activity_data_management.xml
+++ b/app/src/main/res/layout/activity_data_management.xml
@@ -11,9 +11,9 @@
android:layout_height="wrap_content">
+ android:textColor="@color/accent" />
+ android:textAppearance="?android:attr/textAppearanceSmall" />
-
+ android:textStyle="bold" />
+
+
+
+
+
+
+
+
+
+ android:textColor="@color/accent" />
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:textStyle="bold" />
+ android:textColor="@color/accent" />
+ android:textColor="@color/accent" />
+ android:textAppearance="?android:attr/textAppearanceSmall" />