import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.FileMenuFilter;
+import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.media.MediaControlView;
import com.owncloud.android.media.MediaService;
import com.owncloud.android.media.MediaServiceBinder;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
import com.owncloud.android.ui.fragment.FileFragment;
-import com.owncloud.android.utils.Log_OC;
/**
* @param fileToDetail An {@link OCFile} to preview in the fragment
* @param ocAccount An ownCloud account; needed to start downloads
*/
- public PreviewMediaFragment(OCFile fileToDetail, Account ocAccount, int startPlaybackPosition, boolean autoplay) {
+ public PreviewMediaFragment(
+ OCFile fileToDetail,
+ Account ocAccount,
+ int startPlaybackPosition,
+ boolean autoplay) {
+
super(fileToDetail);
mAccount = ocAccount;
mSavedPlaybackPosition = startPlaybackPosition;
/**
* Creates an empty fragment for previews.
*
- * MUST BE KEPT: the system uses it when tries to reinstantiate a fragment automatically (for instance, when the device is turned a aside).
+ * MUST BE KEPT: the system uses it when tries to reinstantiate a fragment automatically
+ * (for instance, when the device is turned a aside).
*
- * DO NOT CALL IT: an {@link OCFile} and {@link Account} must be provided for a successful construction
+ * DO NOT CALL IT: an {@link OCFile} and {@link Account} must be provided for a successful
+ * construction
*/
public PreviewMediaFragment() {
super();
super.onActivityCreated(savedInstanceState);
Log_OC.e(TAG, "onActivityCreated");
- if (savedInstanceState != null) {
- setFile((OCFile)savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE));
+ OCFile file = getFile();
+ if (savedInstanceState == null) {
+ if (file == null) {
+ throw new IllegalStateException("Instanced with a NULL OCFile");
+ }
+ if (mAccount == null) {
+ throw new IllegalStateException("Instanced with a NULL ownCloud Account");
+ }
+ if (!file.isDown()) {
+ throw new IllegalStateException("There is no local file to preview");
+ }
+
+ } else {
+ file = (OCFile)savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE);
+ setFile(file);
mAccount = savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_ACCOUNT);
- mSavedPlaybackPosition = savedInstanceState.getInt(PreviewMediaFragment.EXTRA_PLAY_POSITION);
+ mSavedPlaybackPosition =
+ savedInstanceState.getInt(PreviewMediaFragment.EXTRA_PLAY_POSITION);
mAutoplay = savedInstanceState.getBoolean(PreviewMediaFragment.EXTRA_PLAYING);
}
- OCFile file = getFile();
- if (file == null) {
- throw new IllegalStateException("Instanced with a NULL OCFile");
- }
- if (mAccount == null) {
- throw new IllegalStateException("Instanced with a NULL ownCloud Account");
- }
- if (!file.isDown()) {
- throw new IllegalStateException("There is no local file to preview");
- }
- if (file.isVideo()) {
- mVideoPreview.setVisibility(View.VISIBLE);
- mImagePreview.setVisibility(View.GONE);
- prepareVideo();
+ if (file != null && file.isDown()) {
+ if (file.isVideo()) {
+ mVideoPreview.setVisibility(View.VISIBLE);
+ mImagePreview.setVisibility(View.GONE);
+ prepareVideo();
- } else {
- mVideoPreview.setVisibility(View.GONE);
- mImagePreview.setVisibility(View.VISIBLE);
+ } else {
+ mVideoPreview.setVisibility(View.GONE);
+ mImagePreview.setVisibility(View.VISIBLE);
+ }
}
}
outState.putInt(PreviewMediaFragment.EXTRA_PLAY_POSITION , mSavedPlaybackPosition);
outState.putBoolean(PreviewMediaFragment.EXTRA_PLAYING , mAutoplay);
} else {
- outState.putInt(PreviewMediaFragment.EXTRA_PLAY_POSITION , mMediaServiceBinder.getCurrentPosition());
- outState.putBoolean(PreviewMediaFragment.EXTRA_PLAYING , mMediaServiceBinder.isPlaying());
+ outState.putInt(
+ PreviewMediaFragment.EXTRA_PLAY_POSITION ,
+ mMediaServiceBinder.getCurrentPosition());
+ outState.putBoolean(
+ PreviewMediaFragment.EXTRA_PLAYING , mMediaServiceBinder.isPlaying());
}
}
Log_OC.e(TAG, "onStart");
OCFile file = getFile();
- if (file != null) {
+ if (file != null && file.isDown()) {
if (file.isAudio()) {
bindMediaService();
item.setVisible(false);
item.setEnabled(false);
}
+
+ // additional restriction for this fragment
+ item = menu.findItem(R.id.action_move);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
}
}
case R.id.action_send_file: {
sendFile();
+ return true;
}
case R.id.action_sync_file: {
mContainerActivity.getFileOperationsHelper().syncFile(getFile());
mVideoPreview.setOnErrorListener(mVideoHelper);
}
+ @SuppressWarnings("static-access")
private void playVideo() {
// create and prepare control panel for the user
mMediaController.setMediaPlayer(mVideoPreview);
- // load the video file in the video player ; when done, VideoHelper#onPrepared() will be called
- mVideoPreview.setVideoPath(getFile().getStoragePath());
+ // load the video file in the video player ;
+ // when done, VideoHelper#onPrepared() will be called
+ Uri uri = Uri.parse(getFile().getStoragePath());
+ mVideoPreview.setVideoPath(uri.encode(getFile().getStoragePath()));
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if (mVideoPreview.getWindowToken() != null) {
- String message = MediaService.getMessageForMediaError(getSherlockActivity(), what, extra);
+ String message = MediaService.getMessageForMediaError(
+ getSherlockActivity(), what, extra);
new AlertDialog.Builder(getSherlockActivity())
.setMessage(message)
.setPositiveButton(android.R.string.VideoView_error_button,
@Override
public void onPause() {
- super.onPause();
Log_OC.e(TAG, "onPause");
+ super.onPause();
}
@Override
@Override
public void onDestroy() {
- super.onDestroy();
Log_OC.e(TAG, "onDestroy");
+ super.onDestroy();
}
@Override
public void onStop() {
Log_OC.e(TAG, "onStop");
- super.onStop();
mPrepared = false;
if (mMediaServiceConnection != null) {
mMediaServiceConnection = null;
mMediaServiceBinder = null;
}
+
+ super.onStop();
}
@Override
Log_OC.e(TAG, "onActivityResult " + this);
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
- mSavedPlaybackPosition = data.getExtras().getInt(PreviewVideoActivity.EXTRA_START_POSITION);
+ mSavedPlaybackPosition = data.getExtras().getInt(
+ PreviewVideoActivity.EXTRA_START_POSITION);
mAutoplay = data.getExtras().getBoolean(PreviewVideoActivity.EXTRA_AUTOPLAY);
}
}
@Override
public void onServiceConnected(ComponentName component, IBinder service) {
if (getSherlockActivity() != null) {
- if (component.equals(new ComponentName(getSherlockActivity(), MediaService.class))) {
+ if (component.equals(
+ new ComponentName(getSherlockActivity(), MediaService.class))) {
Log_OC.d(TAG, "Media service connected");
mMediaServiceBinder = (MediaServiceBinder) service;
if (mMediaServiceBinder != null) {
if (mMediaController != null) {
mMediaController.setMediaPlayer(null);
} else {
- Toast.makeText(getSherlockActivity(), "No media controller to release when disconnected from media service", Toast.LENGTH_SHORT).show();
+ Toast.makeText(
+ getSherlockActivity(),
+ "No media controller to release when disconnected from media service",
+ Toast.LENGTH_SHORT).show();
}
mMediaServiceBinder = null;
mMediaServiceConnection = null;
}
/**
- * Helper method to test if an {@link OCFile} can be passed to a {@link PreviewMediaFragment} to be previewed.
+ * Helper method to test if an {@link OCFile} can be passed to a {@link PreviewMediaFragment}
+ * to be previewed.
*
* @param file File to test if can be previewed.
* @return 'True' if the file can be handled by the fragment.