X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/4c50eb4d2dd1fba177d743315ae52223430db8cb..ac07e35d8ab68bf94d5cd8b45680ea69247fcc9f:/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
index e6771e0e..1d75e692 100644
--- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
+++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
@@ -39,6 +39,8 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources.NotFoundException;
import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -71,12 +73,13 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
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.RemoteOperationResult;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.RenameFileOperation;
+import com.owncloud.android.operations.SynchronizeFileOperation;
import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.syncadapter.FileSyncService;
import com.owncloud.android.ui.dialog.SslValidatorDialog;
@@ -85,7 +88,6 @@ import com.owncloud.android.ui.fragment.FileDetailFragment;
import com.owncloud.android.ui.fragment.OCFileListFragment;
import com.owncloud.android.R;
-import eu.alefzero.webdav.WebdavClient;
/**
* Displays, what files the user has available in his ownCloud.
@@ -113,6 +115,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
private OCFileListFragment mFileList;
private boolean mDualPane;
+ private Handler mHandler;
private static final int DIALOG_SETUP_ACCOUNT = 0;
private static final int DIALOG_CREATE_DIR = 1;
@@ -127,11 +130,15 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
private static final int ACTION_SELECT_MULTIPLE_FILES = 2;
private static final String TAG = "FileDisplayActivity";
+
+ private static int[] mMenuIdentifiersToPatch = {R.id.about_app};
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(getClass().toString(), "onCreate() start");
super.onCreate(savedInstanceState);
+
+ mHandler = new Handler();
/// Load of parameters from received intent
mCurrentDir = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE); // no check necessary, mCurrenDir == null if the parameter is not in the intent
@@ -210,7 +217,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
*/
private void createFirstAccount() {
Intent intent = new Intent(android.provider.Settings.ACTION_ADD_ACCOUNT);
- intent.putExtra(android.provider.Settings.EXTRA_AUTHORITIES, new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });
+ intent.putExtra(android.provider.Settings.EXTRA_AUTHORITIES, new String[] { AccountAuthenticator.AUTHORITY });
startActivity(intent); // the new activity won't be created until this.onStart() and this.onResume() are finished;
}
@@ -275,9 +282,32 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSherlock().getMenuInflater();
inflater.inflate(R.menu.menu, menu);
+
+ patchHiddenAccents(menu);
+
return true;
}
+ /**
+ * Workaround for this: http://code.google.com/p/android/issues/detail?id=3974
+ *
+ * @param menu Menu to patch
+ */
+ private void patchHiddenAccents(Menu menu) {
+ for (int i = 0; i < mMenuIdentifiersToPatch.length ; i++) {
+ MenuItem aboutItem = menu.findItem(mMenuIdentifiersToPatch[i]);
+ if (aboutItem != null && aboutItem.getIcon() instanceof BitmapDrawable) {
+ // Clip off the bottom three (density independent) pixels of transparent padding
+ Bitmap original = ((BitmapDrawable) aboutItem.getIcon()).getBitmap();
+ float scale = getResources().getDisplayMetrics().density;
+ int clippedHeight = (int) (original.getHeight() - (3 * scale));
+ Bitmap scaled = Bitmap.createBitmap(original, 0, 0, original.getWidth(), clippedHeight);
+ aboutItem.setIcon(new BitmapDrawable(getResources(), scaled));
+ }
+ }
+ }
+
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean retval = true;
@@ -316,12 +346,12 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
}
private void startSynchronization() {
- ContentResolver.cancelSync(null, AccountAuthenticator.AUTH_TOKEN_TYPE); // cancel the current synchronizations of any ownCloud account
+ ContentResolver.cancelSync(null, AccountAuthenticator.AUTHORITY); // cancel the current synchronizations of any ownCloud account
Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
ContentResolver.requestSync(
AccountUtils.getCurrentOwnCloudAccount(this),
- AccountAuthenticator.AUTH_TOKEN_TYPE, bundle);
+ AccountAuthenticator.AUTHORITY, bundle);
}
@@ -344,16 +374,16 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
*/
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && resultCode == RESULT_OK) {
- requestSimpleUpload(data);
+ if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
+ requestSimpleUpload(data, resultCode);
- } else if (requestCode == ACTION_SELECT_MULTIPLE_FILES && resultCode == RESULT_OK) {
- requestMultipleUpload(data);
+ } else if (requestCode == ACTION_SELECT_MULTIPLE_FILES && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
+ requestMultipleUpload(data, resultCode);
}
}
- private void requestMultipleUpload(Intent data) {
+ private void requestMultipleUpload(Intent data, int resultCode) {
String[] filePaths = data.getStringArrayExtra(UploadFilesActivity.EXTRA_CHOSEN_FILES);
if (filePaths != null) {
String[] remotePaths = new String[filePaths.length];
@@ -372,6 +402,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
i.putExtra(FileUploader.KEY_LOCAL_FILE, filePaths);
i.putExtra(FileUploader.KEY_REMOTE_FILE, remotePaths);
i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_MULTIPLE_FILES);
+ if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)
+ i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE);
startService(i);
} else {
@@ -383,7 +415,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
}
- private void requestSimpleUpload(Intent data) {
+ private void requestSimpleUpload(Intent data, int resultCode) {
String filepath = null;
try {
Uri selectedImageUri = data.getData();
@@ -423,6 +455,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath);
i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath);
i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);
+ if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)
+ i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE);
startService(i);
}
@@ -563,7 +597,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
dialog.dismiss();
}
});
- builder.setNegativeButton(R.string.common_exit, new OnClickListener() {
+ String message = String.format(getString(R.string.common_exit), getString(R.string.app_name));
+ builder.setNegativeButton(message, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
@@ -579,7 +614,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
PackageInfo pkg;
try {
pkg = getPackageManager().getPackageInfo(getPackageName(), 0);
- builder.setMessage(String.format(getString(R.string.about_message), pkg.versionName));
+ builder.setMessage(String.format(getString(R.string.about_message), getString(R.string.app_name), pkg.versionName));
builder.setIcon(android.R.drawable.ic_menu_info_details);
dialog = builder.create();
} catch (NameNotFoundException e) {
@@ -619,8 +654,12 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
// Create directory
path += directoryName + OCFile.PATH_SEPARATOR;
- Thread thread = new Thread(new DirectoryCreator(path, AccountUtils.getCurrentOwnCloudAccount(FileDisplayActivity.this), new Handler()));
- thread.start();
+ RemoteOperation operation = new CreateFolderOperation(path, mCurrentDir.getFileId(), mStorageManager);
+ operation.execute( AccountUtils.getCurrentOwnCloudAccount(FileDisplayActivity.this),
+ FileDisplayActivity.this,
+ FileDisplayActivity.this,
+ mHandler,
+ FileDisplayActivity.this);
dialog.dismiss();
@@ -655,6 +694,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
if (item == 0) {
//if (!mDualPane) {
Intent action = new Intent(FileDisplayActivity.this, UploadFilesActivity.class);
+ action.putExtra(UploadFilesActivity.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(FileDisplayActivity.this));
startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);
//} else {
// TODO create and handle new fragment LocalFileListFragment
@@ -737,56 +777,6 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
return !mDirectories.isEmpty();
}
- private class DirectoryCreator implements Runnable {
- private String mTargetPath;
- private Account mAccount;
- private Handler mHandler;
-
- public DirectoryCreator(String targetPath, Account account, Handler handler) {
- mTargetPath = targetPath;
- mAccount = account;
- mHandler = handler;
- }
-
- @Override
- public void run() {
- WebdavClient wdc = OwnCloudClientUtils.createOwnCloudClient(mAccount, getApplicationContext());
- boolean created = wdc.createDirectory(mTargetPath);
- if (created) {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- dismissDialog(DIALOG_SHORT_WAIT);
-
- // Save new directory in local database
- OCFile newDir = new OCFile(mTargetPath);
- newDir.setMimetype("DIR");
- newDir.setParentId(mCurrentDir.getFileId());
- mStorageManager.saveFile(newDir);
-
- // Display the new folder right away
- mFileList.listDirectory();
- }
- });
-
- } else {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- dismissDialog(DIALOG_SHORT_WAIT);
- try {
- Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG);
- msg.show();
-
- } catch (NotFoundException e) {
- Log.e(TAG, "Error while trying to show fail message " , e);
- }
- }
- });
- }
- }
-
- }
// Custom array adapter to override text colors
private class CustomArrayAdapter extends ArrayAdapter {
@@ -852,6 +842,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
}
setSupportProgressBarIndeterminateVisibility(inProgress);
+ removeStickyBroadcast(intent);
}
@@ -1083,9 +1074,39 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
} else if (operation instanceof RenameFileOperation) {
onRenameFileOperationFinish((RenameFileOperation)operation, result);
+
+ } else if (operation instanceof SynchronizeFileOperation) {
+ onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result);
+
+ } else if (operation instanceof CreateFolderOperation) {
+ onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
}
}
-
+
+ /**
+ * Updates the view associated to the activity after the finish of an operation trying create a new folder
+ *
+ * @param operation Creation operation performed.
+ * @param result Result of the creation.
+ */
+ private void onCreateFolderOperationFinish(CreateFolderOperation operation, RemoteOperationResult result) {
+ if (result.isSuccess()) {
+ dismissDialog(DIALOG_SHORT_WAIT);
+ mFileList.listDirectory();
+
+ } else {
+ dismissDialog(DIALOG_SHORT_WAIT);
+ try {
+ Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG);
+ msg.show();
+
+ } catch (NotFoundException e) {
+ Log.e(TAG, "Error while trying to show fail message " , e);
+ }
+ }
+ }
+
+
/**
* Updates the view associated to the activity after the finish of an operation trying to remove a
* file.
@@ -1159,6 +1180,34 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
}
+ private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation, RemoteOperationResult result) {
+ dismissDialog(DIALOG_SHORT_WAIT);
+ OCFile syncedFile = operation.getLocalFile();
+ if (!result.isSuccess()) {
+ if (result.getCode() == ResultCode.SYNC_CONFLICT) {
+ Intent i = new Intent(this, ConflictsResolveActivity.class);
+ i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile);
+ i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));
+ startActivity(i);
+
+ } else {
+ Toast msg = Toast.makeText(this, R.string.sync_file_fail_msg, Toast.LENGTH_LONG);
+ msg.show();
+ }
+
+ } else {
+ if (operation.transferWasRequested()) {
+ mFileList.listDirectory();
+ onTransferStateChanged(syncedFile, true, true);
+
+ } else {
+ Toast msg = Toast.makeText(this, R.string.sync_file_nothing_to_do_msg, Toast.LENGTH_LONG);
+ msg.show();
+ }
+ }
+ }
+
+
/**
* {@inheritDoc}
*/