X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/ba52dfdf9d0efbb7f4d9fbf18cda16244d310207..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 99968910..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,7 +73,7 @@ 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; @@ -86,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. @@ -114,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; @@ -128,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 @@ -211,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; } @@ -276,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; @@ -317,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); } @@ -345,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]; @@ -373,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 { @@ -384,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(); @@ -424,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); } @@ -564,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(); @@ -580,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) { @@ -620,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(); @@ -656,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 @@ -738,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 { @@ -853,6 +842,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements } setSupportProgressBarIndeterminateVisibility(inProgress); + removeStickyBroadcast(intent); } @@ -1087,6 +1077,32 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements } 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); + } } }