浏览代码

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

David A. Velasco 12 年之前
父节点
当前提交
00328cb889

+ 45 - 8
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;

+ 48 - 17
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;
         }
     }
     
@@ -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
     public void onDestroy() {
         super.onDestroy();
@@ -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);

+ 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.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;
         }
         
         
@@ -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
     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;
     }