X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/f2474ae28d3765968559d4eaa965a16e50981793..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 680c0b6d..da215317 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -18,6 +18,7 @@ package com.owncloud.android.ui.fragment; import java.io.File; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -65,10 +66,12 @@ import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.webkit.MimeTypeMap; +import android.webkit.WebView.FindListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.MediaController; +import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import android.widget.VideoView; @@ -99,12 +102,14 @@ 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; import com.owncloud.android.R; + +import eu.alefzero.webdav.OnDatatransferProgressListener; import eu.alefzero.webdav.WebdavClient; import eu.alefzero.webdav.WebdavUtils; @@ -132,6 +137,7 @@ public class FileDetailFragment extends SherlockFragment implements private DownloadFinishReceiver mDownloadFinishReceiver; private UploadFinishReceiver mUploadFinishReceiver; + public ProgressListener mProgressListener; private Handler mHandler; private RemoteOperation mLastRemoteOperation; @@ -155,6 +161,7 @@ public class FileDetailFragment extends SherlockFragment implements mAccount = null; mStorageManager = null; mLayout = R.layout.file_details_empty; + mProgressListener = null; } @@ -171,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; } @@ -206,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); @@ -243,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 @@ -256,6 +264,7 @@ public class FileDetailFragment extends SherlockFragment implements if (mFile != null && mFile.isAudio()) { bindMediaService(); } + listenForTransferProgress(); } @Override @@ -283,10 +292,9 @@ public class FileDetailFragment extends SherlockFragment implements getActivity().unregisterReceiver(mUploadFinishReceiver); mUploadFinishReceiver = null; - } - + @Override public void onStop() { super.onStop(); @@ -302,6 +310,7 @@ public class FileDetailFragment extends SherlockFragment implements mMediaController = null; } } + leaveTransferProgress(); } @@ -353,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; @@ -373,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()) { @@ -413,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); } @@ -731,9 +738,23 @@ public class FileDetailFragment extends SherlockFragment implements ((Button) getView().findViewById(R.id.fdRenameBtn)).setEnabled(false); ((Button) getView().findViewById(R.id.fdRemoveBtn)).setEnabled(false); getView().findViewById(R.id.fdKeepInSync).setEnabled(false); + + // show the progress bar for the transfer + ProgressBar progressBar = (ProgressBar)getView().findViewById(R.id.fdProgressBar); + progressBar.setVisibility(View.VISIBLE); + TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText); + progressText.setVisibility(View.VISIBLE); + FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder(); + FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder(); + if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile)) { + progressText.setText(R.string.downloader_download_in_progress_ticker); + } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile)) { + progressText.setText(R.string.uploader_upload_in_progress_ticker); + } } } + /** * Enables or disables buttons for a file locally available */ @@ -746,6 +767,12 @@ public class FileDetailFragment extends SherlockFragment implements ((Button) getView().findViewById(R.id.fdRenameBtn)).setEnabled(true); ((Button) getView().findViewById(R.id.fdRemoveBtn)).setEnabled(true); getView().findViewById(R.id.fdKeepInSync).setEnabled(true); + + // 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); } } @@ -761,6 +788,12 @@ public class FileDetailFragment extends SherlockFragment implements ((Button) getView().findViewById(R.id.fdRenameBtn)).setEnabled(true); ((Button) getView().findViewById(R.id.fdRemoveBtn)).setEnabled(true); getView().findViewById(R.id.fdKeepInSync).setEnabled(true); + + // 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); } } @@ -801,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 } } @@ -1058,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 { @@ -1072,6 +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); + } + } + } + + + + /** + * 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; + } + + }; + }