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