Browse Source

Video previews reworked to provide seamless playback in turns and changes between fullscreen and embedded, in any combination and order

David A. Velasco 12 years ago
parent
commit
00328cb889

+ 45 - 8
src/com/owncloud/android/ui/activity/FileDetailActivity.java

@@ -18,7 +18,6 @@
 package com.owncloud.android.ui.activity;
 package com.owncloud.android.ui.activity;
 
 
 import android.accounts.Account;
 import android.accounts.Account;
-import android.app.Activity;
 import android.app.Dialog;
 import android.app.Dialog;
 import android.app.ProgressDialog;
 import android.app.ProgressDialog;
 import android.content.BroadcastReceiver;
 import android.content.BroadcastReceiver;
@@ -79,11 +78,16 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
 
 
     private FileDataStorageManager mStorageManager;
     private FileDataStorageManager mStorageManager;
     private DownloadFinishReceiver mDownloadFinishReceiver;
     private DownloadFinishReceiver mDownloadFinishReceiver;
+
+    private Configuration mNewConfigurationChangeToApplyOnStart;
+
+    private boolean mStarted;
     
     
 
 
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
+        mStarted = false;
 
 
         mFile = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE);
         mFile = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE);
         mAccount = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);
         mAccount = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);
@@ -134,10 +138,42 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
         ft.commit();
         ft.commit();
     }
     }
     
     
