mirror of
https://github.com/nextcloud/android.git
synced 2024-11-26 23:28:42 +03:00
commit
e47daaffdc
4 changed files with 96 additions and 67 deletions
|
@ -1 +1 @@
|
|||
426
|
||||
425
|
|
@ -60,6 +60,7 @@ import com.owncloud.android.utils.PushUtils;
|
|||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
@ -73,7 +74,6 @@ import static com.owncloud.android.ui.activity.ManageAccountsActivity.PENDING_FO
|
|||
/**
|
||||
* Removes account and all local files
|
||||
*/
|
||||
|
||||
public class AccountRemovalJob extends Job implements AccountManagerCallback<Boolean> {
|
||||
public static final String TAG = "AccountRemovalJob";
|
||||
public static final String ACCOUNT = "account";
|
||||
|
@ -97,36 +97,17 @@ public class AccountRemovalJob extends Job implements AccountManagerCallback<Boo
|
|||
boolean remoteWipe = bundle.getBoolean(REMOTE_WIPE, false);
|
||||
|
||||
if (account != null && accountManager != null) {
|
||||
ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(context.getContentResolver());
|
||||
|
||||
// disable contact backup job
|
||||
ContactsPreferenceActivity.cancelContactBackupJobForAccount(context, account);
|
||||
|
||||
OwnCloudClient client = null;
|
||||
try {
|
||||
OwnCloudAccount ocAccount = new OwnCloudAccount(account, MainApp.getAppContext());
|
||||
client = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount,
|
||||
MainApp.getAppContext());
|
||||
} catch (Exception e) {
|
||||
Log_OC.e(this, "Could not create client", e);
|
||||
}
|
||||
|
||||
try {
|
||||
AccountManagerFuture<Boolean> accountRemoval = accountManager.removeAccount(account, this, null);
|
||||
boolean removal = accountRemoval.getResult();
|
||||
|
||||
if (!removal) {
|
||||
Log_OC.e(this, "Account removal of " + account.name + " failed!");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log_OC.e(this, "Account removal of " + account.name + " failed!", e);
|
||||
}
|
||||
removeAccount(account, accountManager);
|
||||
|
||||
FileDataStorageManager storageManager = new FileDataStorageManager(account, context.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);
|
||||
// remove all files
|
||||
removeFiles(account, storageManager);
|
||||
|
||||
// delete all database entries
|
||||
storageManager.deleteAllFiles();
|
||||
|
@ -134,62 +115,28 @@ public class AccountRemovalJob extends Job implements AccountManagerCallback<Boo
|
|||
// remove contact backup job
|
||||
ContactsPreferenceActivity.cancelContactBackupJobForAccount(context, account);
|
||||
|
||||
ContentResolver contentResolver = context.getContentResolver();
|
||||
|
||||
// disable daily backup
|
||||
ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(contentResolver);
|
||||
|
||||
arbitraryDataProvider.storeOrUpdateKeyValue(account.name,
|
||||
ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP,
|
||||
"false");
|
||||
|
||||
String arbitraryDataPushString;
|
||||
|
||||
if (!TextUtils.isEmpty(arbitraryDataPushString = arbitraryDataProvider.getValue(
|
||||
account, PushUtils.KEY_PUSH)) &&
|
||||
!TextUtils.isEmpty(context.getResources().getString(R.string.push_server_url))) {
|
||||
Gson gson = new Gson();
|
||||
PushConfigurationState pushArbitraryData = gson.fromJson(arbitraryDataPushString,
|
||||
PushConfigurationState.class);
|
||||
pushArbitraryData.setShouldBeDeleted(true);
|
||||
arbitraryDataProvider.storeOrUpdateKeyValue(account.name, PushUtils.KEY_PUSH,
|
||||
gson.toJson(pushArbitraryData));
|
||||
|
||||
PushUtils.pushRegistrationToServer(userAccountManager, pushArbitraryData.getPushToken());
|
||||
}
|
||||
// unregister push notifications
|
||||
unregisterPushNotifications(context, account, arbitraryDataProvider);
|
||||
|
||||
// remove pending account removal
|
||||
arbitraryDataProvider.deleteKeyForAccount(account.name, PENDING_FOR_REMOVAL);
|
||||
|
||||
// remove synced folders set for account
|
||||
SyncedFolderProvider syncedFolderProvider = new SyncedFolderProvider(context.getContentResolver(),
|
||||
AppPreferencesImpl.fromContext(context));
|
||||
List<SyncedFolder> syncedFolders = syncedFolderProvider.getSyncedFolders();
|
||||
|
||||
List<Long> syncedFolderIds = new ArrayList<>();
|
||||
|
||||
for (SyncedFolder syncedFolder : syncedFolders) {
|
||||
if (syncedFolder.getAccount().equals(account.name)) {
|
||||
arbitraryDataProvider.deleteKeyForAccount(FilesSyncHelper.GLOBAL,
|
||||
FilesSyncHelper.SYNCEDFOLDERINITIATED + syncedFolder.getId());
|
||||
syncedFolderIds.add(syncedFolder.getId());
|
||||
}
|
||||
}
|
||||
|
||||
syncedFolderProvider.deleteSyncFoldersForAccount(account);
|
||||
remoceSyncedFolders(context, account, arbitraryDataProvider);
|
||||
|
||||
// delete all uploads for account
|
||||
uploadsStorageManager.removeAccountUploads(account);
|
||||
|
||||
FilesystemDataProvider filesystemDataProvider = new FilesystemDataProvider(context.getContentResolver());
|
||||
|
||||
for (long syncedFolderId : syncedFolderIds) {
|
||||
filesystemDataProvider.deleteAllEntriesForSyncedFolder(Long.toString(syncedFolderId));
|
||||
}
|
||||
|
||||
// delete stored E2E keys
|
||||
arbitraryDataProvider.deleteKeyForAccount(account.name, EncryptionUtils.PRIVATE_KEY);
|
||||
arbitraryDataProvider.deleteKeyForAccount(account.name, EncryptionUtils.PUBLIC_KEY);
|
||||
|
||||
OwnCloudClient client = createClient(account);
|
||||
if (remoteWipe && client != null) {
|
||||
String authToken = client.getCredentials().getAuthToken();
|
||||
new RemoteWipeSuccessRemoteOperation(authToken).execute(client);
|
||||
|
@ -201,6 +148,81 @@ public class AccountRemovalJob extends Job implements AccountManagerCallback<Boo
|
|||
}
|
||||
}
|
||||
|
||||
private void unregisterPushNotifications(Context context, Account account, ArbitraryDataProvider arbitraryDataProvider) {
|
||||
String arbitraryDataPushString;
|
||||
|
||||
if (!TextUtils.isEmpty(arbitraryDataPushString = arbitraryDataProvider.getValue(
|
||||
account, PushUtils.KEY_PUSH)) &&
|
||||
!TextUtils.isEmpty(context.getResources().getString(R.string.push_server_url))) {
|
||||
Gson gson = new Gson();
|
||||
PushConfigurationState pushArbitraryData = gson.fromJson(arbitraryDataPushString,
|
||||
PushConfigurationState.class);
|
||||
pushArbitraryData.setShouldBeDeleted(true);
|
||||
arbitraryDataProvider.storeOrUpdateKeyValue(account.name, PushUtils.KEY_PUSH,
|
||||
gson.toJson(pushArbitraryData));
|
||||
|
||||
PushUtils.pushRegistrationToServer(userAccountManager, pushArbitraryData.getPushToken());
|
||||
}
|
||||
}
|
||||
|
||||
private void remoceSyncedFolders(Context context, Account account, ArbitraryDataProvider arbitraryDataProvider) {
|
||||
SyncedFolderProvider syncedFolderProvider = new SyncedFolderProvider(context.getContentResolver(),
|
||||
AppPreferencesImpl.fromContext(context));
|
||||
List<SyncedFolder> syncedFolders = syncedFolderProvider.getSyncedFolders();
|
||||
|
||||
List<Long> syncedFolderIds = new ArrayList<>();
|
||||
|
||||
for (SyncedFolder syncedFolder : syncedFolders) {
|
||||
if (syncedFolder.getAccount().equals(account.name)) {
|
||||
arbitraryDataProvider.deleteKeyForAccount(FilesSyncHelper.GLOBAL,
|
||||
FilesSyncHelper.SYNCEDFOLDERINITIATED + syncedFolder.getId());
|
||||
syncedFolderIds.add(syncedFolder.getId());
|
||||
}
|
||||
}
|
||||
|
||||
syncedFolderProvider.deleteSyncFoldersForAccount(account);
|
||||
|
||||
FilesystemDataProvider filesystemDataProvider = new FilesystemDataProvider(context.getContentResolver());
|
||||
|
||||
for (long syncedFolderId : syncedFolderIds) {
|
||||
filesystemDataProvider.deleteAllEntriesForSyncedFolder(Long.toString(syncedFolderId));
|
||||
}
|
||||
}
|
||||
|
||||
private void removeFiles(Account account, FileDataStorageManager storageManager) {
|
||||
File tempDir = new File(FileStorageUtils.getTemporalPath(account.name));
|
||||
File saveDir = new File(FileStorageUtils.getSavePath(account.name));
|
||||
|
||||
FileStorageUtils.deleteRecursively(tempDir, storageManager);
|
||||
FileStorageUtils.deleteRecursively(saveDir, storageManager);
|
||||
}
|
||||
|
||||
private void removeAccount(Account account, AccountManager accountManager) {
|
||||
try {
|
||||
AccountManagerFuture<Boolean> accountRemoval = accountManager.removeAccount(account, this, null);
|
||||
boolean removal = accountRemoval.getResult();
|
||||
|
||||
if (!removal) {
|
||||
Log_OC.e(this, "Account removal of " + account.name + " failed!");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log_OC.e(this, "Account removal of " + account.name + " failed!", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private OwnCloudClient createClient(Account account) {
|
||||
OwnCloudClient client = null;
|
||||
try {
|
||||
OwnCloudAccount ocAccount = new OwnCloudAccount(account, MainApp.getAppContext());
|
||||
client = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount,
|
||||
MainApp.getAppContext());
|
||||
} catch (Exception e) {
|
||||
Log_OC.e(this, "Could not create client", e);
|
||||
}
|
||||
return client;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(AccountManagerFuture<Boolean> future) {
|
||||
if (future.isDone()) {
|
||||
|
|
|
@ -53,10 +53,10 @@ public class PhotoFragment extends OCFileListFragment {
|
|||
private SearchRemoteOperation searchRemoteOperation;
|
||||
private AsyncTask photoSearchTask;
|
||||
private SearchEvent searchEvent;
|
||||
private boolean refresh = false;
|
||||
private boolean refresh;
|
||||
|
||||
public PhotoFragment() {
|
||||
|
||||
this.refresh = false;
|
||||
}
|
||||
|
||||
public PhotoFragment(boolean refresh) {
|
||||
|
|
|
@ -84,10 +84,12 @@ import org.jetbrains.annotations.NotNull;
|
|||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
@ -500,6 +502,11 @@ public class ContactListFragment extends FileFragment implements Injectable {
|
|||
public String toString() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Arrays.hashCode(new Object[] {displayName, name, type});
|
||||
}
|
||||
}
|
||||
|
||||
private class DownloadFinishReceiver extends BroadcastReceiver {
|
||||
|
|
Loading…
Reference in a new issue