X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/b9c7b92940e43989857aaa4d72b261c33228e0c2..a8fade7369bc8d1752dc4ba5fe07935cac84e96f:/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 42aab234..5eba7dc0 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -22,8 +22,8 @@ import java.io.File; import android.accounts.Account; import android.app.AlertDialog; -import android.app.ProgressDialog; import android.app.Dialog; +import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; @@ -72,15 +72,16 @@ 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.RemoteOperationResult.ResultCode; 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.operations.SynchronizeFolderOperation; import com.owncloud.android.syncadapter.FileSyncService; import com.owncloud.android.ui.dialog.EditNameDialog; +import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener; 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.fragment.FileDetailFragment; import com.owncloud.android.ui.fragment.FileFragment; @@ -117,13 +118,14 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa private View mRightFragmentContainer; private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW"; + private static final String KEY_SYNC_IN_PROGRESS = "SYNC_IN_PROGRESS"; public static final int DIALOG_SHORT_WAIT = 0; 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; - public static final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; + private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; public static final String ACTION_DETAILS = "com.owncloud.android.ui.activity.action.DETAILS"; @@ -137,6 +139,8 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa private OCFile mWaitingToPreview; private Handler mHandler; + + private boolean mSyncInProgress = false; @Override protected void onCreate(Bundle savedInstanceState) { @@ -166,10 +170,12 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa /// Load of saved instance state if(savedInstanceState != null) { mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW); - + mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS); + } else { mWaitingToPreview = null; - } + mSyncInProgress = false; + } /// USER INTERFACE @@ -185,7 +191,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa // Action bar setup mDirectories = new CustomArrayAdapter(this, R.layout.sherlock_spinner_dropdown_item); getSupportActionBar().setHomeButtonEnabled(true); // mandatory since Android ICS, according to the official documentation - setSupportProgressBarIndeterminateVisibility(false); // always AFTER setContentView(...) ; to work around bug in its implementation + setSupportProgressBarIndeterminateVisibility(mSyncInProgress); // always AFTER setContentView(...) ; to work around bug in its implementation Log_OC.d(TAG, "onCreate() end"); } @@ -458,8 +464,9 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa FileFragment second = getSecondFragment(); OCFile currentDir = getCurrentDir(); if((currentDir != null && currentDir.getParentId() != 0) || - (second != null && second.getFile() != null)) { + (second != null && second.getFile() != null)) { onBackPressed(); + } break; } @@ -587,21 +594,23 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa @Override public void onBackPressed() { - OCFileListFragment listOfFiles = getListOfFilesFragment(); - if (mDualPane || getSecondFragment() == null) { - if (listOfFiles != null) { // should never be null, indeed - if (mDirectories.getCount() <= 1) { - finish(); - return; + if (!mSyncInProgress) { + OCFileListFragment listOfFiles = getListOfFilesFragment(); + if (mDualPane || getSecondFragment() == null) { + if (listOfFiles != null) { // should never be null, indeed + if (mDirectories.getCount() <= 1) { + finish(); + return; + } + popDirname(); + listOfFiles.onBrowseUp(); } - popDirname(); - listOfFiles.onBrowseUp(); } + if (listOfFiles != null) { // should never be null, indeed + setFile(listOfFiles.getCurrentFile()); + } + cleanSecondFragment(); } - if (listOfFiles != null) { // should never be null, indeed - setFile(listOfFiles.getCurrentFile()); - } - cleanSecondFragment(); } @Override @@ -610,8 +619,12 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa Log_OC.e(TAG, "onSaveInstanceState() start"); super.onSaveInstanceState(outState); outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW, mWaitingToPreview); + outState.putBoolean(FileDisplayActivity.KEY_SYNC_IN_PROGRESS, mSyncInProgress); + Log_OC.d(TAG, "onSaveInstanceState() end"); } + + @Override protected void onResume() { @@ -639,6 +652,19 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa @Override + protected void onStart() { + super.onStart(); + Log_OC.e(TAG, "onStart() start"); + + // Update the sync operation + if (mSyncInProgress){ + } + + Log_OC.e(TAG, "onStart() end"); + } + + + @Override protected void onPause() { super.onPause(); Log_OC.e(TAG, "onPause() start"); @@ -753,7 +779,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa /** * Show loading dialog */ - public void showDialog() { + public void showLoadingDialog() { // Construct dialog LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment)); FragmentManager fm = getSupportFragmentManager(); @@ -762,6 +788,17 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa } + /** + * 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 @@ -841,7 +878,9 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa String accountName = intent.getStringExtra(FileSyncService.ACCOUNT_NAME); Log_OC.d(TAG, "sync of account " + accountName + " is in_progress: " + inProgress); - + + RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT); + if (getAccount() != null && accountName.equals(getAccount().name)) { String synchFolderRemotePath = intent.getStringExtra(FileSyncService.SYNC_FOLDER_REMOTE_PATH); @@ -860,6 +899,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa OCFileListFragment fileListFragment = getListOfFilesFragment(); if (fileListFragment != null) { fileListFragment.listDirectory(currentDir); + } if (getSecondFragment() == null) setFile(currentDir); @@ -867,10 +907,12 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa setSupportProgressBarIndeterminateVisibility(inProgress); removeStickyBroadcast(intent); + + mSyncInProgress = inProgress; } - RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT); + if (synchResult != null) { if (synchResult.getCode().equals(RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) { mLastSslUntrustedServerResult = synchResult; @@ -879,7 +921,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa } } } - + private class UploadFinishReceiver extends BroadcastReceiver { /** @@ -953,6 +995,10 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa public void onBrowsedDownTo(OCFile directory) { pushDirname(directory); cleanSecondFragment(); + + // Sync Folder + startSyncFolderOperation(directory.getRemotePath(), directory.getFileId()); + } /** @@ -1027,7 +1073,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa if (chosenFile == null || mDualPane) { // only list of files - set for browsing through folders OCFile currentDir = getCurrentDir(); - actionBar.setDisplayHomeAsUpEnabled(currentDir != null && currentDir.getParentId() != 0); + actionBar.setDisplayHomeAsUpEnabled(currentDir != null && currentDir.getParentId() != 0 && !mSyncInProgress); actionBar.setDisplayShowTitleEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(mDirectories, this); // assuming mDirectories is updated @@ -1041,6 +1087,19 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa } +// private void updateDisplayHomeAtSync(){ +// ActionBar actionBar = getSupportActionBar(); +// OCFile currentDir = getCurrentDir(); +// if (currentDir.getParentId() != DataStorageManager.ROOT_PARENT_ID) { +// actionBar.setHomeButtonEnabled(!mSyncInProgress); +// actionBar.setDisplayHomeAsUpEnabled(!mSyncInProgress); +// } +// else { +// actionBar.setHomeButtonEnabled(true); +// actionBar.setDisplayHomeAsUpEnabled(false); +// } +// } +// /** * {@inheritDoc} */ @@ -1161,7 +1220,8 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa } else if (operation instanceof CreateFolderOperation) { onCreateFolderOperationFinish((CreateFolderOperation)operation, result); - } + + } } @@ -1173,7 +1233,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa * @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(); @@ -1205,11 +1265,11 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa */ private void onCreateFolderOperationFinish(CreateFolderOperation operation, RemoteOperationResult result) { if (result.isSuccess()) { - dismissDialog(DIALOG_SHORT_WAIT); + dismissLoadingDialog(); refeshListOfFilesFragment(); } else { - dismissDialog(DIALOG_SHORT_WAIT); + dismissLoadingDialog(); try { Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG); msg.show(); @@ -1229,7 +1289,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa * @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) { @@ -1260,7 +1320,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa 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) { @@ -1269,10 +1329,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount()); startActivity(i); - } else { - Toast msg = Toast.makeText(this, R.string.sync_file_fail_msg, Toast.LENGTH_LONG); - msg.show(); - } + } } else { if (operation.transferWasRequested()) { @@ -1321,7 +1378,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa mHandler, FileDisplayActivity.this); - showDialog(DIALOG_SHORT_WAIT); + showLoadingDialog(); } } } @@ -1349,5 +1406,37 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa } return null; } + + public void startSyncFolderOperation(String remotePath, long parentId) { + long currentSyncTime = System.currentTimeMillis(); + + mSyncInProgress = true; + + // perform folder synchronization + RemoteOperation synchFolderOp = new SynchronizeFolderOperation( remotePath, + currentSyncTime, + parentId, + false, + false, + getStorageManager(), + getAccount(), + getApplicationContext() + ); + synchFolderOp.execute(getAccount(), this, null, null, 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); +// } +// } +// } }