X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/24dd513682cff1f55f7391bab4fb5a8d2ab266a6..2f1aaa8b15cac2e5fe8fdae3b9a3d5214d7df2f0:/src/com/owncloud/android/ui/fragment/FileDetailFragment.java diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java index eca461c5..da215317 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -102,7 +102,7 @@ import com.owncloud.android.ui.activity.FileDetailActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.OnSwipeTouchListener; import com.owncloud.android.ui.activity.TransferServiceGetter; -import com.owncloud.android.ui.activity.VideoActivity; +import com.owncloud.android.ui.activity.PreviewVideoActivity; import com.owncloud.android.ui.dialog.EditNameDialog; import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener; import com.owncloud.android.utils.OwnCloudVersion; @@ -137,6 +137,7 @@ public class FileDetailFragment extends SherlockFragment implements private DownloadFinishReceiver mDownloadFinishReceiver; private UploadFinishReceiver mUploadFinishReceiver; + public ProgressListener mProgressListener; private Handler mHandler; private RemoteOperation mLastRemoteOperation; @@ -160,6 +161,7 @@ public class FileDetailFragment extends SherlockFragment implements mAccount = null; mStorageManager = null; mLayout = R.layout.file_details_empty; + mProgressListener = null; } @@ -176,6 +178,7 @@ public class FileDetailFragment extends SherlockFragment implements mAccount = ocAccount; mStorageManager = null; // we need a context to init this; the container activity is not available yet at this moment mLayout = R.layout.file_details_empty; + mProgressListener = null; } @@ -211,6 +214,8 @@ public class FileDetailFragment extends SherlockFragment implements mView.findViewById(R.id.fdOpenBtn).setOnClickListener(this); mView.findViewById(R.id.fdRemoveBtn).setOnClickListener(this); //mView.findViewById(R.id.fdShareBtn).setOnClickListener(this); + ProgressBar progressBar = (ProgressBar)mView.findViewById(R.id.fdProgressBar); + mProgressListener = new ProgressListener(progressBar); } updateFileDetails(false); @@ -248,11 +253,9 @@ public class FileDetailFragment extends SherlockFragment implements @Override public void onSaveInstanceState(Bundle outState) { - Log.i(getClass().toString(), "onSaveInstanceState() start"); super.onSaveInstanceState(outState); outState.putParcelable(FileDetailFragment.EXTRA_FILE, mFile); outState.putParcelable(FileDetailFragment.EXTRA_ACCOUNT, mAccount); - Log.i(getClass().toString(), "onSaveInstanceState() end"); } @Override @@ -261,6 +264,7 @@ public class FileDetailFragment extends SherlockFragment implements if (mFile != null && mFile.isAudio()) { bindMediaService(); } + listenForTransferProgress(); } @Override @@ -288,10 +292,9 @@ public class FileDetailFragment extends SherlockFragment implements getActivity().unregisterReceiver(mUploadFinishReceiver); mUploadFinishReceiver = null; - } - + @Override public void onStop() { super.onStop(); @@ -307,6 +310,7 @@ public class FileDetailFragment extends SherlockFragment implements mMediaController = null; } } + leaveTransferProgress(); } @@ -358,7 +362,6 @@ public class FileDetailFragment extends SherlockFragment implements // update ui boolean inDisplayActivity = getActivity() instanceof FileDisplayActivity; getActivity().showDialog((inDisplayActivity)? FileDisplayActivity.DIALOG_SHORT_WAIT : FileDetailActivity.DIALOG_SHORT_WAIT); - setButtonsForTransferring(); // disable button immediately, although the synchronization does not result in a file transference } break; @@ -378,7 +381,6 @@ public class FileDetailFragment extends SherlockFragment implements FileObserverService.CMD_DEL_OBSERVED_FILE)); intent.putExtra(FileObserverService.KEY_CMD_ARG_FILE, mFile); intent.putExtra(FileObserverService.KEY_CMD_ARG_ACCOUNT, mAccount); - Log.e(TAG, "starting observer service"); getActivity().startService(intent); if (mFile.keepInSync()) { @@ -418,9 +420,9 @@ public class FileDetailFragment extends SherlockFragment implements private void startVideoActivity() { - Intent i = new Intent(getActivity(), VideoActivity.class); - i.putExtra(VideoActivity.EXTRA_FILE, mFile); - i.putExtra(VideoActivity.EXTRA_ACCOUNT, mAccount); + Intent i = new Intent(getActivity(), PreviewVideoActivity.class); + i.putExtra(PreviewVideoActivity.EXTRA_FILE, mFile); + i.putExtra(PreviewVideoActivity.EXTRA_ACCOUNT, mAccount); startActivity(i); } @@ -769,6 +771,8 @@ public class FileDetailFragment extends SherlockFragment implements // hides the progress bar ProgressBar progressBar = (ProgressBar)getView().findViewById(R.id.fdProgressBar); progressBar.setVisibility(View.GONE); + TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText); + progressText.setVisibility(View.GONE); } } @@ -788,6 +792,8 @@ public class FileDetailFragment extends SherlockFragment implements // hides the progress bar ProgressBar progressBar = (ProgressBar)getView().findViewById(R.id.fdProgressBar); progressBar.setVisibility(View.GONE); + TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText); + progressText.setVisibility(View.GONE); } } @@ -828,6 +834,8 @@ public class FileDetailFragment extends SherlockFragment implements if (downloadWasFine) { mFile = mStorageManager.getFileByPath(downloadedRemotePath); } + mContainerActivity.notifySuccessfulDownload(mFile, intent, downloadWasFine); + getActivity().removeStickyBroadcast(intent); updateFileDetails(false); // it updates the buttons; must be called although !downloadWasFine } } @@ -1085,6 +1093,7 @@ public class FileDetailFragment extends SherlockFragment implements } else { if (operation.transferWasRequested()) { + setButtonsForTransferring(); mContainerActivity.onFileStateChanged(); // this is not working; FileDownloader won't do NOTHING at all until this method finishes, so // checking the service to see if the file is downloading results in FALSE } else { @@ -1099,16 +1108,66 @@ public class FileDetailFragment extends SherlockFragment implements } } } + + + public void listenForTransferProgress() { + if (mProgressListener != null) { + if (mContainerActivity.getFileDownloaderBinder() != null) { + mContainerActivity.getFileDownloaderBinder().addDatatransferProgressListener(mProgressListener, mAccount, mFile); + } + if (mContainerActivity.getFileUploaderBinder() != null) { + mContainerActivity.getFileUploaderBinder().addDatatransferProgressListener(mProgressListener, mAccount, mFile); + } + } + } + + + public void leaveTransferProgress() { + if (mProgressListener != null) { + if (mContainerActivity.getFileDownloaderBinder() != null) { + mContainerActivity.getFileDownloaderBinder().removeDatatransferProgressListener(mProgressListener, mAccount, mFile); + } + if (mContainerActivity.getFileUploaderBinder() != null) { + mContainerActivity.getFileUploaderBinder().removeDatatransferProgressListener(mProgressListener, mAccount, mFile); + } + } + } - public ProgressBar getProgressBar() { - View v = getView(); - if (v != null) { - return (ProgressBar) v.findViewById(R.id.fdProgressBar); - } else { - return null; + + /** + * Helper class responsible for updating the progress bar shown for file uploading or downloading + * + * @author David A. Velasco + */ + private class ProgressListener implements OnDatatransferProgressListener { + int mLastPercent = 0; + WeakReference mProgressBar = null; + + ProgressListener(ProgressBar progressBar) { + mProgressBar = new WeakReference(progressBar); } - } + + @Override + public void onTransferProgress(long progressRate) { + // old method, nothing here + }; + + @Override + public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filename) { + int percent = (int)(100.0*((double)totalTransferredSoFar)/((double)totalToTransfer)); + if (percent != mLastPercent) { + ProgressBar pb = mProgressBar.get(); + if (pb != null) { + pb.setProgress(percent); + pb.postInvalidate(); + } + } + mLastPercent = percent; + } + + }; + }