+    @Override
+    public void onActivityResult (int requestCode, int resultCode, Intent data) {
+        Log_OC.e(TAG, "onActivityResult");
+        super.onActivityResult(requestCode, resultCode, data);
+    }
 
 
     @Override
     @Override
     public void onConfigurationChanged (Configuration newConfig) {
     public void onConfigurationChanged (Configuration newConfig) {
         super.onConfigurationChanged(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();
         finish();
         Intent intent = null;
         Intent intent = null;
         if ((newConfig.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE
         if ((newConfig.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE
@@ -170,18 +206,17 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
         }
         }
         startActivity(intent);
         startActivity(intent);
     }
     }
-    
-    
+
     @Override
     @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
     @Override
     public void onPause() {
     public void onPause() {
         super.onPause();
         super.onPause();
+        Log_OC.e(TAG, "onPause");
         if (mDownloadFinishReceiver != null) {
         if (mDownloadFinishReceiver != null) {
             unregisterReceiver(mDownloadFinishReceiver);
             unregisterReceiver(mDownloadFinishReceiver);
             mDownloadFinishReceiver = null;
             mDownloadFinishReceiver = null;
@@ -192,6 +227,7 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
     @Override
     @Override
     public void onResume() {
     public void onResume() {
         super.onResume();
         super.onResume();
+        Log_OC.e(TAG, "onResume");
         // TODO this is probably unnecessary
         // TODO this is probably unnecessary
         Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);
         Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);
         if (fragment != null && fragment instanceof FileDetailFragment) {
         if (fragment != null && fragment instanceof FileDetailFragment) {
@@ -250,6 +286,7 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
     @Override
     @Override
     public void onDestroy() {
     public void onDestroy() {
         super.onDestroy();
         super.onDestroy();
+        Log_OC.e(TAG,  "onDestroy");
         if (mDownloadConnection != null) {
         if (mDownloadConnection != null) {
             unbindService(mDownloadConnection);
             unbindService(mDownloadConnection);
             mDownloadConnection = null;
             mDownloadConnection = null;

+ 48 - 17
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -140,11 +140,15 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
 
 
     private OCFile mWaitingToPreview;
     private OCFile mWaitingToPreview;
     private Handler mHandler;
     private Handler mHandler;
+    
+    private Configuration mNewConfigurationChangeToApplyOnStart;
+    private boolean mStarted;
 
 
     @Override
     @Override
     public void onCreate(Bundle savedInstanceState) {
     public void onCreate(Bundle savedInstanceState) {
         Log_OC.d(getClass().toString(), "onCreate() start");
         Log_OC.d(getClass().toString(), "onCreate() start");
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
+        mStarted = false;
 
 
         /// Load of parameters from received intent
         /// Load of parameters from received intent
         Account account = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);
         Account account = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);
@@ -228,24 +232,10 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     @Override
     @Override
     public void onConfigurationChanged (Configuration newConfig) {
     public void onConfigurationChanged (Configuration newConfig) {
         super.onConfigurationChanged(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 {
         } 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;
         }
         }
     }
     }
     
     
@@ -318,6 +308,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
     @Override
     public void onDestroy() {
     public void onDestroy() {
         super.onDestroy();
         super.onDestroy();
@@ -398,6 +428,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
      * Called, when the user selected something for uploading
      * Called, when the user selected something for uploading
      */
      */
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
     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)) {
         if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
             requestSimpleUpload(data, resultCode);
             requestSimpleUpload(data, resultCode);

+ 45 - 3
src/com/owncloud/android/ui/preview/PreviewMediaFragment.java

@@ -29,6 +29,7 @@ import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.content.ServiceConnection;
+import android.content.res.Configuration;
 import android.media.MediaPlayer;
 import android.media.MediaPlayer;
 import android.media.MediaPlayer.OnCompletionListener;
 import android.media.MediaPlayer.OnCompletionListener;
 import android.media.MediaPlayer.OnErrorListener;
 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.FileDetailFragment;
 import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.ui.fragment.FileFragment;
 
 
+import com.owncloud.android.Log_OC;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import eu.alefzero.webdav.WebdavClient;
 import eu.alefzero.webdav.WebdavClient;
 import eu.alefzero.webdav.WebdavUtils;
 import eu.alefzero.webdav.WebdavUtils;
@@ -108,6 +110,7 @@ public class PreviewMediaFragment extends SherlockFragment implements
     private MediaServiceConnection mMediaServiceConnection = null;
     private MediaServiceConnection mMediaServiceConnection = null;
     private VideoHelper mVideoHelper;
     private VideoHelper mVideoHelper;
     private boolean mAutoplay;
     private boolean mAutoplay;
+    public boolean mPrepared;
     
     
     private static final String TAG = PreviewMediaFragment.class.getSimpleName();
     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,
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
             Bundle savedInstanceState) {
         super.onCreateView(inflater, container, savedInstanceState);
         super.onCreateView(inflater, container, savedInstanceState);
+        Log_OC.e(TAG, "onCreateView");
+
         
         
         mView = inflater.inflate(R.layout.file_preview, container, false);
         mView = inflater.inflate(R.layout.file_preview, container, false);
         
         
@@ -182,6 +187,8 @@ public class PreviewMediaFragment extends SherlockFragment implements
     @Override
     @Override
     public void onAttach(Activity activity) {
     public void onAttach(Activity activity) {
         super.onAttach(activity);
         super.onAttach(activity);
+        Log_OC.e(TAG, "onAttach");
+        
         if (!(activity instanceof FileFragment.ContainerActivity))
         if (!(activity instanceof FileFragment.ContainerActivity))
             throw new ClassCastException(activity.toString() + " must implement " + FileFragment.ContainerActivity.class.getSimpleName());
             throw new ClassCastException(activity.toString() + " must implement " + FileFragment.ContainerActivity.class.getSimpleName());
     }
     }
@@ -193,6 +200,7 @@ public class PreviewMediaFragment extends SherlockFragment implements
     @Override
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         super.onActivityCreated(savedInstanceState);
+        Log_OC.e(TAG, "onActivityCreated");
 
 
         mStorageManager = new FileDataStorageManager(mAccount, getActivity().getApplicationContext().getContentResolver());
         mStorageManager = new FileDataStorageManager(mAccount, getActivity().getApplicationContext().getContentResolver());
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
@@ -230,6 +238,8 @@ public class PreviewMediaFragment extends SherlockFragment implements
     @Override
     @Override
     public void onSaveInstanceState(Bundle outState) {
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
         super.onSaveInstanceState(outState);
+        Log_OC.e(TAG, "onSaveInstanceState");
+        
         outState.putParcelable(PreviewMediaFragment.EXTRA_FILE, mFile);
         outState.putParcelable(PreviewMediaFragment.EXTRA_FILE, mFile);
         outState.putParcelable(PreviewMediaFragment.EXTRA_ACCOUNT, mAccount);
         outState.putParcelable(PreviewMediaFragment.EXTRA_ACCOUNT, mAccount);
         
         
@@ -248,6 +258,7 @@ public class PreviewMediaFragment extends SherlockFragment implements
     @Override
     @Override
     public void onStart() {
     public void onStart() {
         super.onStart();
         super.onStart();
+        Log_OC.e(TAG, "onStart");
 
 
         if (mFile != null) {
         if (mFile != null) {
            if (mFile.isAudio()) {
            if (mFile.isAudio()) {
@@ -362,6 +373,7 @@ public class PreviewMediaFragment extends SherlockFragment implements
             }
             }
             mMediaController.setEnabled(true);
             mMediaController.setEnabled(true);
             mMediaController.updatePausePlay();
             mMediaController.updatePausePlay();
+            mPrepared = true;
         }
         }
         
         
         
         
@@ -424,10 +436,30 @@ 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
     @Override
     public void onStop() {
     public void onStop() {
+        Log_OC.e(TAG, "onStop");
         super.onStop();
         super.onStop();
-        
+
+        mPrepared = false;
         if (mMediaServiceConnection != null) {
         if (mMediaServiceConnection != null) {
             Log.d(TAG, "Unbinding from MediaService ...");
             Log.d(TAG, "Unbinding from MediaService ...");
             if (mMediaServiceBinder != null && mMediaController != null) {
             if (mMediaServiceBinder != null && mMediaController != null) {
@@ -459,9 +491,14 @@ public class PreviewMediaFragment extends SherlockFragment implements
         startActivityForResult(i, 0);
         startActivityForResult(i, 0);
     }
     }
 
 
+    @Override
+    public void onConfigurationChanged (Configuration newConfig) {
+        Log_OC.e(TAG, "onConfigurationChanged " + this);
+    }
     
     
     @Override
     @Override
     public void onActivityResult (int requestCode, int resultCode, Intent data) {
     public void onActivityResult (int requestCode, int resultCode, Intent data) {
+        Log_OC.e(TAG, "onActivityResult " + this);
         super.onActivityResult(requestCode, resultCode, data);
         super.onActivityResult(requestCode, resultCode, data);
         if (resultCode == Activity.RESULT_OK) {
         if (resultCode == Activity.RESULT_OK) {
             mSavedPlaybackPosition = data.getExtras().getInt(PreviewVideoActivity.EXTRA_START_POSITION);
             mSavedPlaybackPosition = data.getExtras().getInt(PreviewVideoActivity.EXTRA_START_POSITION);
@@ -755,12 +792,17 @@ public class PreviewMediaFragment extends SherlockFragment implements
 
 
 
 
     public int getPosition() {
     public int getPosition() {
-        mSavedPlaybackPosition = mVideoPreview.getCurrentPosition();
+        if (mPrepared) {
+            mSavedPlaybackPosition = mVideoPreview.getCurrentPosition();
+        }
+        Log_OC.e(TAG, "getting position: " + mSavedPlaybackPosition);
         return mSavedPlaybackPosition;
         return mSavedPlaybackPosition;
     }
     }
     
     
     public boolean isPlaying() {
     public boolean isPlaying() {
-        mAutoplay = mVideoPreview.isPlaying();
+        if (mPrepared) {
+            mAutoplay = mVideoPreview.isPlaying();
+        }
         return mAutoplay;
         return mAutoplay;
     }
     }