package com.owncloud.android.ui.activity;
import java.io.File;
+import java.io.IOException;
import android.accounts.Account;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.Dialog;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
+ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.View;
import com.owncloud.android.Log_OC;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountAuthenticator;
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.authentication.AccountUtils.AccountNotFoundException;
import com.owncloud.android.datamodel.DataStorageManager;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileObserverService;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
+import com.owncloud.android.network.OwnCloudClientUtils;
import com.owncloud.android.operations.CreateFolderOperation;
import com.owncloud.android.operations.OnRemoteOperationListener;
import com.owncloud.android.operations.RemoteOperation;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.RenameFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
+import com.owncloud.android.operations.SynchronizeFolderOperation;
import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.syncadapter.FileSyncService;
import com.owncloud.android.ui.dialog.EditNameDialog;
+ import com.owncloud.android.ui.dialog.LoadingDialog;
import com.owncloud.android.ui.dialog.SslValidatorDialog;
import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;
import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;
import com.owncloud.android.ui.preview.PreviewMediaFragment;
import com.owncloud.android.ui.preview.PreviewVideoActivity;
+import eu.alefzero.webdav.WebdavClient;
+
/**
* Displays, what files the user has available in his ownCloud.
*
private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 1;
private static final int DIALOG_SSL_VALIDATOR = 2;
private static final int DIALOG_CERT_NOT_SAVED = 3;
+
+ private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
public static final String ACTION_DETAILS = "com.owncloud.android.ui.activity.action.DETAILS";
FileFragment second = getSecondFragment();
OCFile currentDir = getCurrentDir();
if((currentDir != null && currentDir.getParentId() != 0) ||
- (second != null && second.getFile() != null)) {
+ (second != null && second.getFile() != null)) {
onBackPressed();
+
}
break;
}
outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW, mWaitingToPreview);
Log_OC.d(TAG, "onSaveInstanceState() end");
}
+
+
@Override
protected void onResume() {
/**
+ * Show loading dialog
+ */
+ public void showLoadingDialog() {
+ // Construct dialog
+ LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment));
+ FragmentManager fm = getSupportFragmentManager();
+ FragmentTransaction ft = fm.beginTransaction();
+ loading.show(ft, DIALOG_WAIT_TAG);
+
+ }
+
+ /**
+ * Dismiss loading dialog
+ */
+ public void dismissLoadingDialog(){
+ Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
+ if (frag != null) {
+ LoadingDialog loading = (LoadingDialog) frag;
+ loading.dismiss();
+ }
+ }
+
+
+ /**
* Translates a content URI of an image to a physical path
* on the disk
* @param uri The URI to resolve
public void onBrowsedDownTo(OCFile directory) {
pushDirname(directory);
cleanSecondFragment();
+
+ // Sync Folder
+ startSyncFolderOperation(directory.getRemotePath(), directory.getFileId());
+// // Update folder size on DB
+// getStorageManager().calculateFolderSize(directory.getParentId());
+
}
/**
} else if (operation instanceof CreateFolderOperation) {
onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
+
+ } else if (operation instanceof SynchronizeFolderOperation) {
+ onSynchronizeFolderOperationFinish((SynchronizeFolderOperation)operation, result);
+ }
+ }
+
+
+ /**
+ * Updates the view associated to the activity after the finish of an operation trying to synchronize a folder.
+ *
+ * @param operation Synchronize operation performed.
+ * @param result Result of the synchronization.
+ */
+ private void onSynchronizeFolderOperationFinish(SynchronizeFolderOperation operation, RemoteOperationResult result) {
+
+ OCFileListFragment list = getListOfFilesFragment();
+ enableDisableViewGroup(list.getListView(), true);
+
+ setSupportProgressBarIndeterminateVisibility(false);
+ if (result.isSuccess()) {
+ if (result.getCode() != ResultCode.OK_NO_CHANGES_ON_DIR) {
+ DataStorageManager storageManager = getStorageManager();
+ OCFile parentDir = storageManager.getFileByPath(operation.getRemotePath());
+
+ // Update folder size on DB
+ getStorageManager().calculateFolderSize(parentDir.getFileId());
+
+ // Refrest List
+ refreshListOfFilesFragment(parentDir);
+ }
+ } else {
+ try {
+ Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.sync_file_fail_msg, Toast.LENGTH_LONG);
+ msg.show();
+
+ } catch (NotFoundException e) {
+ Log_OC.e(TAG, "Error while trying to show fail message " , e);
+ }
+ }
+ }
+
+
+ private void refreshListOfFilesFragment(OCFile parentDir) {
+ OCFileListFragment fileListFragment = getListOfFilesFragment();
+ if (fileListFragment != null) {
+ fileListFragment.listDirectory(parentDir);
}
}
* @param result Result of the removal.
*/
private void onRemoveFileOperationFinish(RemoveFileOperation operation, RemoteOperationResult result) {
- dismissDialog(DIALOG_SHORT_WAIT);
+ dismissLoadingDialog();
if (result.isSuccess()) {
Toast msg = Toast.makeText(this, R.string.remove_success_msg, Toast.LENGTH_LONG);
msg.show();
*/
private void onCreateFolderOperationFinish(CreateFolderOperation operation, RemoteOperationResult result) {
if (result.isSuccess()) {
- dismissDialog(DIALOG_SHORT_WAIT);
+ dismissLoadingDialog();
refeshListOfFilesFragment();
} else {
- dismissDialog(DIALOG_SHORT_WAIT);
+ //dismissDialog(DIALOG_SHORT_WAIT);
+ dismissLoadingDialog();
try {
Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG);
msg.show();
* @param result Result of the renaming.
*/
private void onRenameFileOperationFinish(RenameFileOperation operation, RemoteOperationResult result) {
- dismissDialog(DIALOG_SHORT_WAIT);
+ dismissLoadingDialog();
OCFile renamedFile = operation.getFile();
if (result.isSuccess()) {
if (mDualPane) {
private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation, RemoteOperationResult result) {
- dismissDialog(DIALOG_SHORT_WAIT);
+ dismissLoadingDialog();
OCFile syncedFile = operation.getLocalFile();
if (!result.isSuccess()) {
if (result.getCode() == ResultCode.SYNC_CONFLICT) {
mHandler,
FileDisplayActivity.this);
- showDialog(DIALOG_SHORT_WAIT);
+ showLoadingDialog();
}
}
}
}
return null;
}
+
+ public void startSyncFolderOperation(String remotePath, long parentId) {
+ long currentSyncTime = System.currentTimeMillis();
+
+ OCFileListFragment list = getListOfFilesFragment();
+ enableDisableViewGroup(list.getListView(), false);
+
+ // perform folder synchronization
+ RemoteOperation synchFolderOp = new SynchronizeFolderOperation( remotePath,
+ currentSyncTime,
+ parentId,
+ getStorageManager(),
+ getAccount(),
+ getApplicationContext()
+ );
+ synchFolderOp.execute(getAccount(), this, this, mHandler, this);
+
+ setSupportProgressBarIndeterminateVisibility(true);
+ }
+
+ public void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
+ int childCount = viewGroup.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View view = viewGroup.getChildAt(i);
+ view.setEnabled(enabled);
+ view.setClickable(!enabled);
+ if (view instanceof ViewGroup) {
+ enableDisableViewGroup((ViewGroup) view, enabled);
+ }
+ }
+ }
}
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
import com.owncloud.android.operations.OnRemoteOperationListener;
import com.owncloud.android.operations.RemoteOperation;
+import com.owncloud.android.operations.RemoteOperationResult;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.RenameFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
if(mFile != null){
DataStorageManager storageManager = mContainerActivity.getStorageManager();
- parentDir = storageManager.getFileById(mFile.getParentId());
- mFile = parentDir;
+ if (mFile.getParentId() == 0) {
+ parentDir = storageManager.getFileById(1);
+ }
+ else {
+ parentDir = storageManager.getFileById(mFile.getParentId());
+ }
+
+// // Update folder size on DB
+// storageManager.calculateFolderSize(mFile.getFileId());
+
+ mFile = parentDir;
}
- listDirectory(parentDir);
+
+ if (mFile != null) {
+ listDirectory(mFile);
+
+ mContainerActivity.startSyncFolderOperation(mFile.getRemotePath(), mFile.getFileId());
+ }
+
}
@Override
Account account = AccountUtils.getCurrentOwnCloudAccount(getSherlockActivity());
RemoteOperation operation = new SynchronizeFileOperation(mTargetFile, null, mContainerActivity.getStorageManager(), account, true, false, getSherlockActivity());
operation.execute(account, getSherlockActivity(), mContainerActivity, mHandler, getSherlockActivity());
- getSherlockActivity().showDialog(FileDisplayActivity.DIALOG_SHORT_WAIT);
+ ((FileDisplayActivity) getSherlockActivity()).showLoadingDialog();
return true;
}
case R.id.action_cancel_download: {
mList.setSelectionFromTop(0, 0);
}
mFile = directory;
-
}
}
public void startMediaPreview(OCFile file, int i, boolean b);
public void startImagePreview(OCFile file);
+
+ public void startSyncFolderOperation(String remotePath, long parentId);
/**
* Getter for the current DataStorageManager in the container activity
newFilename,
mContainerActivity.getStorageManager());
operation.execute(AccountUtils.getCurrentOwnCloudAccount(getSherlockActivity()), getSherlockActivity(), mContainerActivity, mHandler, getSherlockActivity());
- getActivity().showDialog(FileDisplayActivity.DIALOG_SHORT_WAIT);
+ ((FileDisplayActivity) getActivity()).showLoadingDialog();
}
}
mContainerActivity.getStorageManager());
operation.execute(AccountUtils.getCurrentOwnCloudAccount(getSherlockActivity()), getSherlockActivity(), mContainerActivity, mHandler, getSherlockActivity());
- getActivity().showDialog(FileDisplayActivity.DIALOG_SHORT_WAIT);
+ ((FileDisplayActivity) getActivity()).showLoadingDialog();
}
}
}