X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/b694fee63d7bdb8b93e9d46d28303eff094923fe..1fbc44b5743380523af7999c072299aad79fb65b:/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 d6251420..9348f367 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -26,7 +26,7 @@ import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AuthenticatorException; import android.annotation.TargetApi; -import android.app.AlertDialog; +import android.support.v7.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; @@ -48,12 +48,15 @@ import android.provider.OpenableColumns; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; +import android.support.v4.content.ContextCompat; import android.support.v4.view.GravityCompat; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.Window; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; import android.widget.Toast; import com.owncloud.android.MainApp; @@ -74,6 +77,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.operations.CopyFileOperation; import com.owncloud.android.operations.CreateFolderOperation; import com.owncloud.android.operations.CreateShareOperation; import com.owncloud.android.operations.MoveFileOperation; @@ -104,10 +108,6 @@ import com.owncloud.android.utils.UriUtils; import java.io.File; -import java.io.IOException; - - - /** * Displays, what files the user has available in his ownCloud. */ @@ -116,8 +116,6 @@ public class FileDisplayActivity extends HookActivity implements FileFragment.ContainerActivity, OnSslUntrustedCertListener, OnEnforceableRefreshListener { - - private SyncBroadcastReceiver mSyncBroadcastReceiver; private UploadFinishReceiver mUploadFinishReceiver; private DownloadFinishReceiver mDownloadFinishReceiver; @@ -126,6 +124,7 @@ public class FileDisplayActivity extends HookActivity private boolean mDualPane; private View mLeftFragmentContainer; private View mRightFragmentContainer; + private ProgressBar mProgressBar; private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW"; private static final String KEY_SYNC_IN_PROGRESS = "SYNC_IN_PROGRESS"; @@ -136,6 +135,7 @@ public class FileDisplayActivity extends HookActivity public static final int ACTION_SELECT_CONTENT_FROM_APPS = 1; public static final int ACTION_SELECT_MULTIPLE_FILES = 2; public static final int ACTION_MOVE_FILES = 3; + public static final int ACTION_COPY_FILES = 4; private static final String TAG = FileDisplayActivity.class.getSimpleName(); @@ -157,7 +157,6 @@ public class FileDisplayActivity extends HookActivity @Override protected void onCreate(Bundle savedInstanceState) { Log_OC.v(TAG, "onCreate() start"); - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account // is valid @@ -185,9 +184,15 @@ public class FileDisplayActivity extends HookActivity // Inflate and set the layout view setContentView(R.layout.files); - + // Navigation Drawer initDrawer(); + + mProgressBar = (ProgressBar) findViewById(R.id.progressBar); + mProgressBar.setIndeterminateDrawable( + ContextCompat.getDrawable(this, + R.drawable.actionbar_progress_indeterminate_horizontal)); + mDualPane = getResources().getBoolean(R.bool.large_land_layout); mLeftFragmentContainer = findViewById(R.id.left_fragment_container); mRightFragmentContainer = findViewById(R.id.right_fragment_container); @@ -200,8 +205,11 @@ public class FileDisplayActivity extends HookActivity // according to the official // documentation - setSupportProgressBarIndeterminateVisibility(mSyncInProgress - /*|| mRefreshSharesInProgress*/); + // enable ActionBar app icon to behave as action to toggle nav drawer + //getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + + mProgressBar.setIndeterminate(mSyncInProgress); // always AFTER setContentView(...) ; to work around bug in its implementation setBackgroundText(); @@ -213,7 +221,6 @@ public class FileDisplayActivity extends HookActivity protected void onStart() { Log_OC.v(TAG, "onStart() start"); super.onStart(); - getSupportActionBar().setIcon(DisplayUtils.getSeasonalIconId()); Log_OC.v(TAG, "onStart() end"); } @@ -255,6 +262,15 @@ public class FileDisplayActivity extends HookActivity } setFile(file); + if (mAccountWasSet) { + RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer); + if (navigationDrawerLayout != null && getAccount() != null) { + TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username); + int lastAtPos = getAccount().name.lastIndexOf("@"); + username.setText(getAccount().name.substring(0, lastAtPos)); + } + } + if (!stateWasRecovered) { Log_OC.d(TAG, "Initializing Fragments in onAccountChanged.."); initFragmentsWithFile(); @@ -608,8 +624,7 @@ public class FileDisplayActivity extends HookActivity resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) { requestMultipleUpload(data, resultCode); - } else if (requestCode == ACTION_MOVE_FILES && resultCode == RESULT_OK) { - + } else if (requestCode == ACTION_MOVE_FILES && resultCode == RESULT_OK){ final Intent fData = data; final int fResultCode = resultCode; getHandler().postDelayed( @@ -622,6 +637,20 @@ public class FileDisplayActivity extends HookActivity DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS ); + } else if (requestCode == ACTION_COPY_FILES && resultCode == RESULT_OK) { + + final Intent fData = data; + final int fResultCode = resultCode; + getHandler().postDelayed( + new Runnable() { + @Override + public void run() { + requestCopyOperation(fData, fResultCode); + } + }, + DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS + ); + } else { super.onActivityResult(requestCode, resultCode, data); } @@ -737,24 +766,39 @@ public class FileDisplayActivity extends HookActivity getFileOperationsHelper().moveFile(folderToMoveAt, targetFile); } + /** + * Request the operation for copying the file/folder from one path to another + * + * @param data Intent received + * @param resultCode Result code received + */ + private void requestCopyOperation(Intent data, int resultCode) { + OCFile folderToMoveAt = data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER); + OCFile targetFile = data.getParcelableExtra(FolderPickerActivity.EXTRA_FILE); + getFileOperationsHelper().copyFile(folderToMoveAt, targetFile); + } + @Override public void onBackPressed() { - OCFileListFragment listOfFiles = getListOfFilesFragment(); - if (mDualPane || getSecondFragment() == null) { - OCFile currentDir = getCurrentDir(); - if (currentDir == null || currentDir.getParentId() == FileDataStorageManager.ROOT_PARENT_ID) { - finish(); - return; + if (!isDrawerOpen()){ + OCFileListFragment listOfFiles = getListOfFilesFragment(); + if (mDualPane || getSecondFragment() == null) { + OCFile currentDir = getCurrentDir(); + if (currentDir == null || currentDir.getParentId() == FileDataStorageManager.ROOT_PARENT_ID) { + finish(); + return; + } + if (listOfFiles != null) { // should never be null, indeed + listOfFiles.onBrowseUp(); + } } if (listOfFiles != null) { // should never be null, indeed - listOfFiles.onBrowseUp(); + setFile(listOfFiles.getCurrentFile()); } + cleanSecondFragment(); + } else { + super.onBackPressed(); } - if (listOfFiles != null) { // should never be null, indeed - setFile(listOfFiles.getCurrentFile()); - } - cleanSecondFragment(); - } @Override @@ -805,6 +849,7 @@ public class FileDisplayActivity extends HookActivity downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage()); mDownloadFinishReceiver = new DownloadFinishReceiver(); registerReceiver(mDownloadFinishReceiver, downloadIntentFilter); + Log_OC.v(TAG, "onResume() end"); } @@ -901,6 +946,7 @@ public class FileDisplayActivity extends HookActivity if (RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED. equals(event) &&/// TODO refactor and make common + synchResult != null && !synchResult.isSuccess() && (synchResult.getCode() == ResultCode.UNAUTHORIZED || synchResult.isIdPRedirection() || @@ -938,8 +984,10 @@ public class FileDisplayActivity extends HookActivity } removeStickyBroadcast(intent); Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress); - setSupportProgressBarIndeterminateVisibility(mSyncInProgress - /*|| mRefreshSharesInProgress*/); + mProgressBar.setIndeterminate(mSyncInProgress); + //mProgressBar.setVisibility((mSyncInProgress) ? View.VISIBLE : View.INVISIBLE); + //setSupportProgressBarIndeterminateVisibility(mSyncInProgress + /*|| mRefreshSharesInProgress*/ //); setBackgroundText(); @@ -998,8 +1046,13 @@ public class FileDisplayActivity extends HookActivity (uploadedRemotePath.startsWith(currentDir.getRemotePath())); if (sameAccount && isDescendant) { - refreshListOfFilesFragment(); + String linkedToRemotePath = + intent.getStringExtra(FileDownloader.EXTRA_LINKED_TO_PATH); + if (linkedToRemotePath == null || isAscendant(linkedToRemotePath)) { + refreshListOfFilesFragment(); + } } + boolean uploadWasFine = intent.getBooleanExtra(FileUploader.EXTRA_UPLOAD_RESULT, false); boolean renamedInUpload = getFile().getRemotePath(). @@ -1041,6 +1094,7 @@ public class FileDisplayActivity extends HookActivity } } + mProgressBar.setIndeterminate(false); } finally { if (intent != null) { removeStickyBroadcast(intent); @@ -1049,6 +1103,16 @@ public class FileDisplayActivity extends HookActivity } + // TODO refactor this receiver, and maybe DownloadFinishReceiver; this method is duplicated :S + private boolean isAscendant(String linkedToRemotePath) { + OCFile currentDir = getCurrentDir(); + return ( + currentDir != null && + currentDir.getRemotePath().startsWith(linkedToRemotePath) + ); + } + + } @@ -1060,11 +1124,10 @@ public class FileDisplayActivity extends HookActivity */ private class DownloadFinishReceiver extends BroadcastReceiver { - //int refreshCounter = 0; @Override public void onReceive(Context context, Intent intent) { try { - boolean sameAccount = isSameAccount(context, intent); + boolean sameAccount = isSameAccount(intent); String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH); boolean isDescendant = isDescendant(downloadedRemotePath); @@ -1073,7 +1136,6 @@ public class FileDisplayActivity extends HookActivity String linkedToRemotePath = intent.getStringExtra(FileDownloader.EXTRA_LINKED_TO_PATH); if (linkedToRemotePath == null || isAscendant(linkedToRemotePath)) { - //Log_OC.v(TAG, "refresh #" + ++refreshCounter); refreshListOfFilesFragment(); } refreshSecondFragment( @@ -1115,7 +1177,7 @@ public class FileDisplayActivity extends HookActivity ); } - private boolean isSameAccount(Context context, Intent intent) { + private boolean isSameAccount(Intent intent) { String accountName = intent.getStringExtra(FileDownloader.ACCOUNT_NAME); return (accountName != null && getAccount() != null && accountName.equals(getAccount().name)); @@ -1165,6 +1227,20 @@ public class FileDisplayActivity extends HookActivity setFile(file); } + /** + * Shows the share view for sharing {@link OCFile} received as a + * parameter in the second fragment. + * + * @param file {@link OCFile} File to share with + */ + @Override + public void showShareFile(OCFile file) { + Intent intent = new Intent(this, ShareActivity.class); + intent.putExtra(EXTRA_FILE, file); + intent.putExtra(EXTRA_ACCOUNT, getAccount()); + startActivity(intent); + } + @Override protected void updateActionBarTitleAndHomeButton(OCFile chosenFile) { if (mDualPane) { @@ -1177,7 +1253,6 @@ public class FileDisplayActivity extends HookActivity } - @Override protected ServiceConnection newTransferenceServiceConnection() { return new ListServiceConnection(); @@ -1291,10 +1366,12 @@ public class FileDisplayActivity extends HookActivity } else if (operation instanceof MoveFileOperation) { onMoveFileOperationFinish((MoveFileOperation) operation, result); + + } else if (operation instanceof CopyFileOperation) { + onCopyFileOperationFinish((CopyFileOperation) operation, result); } } - private void onCreateShareOperationFinish(CreateShareOperation operation, RemoteOperationResult result) { if (result.isSuccess()) { @@ -1327,8 +1404,9 @@ public class FileDisplayActivity extends HookActivity } else if (details instanceof PreviewTextFragment) { // Refresh OCFile of the fragment ((PreviewTextFragment) details).updateFile(file); - } else + } else { showDetails(file); + } } invalidateOptionsMenu(); } @@ -1344,6 +1422,7 @@ public class FileDisplayActivity extends HookActivity private void onRemoveFileOperationFinish(RemoveFileOperation operation, RemoteOperationResult result) { dismissLoadingDialog(); + Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), Toast.LENGTH_LONG); @@ -1398,6 +1477,30 @@ public class FileDisplayActivity extends HookActivity } } + /** + * Updates the view associated to the activity after the finish of an operation trying to copy a + * file. + * + * @param operation Copy operation performed. + * @param result Result of the copy operation. + */ + private void onCopyFileOperationFinish(CopyFileOperation operation, RemoteOperationResult result) { + if (result.isSuccess()) { + dismissLoadingDialog(); + refreshListOfFilesFragment(); + } else { + dismissLoadingDialog(); + try { + Toast msg = Toast.makeText(FileDisplayActivity.this, + ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); + msg.show(); + + } catch (NotFoundException e) { + Log_OC.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 rename @@ -1437,7 +1540,7 @@ public class FileDisplayActivity extends HookActivity } } } - + if (getStorageManager().getFileById(renamedFile.getParentId()).equals(getCurrentDir())){ refreshListOfFilesFragment(); } @@ -1462,6 +1565,7 @@ public class FileDisplayActivity extends HookActivity OCFile syncedFile = operation.getLocalFile(); onTransferStateChanged(syncedFile, true, true); invalidateOptionsMenu(); + refreshShowDetails(); } } } @@ -1559,7 +1663,7 @@ public class FileDisplayActivity extends HookActivity ); synchFolderOp.execute(getAccount(), MainApp.getAppContext(), this, null, null); - setSupportProgressBarIndeterminateVisibility(true); + mProgressBar.setIndeterminate(true); setBackgroundText(); } @@ -1620,7 +1724,7 @@ public class FileDisplayActivity extends HookActivity /** * Stars the preview of an already down media {@link OCFile}. - * + * * @param file Media {@link OCFile} to preview. * @param startPlaybackPosition Media position where the playback will be started, * in milliseconds.