X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/e8ae33b62889ca0ae97abb813f08e6aad4d9b4c2..a11e7fd9004d8672077d6e3db7d69b74ea46e163:/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 85312b93..80dc4264 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -1,9 +1,10 @@ /* ownCloud Android client application * Copyright (C) 2011 Bartek Przybylski + * Copyright (C) 2012-2013 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or + * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, @@ -29,7 +30,6 @@ import org.apache.commons.httpclient.params.HttpConnectionManagerParams; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; -import org.apache.http.entity.FileEntity; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.jackrabbit.webdav.client.methods.PropFindMethod; @@ -37,44 +37,28 @@ import org.json.JSONObject; import android.accounts.Account; import android.accounts.AccountManager; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.ServiceConnection; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.BitmapFactory.Options; -import android.graphics.Point; import android.net.Uri; -import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; -import android.os.IBinder; -import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentTransaction; import android.util.Log; -import android.view.Display; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; 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; import com.actionbarsherlock.app.SherlockFragment; import com.owncloud.android.AccountUtils; @@ -82,13 +66,10 @@ import com.owncloud.android.DisplayUtils; import com.owncloud.android.authenticator.AccountAuthenticator; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.files.services.FileDownloader; import com.owncloud.android.files.services.FileObserverService; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; -import com.owncloud.android.media.MediaService; -import com.owncloud.android.media.MediaServiceBinder; import com.owncloud.android.network.OwnCloudClientUtils; import com.owncloud.android.operations.OnRemoteOperationListener; import com.owncloud.android.operations.RemoteOperation; @@ -100,9 +81,6 @@ import com.owncloud.android.operations.SynchronizeFileOperation; import com.owncloud.android.ui.activity.ConflictsResolveActivity; 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.dialog.EditNameDialog; import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener; import com.owncloud.android.utils.OwnCloudVersion; @@ -135,17 +113,12 @@ public class FileDetailFragment extends SherlockFragment implements private Account mAccount; private FileDataStorageManager mStorageManager; - private DownloadFinishReceiver mDownloadFinishReceiver; private UploadFinishReceiver mUploadFinishReceiver; public ProgressListener mProgressListener; private Handler mHandler; private RemoteOperation mLastRemoteOperation; - private MediaServiceBinder mMediaServiceBinder = null; - private MediaController mMediaController = null; - private MediaServiceConnection mMediaServiceConnection = null; - private static final String TAG = FileDetailFragment.class.getSimpleName(); public static final String FTAG = "FileDetails"; public static final String FTAG_CONFIRMATION = "REMOVE_CONFIRMATION_FRAGMENT"; @@ -218,7 +191,7 @@ public class FileDetailFragment extends SherlockFragment implements mProgressListener = new ProgressListener(progressBar); } - updateFileDetails(false); + updateFileDetails(false, false); return view; } @@ -245,8 +218,7 @@ public class FileDetailFragment extends SherlockFragment implements public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (mAccount != null) { - mStorageManager = new FileDataStorageManager(mAccount, getActivity().getApplicationContext().getContentResolver());; - mView.setOnTouchListener(new OnSwipeTouchListener(getActivity())); + mStorageManager = new FileDataStorageManager(mAccount, getActivity().getApplicationContext().getContentResolver()); } } @@ -261,23 +233,14 @@ public class FileDetailFragment extends SherlockFragment implements @Override public void onStart() { super.onStart(); - if (mFile != null && mFile.isAudio()) { - bindMediaService(); - } listenForTransferProgress(); } @Override public void onResume() { super.onResume(); - - mDownloadFinishReceiver = new DownloadFinishReceiver(); - IntentFilter filter = new IntentFilter( - FileDownloader.DOWNLOAD_FINISH_MESSAGE); - getActivity().registerReceiver(mDownloadFinishReceiver, filter); - mUploadFinishReceiver = new UploadFinishReceiver(); - filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE); + IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE); getActivity().registerReceiver(mUploadFinishReceiver, filter); } @@ -286,33 +249,19 @@ public class FileDetailFragment extends SherlockFragment implements @Override public void onPause() { super.onPause(); - - getActivity().unregisterReceiver(mDownloadFinishReceiver); - mDownloadFinishReceiver = null; - - getActivity().unregisterReceiver(mUploadFinishReceiver); - mUploadFinishReceiver = null; + if (mUploadFinishReceiver != null) { + getActivity().unregisterReceiver(mUploadFinishReceiver); + mUploadFinishReceiver = null; + } } @Override public void onStop() { super.onStop(); - if (mMediaServiceConnection != null) { - Log.d(TAG, "Unbinding from MediaService ..."); - if (mMediaServiceBinder != null && mMediaController != null) { - mMediaServiceBinder.unregisterMediaController(mMediaController); - } - getActivity().unbindService(mMediaServiceConnection); - mMediaServiceBinder = null; - if (mMediaController != null) { - mMediaController.hide(); - mMediaController = null; - } - } leaveTransferProgress(); } - + @Override public View getView() { @@ -419,71 +368,6 @@ 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); - startActivity(i); - } - - - private void bindMediaService() { - Log.d(TAG, "Binding to MediaService..."); - if (mMediaServiceConnection == null) { - mMediaServiceConnection = new MediaServiceConnection(); - } - getActivity().bindService( new Intent(getActivity(), - MediaService.class), - mMediaServiceConnection, - Context.BIND_AUTO_CREATE); - // follow the flow in MediaServiceConnection#onServiceConnected(...) - } - - /** Defines callbacks for service binding, passed to bindService() */ - private class MediaServiceConnection implements ServiceConnection { - - @Override - public void onServiceConnected(ComponentName component, IBinder service) { - if (component.equals(new ComponentName(getActivity(), MediaService.class))) { - Log.d(TAG, "Media service connected"); - mMediaServiceBinder = (MediaServiceBinder) service; - if (mMediaServiceBinder != null) { - if (mMediaController == null) { - mMediaController = new MediaController(getSherlockActivity()); - } - prepareMediaController(); - - Log.d(TAG, "Successfully bound to MediaService, MediaController ready"); - - } else { - Log.e(TAG, "Unexpected response from MediaService while binding"); - } - } - } - - private void prepareMediaController() { - mMediaServiceBinder.registerMediaController(mMediaController); - mMediaController.setMediaPlayer(mMediaServiceBinder); - mMediaController.setAnchorView(getView()); - mMediaController.setEnabled(mMediaServiceBinder.isInPlaybackState()); - } - - @Override - public void onServiceDisconnected(ComponentName component) { - if (component.equals(new ComponentName(getActivity(), MediaService.class))) { - Log.e(TAG, "Media service suddenly disconnected"); - if (mMediaController != null) { - mMediaController.hide(); - mMediaController.setMediaPlayer(null); - mMediaController = null; - } - mMediaServiceBinder = null; - mMediaServiceConnection = null; - } - } - } - - /** * Opens mFile. */ @@ -599,7 +483,7 @@ public class FileDetailFragment extends SherlockFragment implements mStorageManager = new FileDataStorageManager(ocAccount, getActivity().getApplicationContext().getContentResolver()); } mAccount = ocAccount; - updateFileDetails(false); + updateFileDetails(false, false); } @@ -613,12 +497,17 @@ public class FileDetailFragment extends SherlockFragment implements * @param transferring Flag signaling if the file should be considered as downloading or uploading, * although {@link FileDownloaderBinder#isDownloading(Account, OCFile)} and * {@link FileUploaderBinder#isUploading(Account, OCFile)} return false. - * + * + * @param refresh If 'true', try to refresh the hold file from the database */ - public void updateFileDetails(boolean transferring) { + public void updateFileDetails(boolean transferring, boolean refresh) { if (readyToShow()) { + if (refresh && mStorageManager != null) { + mFile = mStorageManager.getFileByPath(mFile.getRemotePath()); + } + // set file details setFilename(mFile.getFileName()); setFiletype(mFile.getMimetype()); @@ -819,29 +708,6 @@ public class FileDetailFragment extends SherlockFragment implements /** - * Once the file download has finished -> update view - * @author Bartek Przybylski - */ - private class DownloadFinishReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - String accountName = intent.getStringExtra(FileDownloader.ACCOUNT_NAME); - - if (!isEmpty() && accountName.equals(mAccount.name)) { - boolean downloadWasFine = intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false); - String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH); - if (mFile.getRemotePath().equals(downloadedRemotePath)) { - if (downloadWasFine) { - mFile = mStorageManager.getFileByPath(downloadedRemotePath); - } - updateFileDetails(false); // it updates the buttons; must be called although !downloadWasFine - } - } - } - } - - - /** * Once the file upload has finished -> update view * * Being notified about the finish of an upload is necessary for the next sequence: @@ -871,7 +737,7 @@ public class FileDetailFragment extends SherlockFragment implements msg.show(); } getSherlockActivity().removeStickyBroadcast(intent); // not the best place to do this; a small refactorization of BroadcastReceivers should be done - updateFileDetails(false); // it updates the buttons; must be called although !uploadWasFine; interrupted uploads still leave an incomplete file in the server + updateFileDetails(false, false); // it updates the buttons; must be called although !uploadWasFine; interrupted uploads still leave an incomplete file in the server } } }