X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/18bf35a8099ce585ef30767a9f1f7e595c866b45..7101a04247be24d9eb3c1aa49b88ec2496c7d2d6:/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 0d07c448..e90dbf71 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -71,6 +71,7 @@ import android.widget.ImageView; import android.widget.MediaController; import android.widget.TextView; import android.widget.Toast; +import android.widget.VideoView; import com.actionbarsherlock.app.SherlockFragment; import com.owncloud.android.AccountUtils; @@ -96,7 +97,9 @@ 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; @@ -109,11 +112,12 @@ import eu.alefzero.webdav.WebdavUtils; * This Fragment is used to display the details about a file. * * @author Bartek Przybylski - * + * @author David A. Velasco */ public class FileDetailFragment extends SherlockFragment implements OnClickListener, OnTouchListener, - ConfirmationDialogFragment.ConfirmationDialogFragmentListener, OnRemoteOperationListener, EditNameDialogListener { + ConfirmationDialogFragment.ConfirmationDialogFragmentListener, OnRemoteOperationListener, EditNameDialogListener, + FileFragment { public static final String EXTRA_FILE = "FILE"; public static final String EXTRA_ACCOUNT = "ACCOUNT"; @@ -133,6 +137,7 @@ public class FileDetailFragment extends SherlockFragment implements private Handler mHandler; private RemoteOperation mLastRemoteOperation; private DialogFragment mCurrentDialog; + private MediaServiceBinder mMediaServiceBinder = null; private MediaController mMediaController = null; private MediaServiceConnection mMediaServiceConnection = null; @@ -220,6 +225,7 @@ public class FileDetailFragment extends SherlockFragment implements super.onAttach(activity); try { mContainerActivity = (ContainerActivity) activity; + } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement " + FileDetailFragment.ContainerActivity.class.getSimpleName()); } @@ -234,6 +240,7 @@ public class FileDetailFragment extends SherlockFragment implements super.onActivityCreated(savedInstanceState); if (mAccount != null) { mStorageManager = new FileDataStorageManager(mAccount, getActivity().getApplicationContext().getContentResolver());; + mView.setOnTouchListener(new OnSwipeTouchListener(getActivity())); } } @@ -270,9 +277,6 @@ public class FileDetailFragment extends SherlockFragment implements mPreview = (ImageView)mView.findViewById(R.id.fdPreview); // this is here just because it is nullified in onPause() - if (mMediaController != null) { - mMediaController.show(); - } } @@ -290,9 +294,6 @@ public class FileDetailFragment extends SherlockFragment implements mPreview = null; } - if (mMediaController != null) { - mMediaController.hide(); - } } @@ -301,9 +302,15 @@ public class FileDetailFragment extends SherlockFragment implements super.onStop(); if (mMediaServiceConnection != null) { Log.d(TAG, "Unbinding from MediaService ..."); + if (mMediaServiceBinder != null && mMediaController != null) { + mMediaServiceBinder.unregisterMediaController(mMediaController); + } getActivity().unbindService(mMediaServiceConnection); mMediaServiceBinder = null; - mMediaController = null; + if (mMediaController != null) { + mMediaController.hide(); + mMediaController = null; + } } } @@ -418,25 +425,23 @@ public class FileDetailFragment extends SherlockFragment implements @Override public boolean onTouch(View v, MotionEvent event) { - if (v == mPreview && event.getAction() == MotionEvent.ACTION_DOWN && mFile != null && mFile.isDown() && mFile.isAudio()) { - if (!mMediaServiceBinder.isPlaying(mFile)) { - Log.d(TAG, "starting playback of " + mFile.getStoragePath()); - mMediaServiceBinder.start(mAccount, mFile); - // this is a patch; need to synchronize this with the onPrepared() coming from MediaPlayer in the MediaService - mMediaController.postDelayed(new Runnable() { - @Override - public void run() { - mMediaController.show(0); - } - } , 300); - } else { - mMediaController.show(0); + if (v == mPreview && event.getAction() == MotionEvent.ACTION_DOWN && mFile != null && mFile.isDown()) { + if (mFile.isVideo()) { + startVideoActivity(); } } return false; } + 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) { @@ -446,6 +451,7 @@ public class FileDetailFragment extends SherlockFragment implements MediaService.class), mMediaServiceConnection, Context.BIND_AUTO_CREATE); + // follow the flow in MediaServiceConnection#onServiceConnected(...) } /** Defines callbacks for service binding, passed to bindService() */ @@ -460,9 +466,7 @@ public class FileDetailFragment extends SherlockFragment implements if (mMediaController == null) { mMediaController = new MediaController(getSherlockActivity()); } - mMediaController.setMediaPlayer(mMediaServiceBinder); - mMediaController.setAnchorView(mPreview); - mMediaController.setEnabled(true); + prepareMediaController(); Log.d(TAG, "Successfully bound to MediaService, MediaController ready"); @@ -472,13 +476,20 @@ public class FileDetailFragment extends SherlockFragment implements } } + 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.d(TAG, "Media service suddenly disconnected"); + Log.e(TAG, "Media service suddenly disconnected"); if (mMediaController != null) { mMediaController.hide(); - mMediaController.setMediaPlayer(null); // TODO check this is not an error + mMediaController.setMediaPlayer(null); mMediaController = null; } mMediaServiceBinder = null; @@ -589,10 +600,9 @@ public class FileDetailFragment extends SherlockFragment implements /** - * Can be used to get the file that is currently being displayed. - * @return The file on the screen. + * {@inheritDoc} */ - public OCFile getDisplayedFile(){ + public OCFile getFile(){ return mFile; }