X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/e5515c1a2d4ec96b52224df11d19259ffafa2b66..d7b32ecc1754cc06023de2e6f2bbbf3555514d74:/src/com/owncloud/android/ui/dialog/RemoveFileDialogFragment.java diff --git a/src/com/owncloud/android/ui/dialog/RemoveFileDialogFragment.java b/src/com/owncloud/android/ui/dialog/RemoveFileDialogFragment.java new file mode 100644 index 00000000..8158a5a2 --- /dev/null +++ b/src/com/owncloud/android/ui/dialog/RemoveFileDialogFragment.java @@ -0,0 +1,158 @@ +/* ownCloud Android client application + * Copyright (C) 2014 ownCloud Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.owncloud.android.ui.dialog; + +/** + * Dialog requiring confirmation before removing a given OCFile. + * + * Triggers the removal according to the user response. + * + * @author David A. Velasco + */ +import java.io.File; +import java.util.Vector; + +import com.owncloud.android.R; +import com.owncloud.android.datamodel.FileDataStorageManager; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.ui.activity.ComponentsGetter; +import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener; + +import android.app.Dialog; +import android.media.MediaScannerConnection; +import android.os.Bundle; + +public class RemoveFileDialogFragment extends ConfirmationDialogFragment +implements ConfirmationDialogFragmentListener { + + private static final String ARG_TARGET_FILE = "TARGET_FILE"; + + /** + * Public factory method to create new RemoveFileDialogFragment instances. + * + * @param file File to remove. + * @return Dialog ready to show. + */ + public static RemoveFileDialogFragment newInstance(OCFile file) { + RemoveFileDialogFragment frag = new RemoveFileDialogFragment(); + Bundle args = new Bundle(); + + int messageStringId = R.string.confirmation_remove_alert; + + int posBtn = R.string.confirmation_remove_remote; + int neuBtn = -1; + if (file.isFolder()) { + messageStringId = R.string.confirmation_remove_folder_alert; + posBtn = R.string.confirmation_remove_remote_and_local; + neuBtn = R.string.confirmation_remove_folder_local; + } else if (file.isDown()) { + posBtn = R.string.confirmation_remove_remote_and_local; + neuBtn = R.string.confirmation_remove_local; + } + + + args.putInt(ARG_CONF_RESOURCE_ID, messageStringId); + args.putStringArray(ARG_CONF_ARGUMENTS, new String[]{file.getFileName()}); + args.putInt(ARG_POSITIVE_BTN_RES, posBtn); + args.putInt(ARG_NEUTRAL_BTN_RES, neuBtn); + args.putInt(ARG_NEGATIVE_BTN_RES, R.string.common_cancel); + args.putParcelable(ARG_TARGET_FILE, file); + frag.setArguments(args); + + return frag; + } + + private OCFile mTargetFile; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + Dialog dialog = super.onCreateDialog(savedInstanceState); + mTargetFile = getArguments().getParcelable(ARG_TARGET_FILE); + + setOnConfirmationListener(this); + + return dialog; + } + + /** + * Performs the removal of the target file, both locally and in the server. + */ + @Override + public void onConfirmation(String callerTag) { + ComponentsGetter cg = (ComponentsGetter)getSherlockActivity(); + FileDataStorageManager storageManager = cg.getStorageManager(); + if (storageManager.getFileById(mTargetFile.getFileId()) != null) { + String path = new File(mTargetFile.getStoragePath()).getParent(); + cg.getFileOperationsHelper().removeFile(mTargetFile, false); + triggerMediaScan(path); + } + } + + /** + * Performs the removal of the local copy of the target file + */ + @Override + public void onNeutral(String callerTag) { + String path = new File(mTargetFile.getStoragePath()).getParent(); + ComponentsGetter cg = (ComponentsGetter)getSherlockActivity(); + cg.getFileOperationsHelper() + .removeFile(mTargetFile, true); + + FileDataStorageManager storageManager = cg.getStorageManager(); + + boolean containsKeepInSync = false; + if (mTargetFile.isFolder()) { + Vector files = storageManager.getFolderContent(mTargetFile); + for(OCFile file: files) { + containsKeepInSync = file.keepInSync() || containsKeepInSync; + + if (containsKeepInSync) + break; + } + } + + // Remove etag for parent, if file is a keep_in_sync + // or is a folder and contains keep_in_sync + if (mTargetFile.keepInSync() || containsKeepInSync) { + OCFile folder = null; + if (mTargetFile.isFolder()) { + folder = mTargetFile; + } else { + folder = storageManager.getFileById(mTargetFile.getParentId()); + } + + folder.setEtag(""); + storageManager.saveFile(folder); + } + + // Trigger MediaScan + triggerMediaScan(path); + } + + @Override + public void onCancel(String callerTag) { + // nothing to do here + } + + private void triggerMediaScan(String path){ + MediaScannerConnection.scanFile( + getActivity().getApplicationContext(), + new String[]{path}, + null,null); + } +} \ No newline at end of file