Browse Source

delete all local files on account removal

tobiasKaminsky 7 years ago
parent
commit
8fef61ea93

+ 16 - 0
src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -2160,4 +2160,20 @@ public class FileDataStorageManager {
         return ocFiles;
     }
 
+    public void deleteAllFiles() {
+        String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?";
+        String[] whereArgs = new String[]{mAccount.name};
+
+        if (getContentResolver() != null) {
+            getContentResolver().delete(ProviderTableMeta.CONTENT_URI_FILE, where, whereArgs);
+
+        } else {
+            try {
+                getContentProviderClient().delete(ProviderTableMeta.CONTENT_URI_FILE, where, whereArgs);
+            } catch (RemoteException e) {
+                Log_OC.e(TAG, "Exception in deleteAllFiles for account " + mAccount.name + ": " + e.getMessage(), e);
+            }
+        }
+    }
+
 }

+ 27 - 0
src/main/java/com/owncloud/android/ui/activity/ManageAccountsActivity.java

@@ -29,6 +29,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -53,10 +54,12 @@ import com.owncloud.android.ui.adapter.AccountListItem;
 import com.owncloud.android.ui.helpers.FileOperationsHelper;
 import com.owncloud.android.utils.AnalyticsUtils;
 import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.FileStorageUtils;
 import com.owncloud.android.utils.ThemeUtils;
 
 import org.parceler.Parcels;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Set;
 
@@ -358,6 +361,30 @@ public class ManageAccountsActivity extends FileActivity
     private void performAccountRemoval(Account account) {
         AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
         am.removeAccount(account, this, this.getHandler());
+
+        deleteAccountFiles(account);
+    }
+
+    private void deleteAccountFiles(final Account account) {
+        AsyncTask removalTask = new AsyncTask() {
+            @Override
+            protected Object doInBackground(Object[] params) {
+                FileDataStorageManager storageManager = new FileDataStorageManager(account, getContentResolver());
+
+                File tempDir = new File(FileStorageUtils.getTemporalPath(account.name));
+                File saveDir = new File(FileStorageUtils.getSavePath(account.name));
+
+                FileStorageUtils.deleteRecursively(tempDir, storageManager);
+                FileStorageUtils.deleteRecursively(saveDir, storageManager);
+
+                // delete all database entries
+                storageManager.deleteAllFiles();
+
+                return true;
+            }
+        };
+
+        removalTask.execute();
     }
 
     /**

+ 12 - 0
src/main/java/com/owncloud/android/utils/FileStorageUtils.java

@@ -28,6 +28,7 @@ import android.webkit.MimeTypeMap;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.files.RemoteFile;
@@ -579,4 +580,15 @@ public class FileStorageUtils {
         return ret;
     }
 
+    public static void deleteRecursively(File file, FileDataStorageManager storageManager) {
+        if (file.isDirectory()) {
+            for (File child : file.listFiles()) {
+                deleteRecursively(child, storageManager);
+            }
+        }
+
+        storageManager.deleteFileInMediaScan(file.getAbsolutePath());
+        file.delete();
+    }
+
 }

+ 1 - 1
src/main/res/values/strings.xml

@@ -154,7 +154,7 @@
     <string name="about_title">About</string>
     <string name="change_password">Change password</string>
     <string name="delete_account">Remove account</string>
-    <string name="delete_account_warning">Delete account %s?\n\nDeleting cannot be undone.</string>
+    <string name="delete_account_warning">Delete account %s with all local files?\n\nDeleting cannot be undone.</string>
     <string name="create_account">Create account</string>
     <string name="upload_chooser_title">Upload from &#8230;</string>
     <string name="uploader_info_dirname">Folder name</string>