From: David A. Velasco Date: Tue, 30 Apr 2013 11:16:08 +0000 (+0200) Subject: Video previews reworked to provide seamless playback in turns and changes between... X-Git-Tag: oc-android-1.4.3~27^2~3 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/00328cb8890ab3cf87aca4628efb46d905a44a77 Video previews reworked to provide seamless playback in turns and changes between fullscreen and embedded, in any combination and order --- diff --git a/src/com/owncloud/android/ui/activity/FileDetailActivity.java b/src/com/owncloud/android/ui/activity/FileDetailActivity.java index 8af69f22..202bd5bd 100644 --- a/src/com/owncloud/android/ui/activity/FileDetailActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDetailActivity.java @@ -18,7 +18,6 @@ package com.owncloud.android.ui.activity; import android.accounts.Account; -import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; import android.content.BroadcastReceiver; @@ -79,11 +78,16 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File private FileDataStorageManager mStorageManager; private DownloadFinishReceiver mDownloadFinishReceiver; + + private Configuration mNewConfigurationChangeToApplyOnStart; + + private boolean mStarted; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mStarted = false; mFile = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE); mAccount = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT); @@ -134,10 +138,42 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File ft.commit(); } + @Override + public void onActivityResult (int requestCode, int resultCode, Intent data) { + Log_OC.e(TAG, "onActivityResult"); + super.onActivityResult(requestCode, resultCode, data); + } @Override public void onConfigurationChanged (Configuration newConfig) { super.onConfigurationChanged(newConfig); + if (mStarted) { + checkConfigurationChange(newConfig); + } else { + mNewConfigurationChangeToApplyOnStart = newConfig; + } + } + + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putBoolean(KEY_WAITING_TO_PREVIEW, mWaitingToPreview); + } + + + @Override + public void onStart() { + super.onStart(); + Log_OC.e(TAG, "onStart"); + if (mNewConfigurationChangeToApplyOnStart != null) { + checkConfigurationChange(mNewConfigurationChangeToApplyOnStart); + mNewConfigurationChangeToApplyOnStart = null; + } + mStarted = true; + } + + private void checkConfigurationChange(Configuration newConfig) { finish(); Intent intent = null; if ((newConfig.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE @@ -170,18 +206,17 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File } startActivity(intent); } - - + @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putBoolean(KEY_WAITING_TO_PREVIEW, mWaitingToPreview); + public void onStop() { + super.onStop(); + Log_OC.e(TAG, "onStop"); + mStarted = false; } - - @Override public void onPause() { super.onPause(); + Log_OC.e(TAG, "onPause"); if (mDownloadFinishReceiver != null) { unregisterReceiver(mDownloadFinishReceiver); mDownloadFinishReceiver = null; @@ -192,6 +227,7 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File @Override public void onResume() { super.onResume(); + Log_OC.e(TAG, "onResume"); // TODO this is probably unnecessary Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG); if (fragment != null && fragment instanceof FileDetailFragment) { @@ -250,6 +286,7 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File @Override public void onDestroy() { super.onDestroy(); + Log_OC.e(TAG, "onDestroy"); if (mDownloadConnection != null) { unbindService(mDownloadConnection); mDownloadConnection = null; diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index b6a34eff..b99a9bfb 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -140,11 +140,15 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements private OCFile mWaitingToPreview; private Handler mHandler; + + private Configuration mNewConfigurationChangeToApplyOnStart; + private boolean mStarted; @Override public void onCreate(Bundle savedInstanceState) { Log_OC.d(getClass().toString(), "onCreate() start"); super.onCreate(savedInstanceState); + mStarted = false; /// Load of parameters from received intent Account account = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT); @@ -228,24 +232,10 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements @Override public void onConfigurationChanged (Configuration newConfig) { super.onConfigurationChanged(newConfig); - - FileFragment fragment = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG); - if (fragment != null - && fragment.getFile() != null - && (newConfig.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE - && newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { - - onFileClick(fragment.getFile(), true); - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.remove((Fragment)fragment); - transaction.commit(); - + if (mStarted) { + checkConfigurationChange(newConfig); } else { - finish(); - Intent intent = new Intent(this, FileDisplayActivity.class); - intent .putExtra(FileDetailFragment.EXTRA_FILE, mCurrentDir); - intent .putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this)); - startActivity(intent); + mNewConfigurationChangeToApplyOnStart = newConfig; } } @@ -319,6 +309,46 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements @Override + public void onStart() { + super.onStart(); + if (mNewConfigurationChangeToApplyOnStart != null) { + checkConfigurationChange(mNewConfigurationChangeToApplyOnStart); + mNewConfigurationChangeToApplyOnStart = null; + } + mStarted = true; + } + + @Override + public void onStop() { + super.onStop(); + mStarted = false; + } + + + private void checkConfigurationChange(Configuration newConfig) { + FileFragment fragment = (FileFragment) getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG); + if (fragment != null + && fragment.getFile() != null + && (newConfig.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE + && newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { + + onFileClick(fragment.getFile(), true); + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.remove((Fragment)fragment); + transaction.commit(); + + } else { + finish(); + Intent intent = new Intent(this, FileDisplayActivity.class); + intent .putExtra(FileDetailFragment.EXTRA_FILE, mCurrentDir); + intent .putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this)); + if (fragment != null && fragment.getFile() != null ) + startActivity(intent); + } + } + + + @Override public void onDestroy() { super.onDestroy(); if (mDownloadConnection != null) @@ -398,6 +428,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements * Called, when the user selected something for uploading */ public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) { requestSimpleUpload(data, resultCode); diff --git a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java index 9815e8be..85575d16 100644 --- a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java @@ -29,6 +29,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; +import android.content.res.Configuration; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; @@ -70,6 +71,7 @@ import com.owncloud.android.ui.fragment.ConfirmationDialogFragment; import com.owncloud.android.ui.fragment.FileDetailFragment; import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.Log_OC; import com.owncloud.android.R; import eu.alefzero.webdav.WebdavClient; import eu.alefzero.webdav.WebdavUtils; @@ -108,6 +110,7 @@ public class PreviewMediaFragment extends SherlockFragment implements private MediaServiceConnection mMediaServiceConnection = null; private VideoHelper mVideoHelper; private boolean mAutoplay; + public boolean mPrepared; private static final String TAG = PreviewMediaFragment.class.getSimpleName(); @@ -163,6 +166,8 @@ public class PreviewMediaFragment extends SherlockFragment implements public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); + Log_OC.e(TAG, "onCreateView"); + mView = inflater.inflate(R.layout.file_preview, container, false); @@ -182,6 +187,8 @@ public class PreviewMediaFragment extends SherlockFragment implements @Override public void onAttach(Activity activity) { super.onAttach(activity); + Log_OC.e(TAG, "onAttach"); + if (!(activity instanceof FileFragment.ContainerActivity)) throw new ClassCastException(activity.toString() + " must implement " + FileFragment.ContainerActivity.class.getSimpleName()); } @@ -193,6 +200,7 @@ public class PreviewMediaFragment extends SherlockFragment implements @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + Log_OC.e(TAG, "onActivityCreated"); mStorageManager = new FileDataStorageManager(mAccount, getActivity().getApplicationContext().getContentResolver()); if (savedInstanceState != null) { @@ -230,6 +238,8 @@ public class PreviewMediaFragment extends SherlockFragment implements @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); + Log_OC.e(TAG, "onSaveInstanceState"); + outState.putParcelable(PreviewMediaFragment.EXTRA_FILE, mFile); outState.putParcelable(PreviewMediaFragment.EXTRA_ACCOUNT, mAccount); @@ -248,6 +258,7 @@ public class PreviewMediaFragment extends SherlockFragment implements @Override public void onStart() { super.onStart(); + Log_OC.e(TAG, "onStart"); if (mFile != null) { if (mFile.isAudio()) { @@ -362,6 +373,7 @@ public class PreviewMediaFragment extends SherlockFragment implements } mMediaController.setEnabled(true); mMediaController.updatePausePlay(); + mPrepared = true; } @@ -425,9 +437,29 @@ public class PreviewMediaFragment extends SherlockFragment implements @Override + public void onPause() { + super.onPause(); + Log_OC.e(TAG, "onPause"); + } + + @Override + public void onResume() { + super.onResume(); + Log_OC.e(TAG, "onResume"); + } + + @Override + public void onDestroy() { + super.onDestroy(); + Log_OC.e(TAG, "onDestroy"); + } + + @Override public void onStop() { + Log_OC.e(TAG, "onStop"); super.onStop(); - + + mPrepared = false; if (mMediaServiceConnection != null) { Log.d(TAG, "Unbinding from MediaService ..."); if (mMediaServiceBinder != null && mMediaController != null) { @@ -459,9 +491,14 @@ public class PreviewMediaFragment extends SherlockFragment implements startActivityForResult(i, 0); } + @Override + public void onConfigurationChanged (Configuration newConfig) { + Log_OC.e(TAG, "onConfigurationChanged " + this); + } @Override public void onActivityResult (int requestCode, int resultCode, Intent data) { + Log_OC.e(TAG, "onActivityResult " + this); super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { mSavedPlaybackPosition = data.getExtras().getInt(PreviewVideoActivity.EXTRA_START_POSITION); @@ -755,12 +792,17 @@ public class PreviewMediaFragment extends SherlockFragment implements public int getPosition() { - mSavedPlaybackPosition = mVideoPreview.getCurrentPosition(); + if (mPrepared) { + mSavedPlaybackPosition = mVideoPreview.getCurrentPosition(); + } + Log_OC.e(TAG, "getting position: " + mSavedPlaybackPosition); return mSavedPlaybackPosition; } public boolean isPlaying() { - mAutoplay = mVideoPreview.isPlaying(); + if (mPrepared) { + mAutoplay = mVideoPreview.isPlaying(); + } return mAutoplay; }