X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/080a8ab7af2bc48e3c5fa1334ae91d21073e26c2..b29ba035f8fa516b74d814d831a5928a8ab795de:/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java diff --git a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java index 2c5527c0..b6ee12b9 100644 --- a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java @@ -20,10 +20,15 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; +import android.accounts.AuthenticatorException; +import android.accounts.OperationCanceledException; import android.app.Activity; +import android.content.ActivityNotFoundException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.MediaMetadataRetriever; +import android.net.Uri; +import android.os.AsyncTask; import android.support.v7.app.AlertDialog; import android.content.ComponentName; import android.content.Context; @@ -36,8 +41,6 @@ import android.media.MediaPlayer; 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 android.view.LayoutInflater; @@ -52,9 +55,16 @@ import android.widget.ImageView; import android.widget.Toast; import android.widget.VideoView; +import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.files.FileMenuFilter; +import com.owncloud.android.lib.common.OwnCloudAccount; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; +import com.owncloud.android.lib.common.OwnCloudCredentials; +import com.owncloud.android.lib.common.accounts.AccountUtils; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.media.MediaControlView; import com.owncloud.android.media.MediaService; @@ -64,6 +74,9 @@ import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; import com.owncloud.android.ui.fragment.FileFragment; +import java.io.IOException; +import java.util.concurrent.ExecutionException; + /** * This fragment shows a preview of a downloaded media file (audio or video). @@ -87,6 +100,7 @@ public class PreviewMediaFragment extends FileFragment implements private ImageView mImagePreview; private VideoView mVideoPreview; private int mSavedPlaybackPosition; + private String mUri; private MediaServiceBinder mMediaServiceBinder = null; private MediaControlView mMediaController = null; @@ -153,7 +167,7 @@ public class PreviewMediaFragment extends FileFragment implements public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); - Log_OC.e(TAG, "onCreateView"); + Log_OC.v(TAG, "onCreateView"); mView = inflater.inflate(R.layout.file_preview, container, false); @@ -174,7 +188,7 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - Log_OC.e(TAG, "onActivityCreated"); + Log_OC.v(TAG, "onActivityCreated"); OCFile file = getFile(); if (savedInstanceState == null) { @@ -184,10 +198,6 @@ public class PreviewMediaFragment extends FileFragment implements 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); @@ -198,7 +208,7 @@ public class PreviewMediaFragment extends FileFragment implements mAutoplay = savedInstanceState.getBoolean(PreviewMediaFragment.EXTRA_PLAYING); } - if (file != null && file.isDown()) { + if (file != null) { if (file.isVideo()) { mVideoPreview.setVisibility(View.VISIBLE); mImagePreview.setVisibility(View.GONE); @@ -244,7 +254,7 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - Log_OC.e(TAG, "onSaveInstanceState"); + Log_OC.v(TAG, "onSaveInstanceState"); outState.putParcelable(PreviewMediaFragment.EXTRA_FILE, getFile()); outState.putParcelable(PreviewMediaFragment.EXTRA_ACCOUNT, mAccount); @@ -268,10 +278,10 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onStart() { super.onStart(); - Log_OC.e(TAG, "onStart"); + Log_OC.v(TAG, "onStart"); OCFile file = getFile(); - if (file != null && file.isDown()) { + if (file != null) { if (file.isAudio()) { bindMediaService(); @@ -351,19 +361,9 @@ public class PreviewMediaFragment extends FileFragment implements public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_share_file: { - stopPreview(false); - mContainerActivity.getFileOperationsHelper().shareFileWithLink(getFile()); - return true; - } - case R.id.action_share_with_users: { seeShareFile(); return true; } - case R.id.action_unshare_file: { - stopPreview(false); - mContainerActivity.getFileOperationsHelper().unshareFileWithLink(getFile()); - return true; - } case R.id.action_open_file_with: { openFile(); return true; @@ -402,7 +402,7 @@ public class PreviewMediaFragment extends FileFragment implements /** * Update the file of the fragment with file value * - * @param file + * @param file Replaces the held file with a new one */ public void updateFile(OCFile file) { setFile(file); @@ -439,8 +439,65 @@ public class PreviewMediaFragment extends FileFragment implements // 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())); + if (getFile().isDown()) { + mUri = getFile().getStoragePath(); + } else { + Context context = MainApp.getAppContext(); + Account account = mContainerActivity.getStorageManager().getAccount(); + + mUri = generateUrlWithCredentials(account, context, getFile()); + } + + mVideoPreview.setVideoURI(getFile().getStorageUri()); + } + + public static String generateUrlWithCredentials(Account account, Context context, OCFile file){ + OwnCloudAccount ocAccount = null; + try { + ocAccount = new OwnCloudAccount(account, context); + + final ClientGenerationTask task = new ClientGenerationTask(); + task.execute(ocAccount); + + OwnCloudClient mClient = task.get(); + String url = AccountUtils.constructFullURLForAccount(context, account) + Uri.encode(file.getRemotePath(), "/"); + OwnCloudCredentials credentials = mClient.getCredentials(); + + return url.replace("//", "//" + credentials.getUsername() + ":" + credentials.getAuthToken() + "@"); + + } catch (AccountUtils.AccountNotFoundException e) { + e.printStackTrace(); + + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + return ""; + } + + public static class ClientGenerationTask extends AsyncTask { + @Override + protected OwnCloudClient doInBackground(Object... params) { + Object account = params[0]; + if (account instanceof OwnCloudAccount){ + try { + OwnCloudAccount ocAccount = (OwnCloudAccount) account; + return OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, MainApp.getAppContext()); + } catch (AccountUtils.AccountNotFoundException e) { + e.printStackTrace(); + } catch (OperationCanceledException e) { + e.printStackTrace(); + } catch (AuthenticatorException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return null; + } } @@ -455,7 +512,7 @@ public class PreviewMediaFragment extends FileFragment implements */ @Override public void onPrepared(MediaPlayer vp) { - Log_OC.e(TAG, "onPrepared"); + Log_OC.v(TAG, "onPrepared"); mVideoPreview.seekTo(mSavedPlaybackPosition); if (mAutoplay) { mVideoPreview.start(); @@ -475,25 +532,9 @@ public class PreviewMediaFragment extends FileFragment implements */ @Override public void onCompletion(MediaPlayer mp) { - Log_OC.e(TAG, "completed"); + Log_OC.v(TAG, "completed"); if (mp != null) { mVideoPreview.seekTo(0); - // next lines are necessary to work around undesired video loops - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD) { - mVideoPreview.pause(); - - } - else { - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1) { - // mVideePreview.pause() is not enough - - mMediaController.setEnabled(false); - mVideoPreview.stopPlayback(); - mAutoplay = false; - mSavedPlaybackPosition = 0; - mVideoPreview.setVideoPath(getFile().getStoragePath()); - } - } } // else : called from onError() mMediaController.updatePausePlay(); } @@ -508,48 +549,32 @@ public class PreviewMediaFragment extends FileFragment implements */ @Override public boolean onError(MediaPlayer mp, int what, int extra) { - if (mVideoPreview.getWindowToken() != null) { - String message = MediaService.getMessageForMediaError( - getActivity(), what, extra); - new AlertDialog.Builder(getActivity()) - .setMessage(message) - .setPositiveButton(android.R.string.VideoView_error_button, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - dialog.dismiss(); - VideoHelper.this.onCompletion(null); - } - }) - .setCancelable(false) - .show(); - } + MediaService.streamWithExternalApp(mUri, getActivity()).show(); return true; } - } - @Override public void onPause() { - Log_OC.e(TAG, "onPause"); + Log_OC.v(TAG, "onPause"); super.onPause(); } @Override public void onResume() { super.onResume(); - Log_OC.e(TAG, "onResume"); + Log_OC.v(TAG, "onResume"); } @Override public void onDestroy() { - Log_OC.e(TAG, "onDestroy"); + Log_OC.v(TAG, "onDestroy"); super.onDestroy(); } @Override public void onStop() { - Log_OC.e(TAG, "onStop"); + Log_OC.v(TAG, "onStop"); mPrepared = false; if (mMediaServiceConnection != null) { @@ -590,12 +615,12 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onConfigurationChanged(Configuration newConfig) { - Log_OC.e(TAG, "onConfigurationChanged " + this); + Log_OC.v(TAG, "onConfigurationChanged " + this); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - Log_OC.e(TAG, "onActivityResult " + this); + Log_OC.v(TAG, "onActivityResult " + this); super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { mSavedPlaybackPosition = data.getExtras().getInt( @@ -669,7 +694,7 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onServiceDisconnected(ComponentName component) { if (component.equals(new ComponentName(getActivity(), MediaService.class))) { - Log_OC.e(TAG, "Media service suddenly disconnected"); + Log_OC.w(TAG, "Media service suddenly disconnected"); if (mMediaController != null) { mMediaController.setMediaPlayer(null); } @@ -733,7 +758,7 @@ public class PreviewMediaFragment extends FileFragment implements if (mPrepared) { mSavedPlaybackPosition = mVideoPreview.getCurrentPosition(); } - Log_OC.e(TAG, "getting position: " + mSavedPlaybackPosition); + Log_OC.v(TAG, "getting position: " + mSavedPlaybackPosition); return mSavedPlaybackPosition; }