Browse Source

Merge pull request #155 from owncloud/file_browsing_refactoring

File browsing refactoring
David A. Velasco 12 years ago
parent
commit
d22fc90d67

+ 18 - 17
AndroidManifest.xml

@@ -49,7 +49,8 @@
         android:theme="@style/Theme.ownCloud"> 
         <activity
             android:name=".ui.activity.FileDisplayActivity"
-            android:label="@string/app_name">
+            android:label="@string/app_name"
+            android:configChanges="orientation|screenSize">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
@@ -150,7 +151,7 @@
         <service android:name=".files.services.FileUploader" />
         <service android:name=".media.MediaService" />
         
-        <activity android:name=".ui.activity.FileDetailActivity" />
+        <activity android:name=".ui.activity.FileDetailActivity" android:configChanges="orientation|screenSize"/>
         <activity android:name=".ui.activity.PinCodeActivity" />
         <activity android:name=".extensions.ExtensionsAvailableActivity"></activity>
         <activity android:name=".extensions.ExtensionsListActivity"></activity>
@@ -161,22 +162,22 @@
         
         <activity android:name=".ui.activity.LogHistoryActivity"/>
         
-        <receiver android:name=".files.InstantUploadBroadcastReceiver">
-            <intent-filter>
-                <action android:name="com.android.camera.NEW_PICTURE" />
-                <data android:mimeType="image/*" />
+        <receiver android:name=".files.InstantUploadBroadcastReceiver">
+            <intent-filter>
+                <action android:name="com.android.camera.NEW_PICTURE" />
+                <data android:mimeType="image/*" />
             </intent-filter>
             <intent-filter>
                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".files.BootupBroadcastReceiver">
-            <intent-filter>
-                <action android:name="android.intent.action.BOOT_COMPLETED"/>
-            </intent-filter>
-        </receiver>
-        <service android:name=".files.services.FileObserverService"/>
-        
-    </application>
-
+            </intent-filter>
+        </receiver>
+        <receiver android:name=".files.BootupBroadcastReceiver">
+            <intent-filter>
+                <action android:name="android.intent.action.BOOT_COMPLETED"/>
+            </intent-filter>
+        </receiver>
+        <service android:name=".files.services.FileObserverService"/>
+        
+    </application>
+
 </manifest>

BIN
res/drawable-hdpi-v9/ic_action_download.png


BIN
res/drawable-hdpi/ic_action_download.png


BIN
res/drawable-ldpi-v9/ic_action_download.png


BIN
res/drawable-ldpi/ic_action_download.png


BIN
res/drawable-mdpi-v9/ic_action_download.png


BIN
res/drawable-mdpi/ic_action_download.png


+ 14 - 39
res/layout/file_details_fragment.xml

@@ -178,57 +178,32 @@
       				android:text="@string/downloader_download_in_progress_ticker"
       				/>
     			
-    			<ProgressBar android:id="@+id/fdProgressBar"
-					android:layout_width="match_parent" 
-					android:layout_height="wrap_content"
-					android:progressDrawable="@android:drawable/progress_horizontal"
-					android:indeterminate="false" 
-					android:indeterminateOnly="false" 
-					/>
-				    								
 			    <LinearLayout
+			        android:id="@+id/fdProgressBlock"
 					android:layout_width="match_parent"
 					android:layout_height="wrap_content"
 					android:gravity="center_horizontal"
 					android:layout_marginTop="12dp"
+					android:layout_marginBottom="12dp"
+					android:orientation="horizontal"
 					>
 				    				
-					<Button
-						android:id="@+id/fdDownloadBtn"
+    				<ProgressBar 
+    				    android:id="@+id/fdProgressBar"
 						android:layout_width="0dp"
 						android:layout_height="wrap_content"
 						android:layout_weight="1"
-						android:text="@string/filedetails_download" />
-						
-					<Button
-						android:id="@+id/fdOpenBtn"
-						android:layout_width="0dp"
-						android:layout_height="wrap_content"
-						android:layout_weight="1"
-						android:text="@string/filedetails_open" />
-						
-				</LinearLayout>
-		
-				<LinearLayout
-					android:layout_width="match_parent"
-					android:layout_height="wrap_content"
-					android:gravity="center_horizontal"
-					android:layout_marginTop="12dp"
-					>
-					
+						android:progressDrawable="@android:drawable/progress_horizontal"
+						android:indeterminate="false" 
+						android:indeterminateOnly="false" 
+					/>
+				    								
 					<Button
-						android:id="@+id/fdRenameBtn"
-						android:layout_width="0dp"
-						android:layout_height="wrap_content"
-						android:layout_weight="1"
-						android:text="@string/common_rename" />
-						
-				    <Button
-						android:id="@+id/fdRemoveBtn"
-						android:layout_width="0dp"
+						android:id="@+id/fdCancelBtn"
+						android:layout_width="wrap_content"
 						android:layout_height="wrap_content"
-						android:layout_weight="1"
-						android:text="@string/common_remove" />
+						android:layout_marginLeft="12dp"
+						android:text="@string/common_cancel" />
 						
 				</LinearLayout>
 	

+ 3 - 2
res/menu/file_actions_menu.xml

@@ -20,11 +20,12 @@
 <menu 	xmlns:android="http://schemas.android.com/apk/res/android">
     
 	<item 	android:id="@+id/action_open_file_with"			android:title="@string/filedetails_open"			android:icon="@android:drawable/ic_menu_edit"					android:orderInCategory="1" />
-	<item 	android:id="@+id/action_download_file" 			android:title="@string/filedetails_download"																		android:orderInCategory="1" />
+	<item 	android:id="@+id/action_download_file" 			android:title="@string/filedetails_download"		android:icon="@drawable/ic_action_download"						android:orderInCategory="1" />
+    <item 	android:id="@+id/action_sync_file"				android:title="@string/filedetails_sync_file"		android:icon="@drawable/ic_action_refresh"						android:orderInCategory="1" />
 	<item 	android:id="@+id/action_cancel_download"		android:title="@string/common_cancel_download"	 	android:icon="@android:drawable/ic_menu_close_clear_cancel"		android:orderInCategory="1" />
 	<item 	android:id="@+id/action_cancel_upload" 			android:title="@string/common_cancel_upload"		android:icon="@android:drawable/ic_menu_close_clear_cancel"		android:orderInCategory="1" />
 	<item 	android:id="@+id/action_rename_file"			android:title="@string/common_rename"				android:icon="@android:drawable/ic_menu_set_as"					android:orderInCategory="1" />
     <item 	android:id="@+id/action_remove_file"			android:title="@string/common_remove"				android:icon="@android:drawable/ic_menu_delete"					android:orderInCategory="1" />
-    <item 	android:id="@+id/action_see_details"			android:title="@string/actionbar_see_details"		android:icon="@android:drawable/ic_menu_view"					android:orderInCategory="1" />
+    <item 	android:id="@+id/action_see_details"			android:title="@string/actionbar_see_details"		android:icon="@android:drawable/ic_menu_info_details"			android:orderInCategory="1" />
     
 </menu>

+ 109 - 29
src/com/owncloud/android/ui/activity/FileDetailActivity.java

@@ -35,6 +35,9 @@ import android.support.v4.app.FragmentTransaction;
 import com.actionbarsherlock.app.ActionBar;
 import com.actionbarsherlock.app.SherlockFragmentActivity;
 import com.actionbarsherlock.view.MenuItem;
+import com.owncloud.android.AccountUtils;
+import com.owncloud.android.Log_OC;
+import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader;
@@ -44,10 +47,7 @@ import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
 import com.owncloud.android.ui.fragment.FileDetailFragment;
 import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.ui.preview.PreviewMediaFragment;
-import com.owncloud.android.AccountUtils;
-import com.owncloud.android.Log_OC;
-
-import com.owncloud.android.R;
+import com.owncloud.android.ui.preview.PreviewVideoActivity;
 
 /**
  * This activity displays the details of a file like its name, its size and so
@@ -68,7 +68,6 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
 
     public static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
     
-    private boolean mConfigurationChangedToLandscape = false;
     private FileDownloaderBinder mDownloaderBinder = null;
     private ServiceConnection mDownloadConnection, mUploadConnection = null;
     private FileUploaderBinder mUploaderBinder = null;
@@ -79,28 +78,39 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
 
     private FileDataStorageManager mStorageManager;
     private DownloadFinishReceiver mDownloadFinishReceiver;
+
+    private Configuration mNewConfigurationChangeToApplyOnStart;
+
+    private boolean mStarted;
+
+    private boolean mDualPane;
     
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
+        mStarted = false;
+        
         mFile = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE);
         mAccount = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);
         mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());
         
-        // check if configuration changed to large-land ; for a tablet being changed from portrait to landscape when in FileDetailActivity 
+        // check if configuration is proper for this activity; tablets in landscape should pass the torch to FileDisplayActivity 
         Configuration conf = getResources().getConfiguration();
-        mConfigurationChangedToLandscape = (conf.orientation == Configuration.ORIENTATION_LANDSCAPE && 
-                                                (conf.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE
-                                           );
+        mDualPane = (conf.orientation == Configuration.ORIENTATION_LANDSCAPE && 
+                        (conf.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE
+                    );
 
-        if (!mConfigurationChangedToLandscape) {
+        if (mDualPane) {
+            // only happens when notifications (downloads, uploads) are clicked at the notification bar
+            changeToDualView(false);
+            
+        } else {
             setContentView(R.layout.file_activity_details);
         
             ActionBar actionBar = getSupportActionBar();
             actionBar.setDisplayHomeAsUpEnabled(true);
-
+    
             if (savedInstanceState == null) {
                 mWaitingToPreview = false;
                 createChildFragment();
@@ -112,12 +122,7 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
             bindService(new Intent(this, FileDownloader.class), mDownloadConnection, Context.BIND_AUTO_CREATE);
             mUploadConnection = new DetailsServiceConnection();
             bindService(new Intent(this, FileUploader.class), mUploadConnection, Context.BIND_AUTO_CREATE);
-            
-            
-        }  else {
-            backToDisplayActivity(false);   // the 'back' won't be effective until this.onStart() and this.onResume() are completed;
         }
-        
     }
     
     /**
@@ -130,7 +135,9 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
         Fragment newFragment = null;
         if (PreviewMediaFragment.canBePreviewed(mFile) && mode == MODE_PREVIEW) {
             if (mFile.isDown()) {
-                newFragment = new PreviewMediaFragment(mFile, mAccount);
+                int startPlaybackPosition = getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0);
+                boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true);
+                newFragment = new PreviewMediaFragment(mFile, mAccount, startPlaybackPosition, autoplay);
             
             } else {
                 newFragment = new FileDetailFragment(mFile, mAccount);
@@ -145,7 +152,23 @@ 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);
@@ -153,9 +176,61 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
     }
     
     
+    @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
+                && newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
+            
+            intent = new Intent(this, FileDisplayActivity.class);
+            intent .putExtra(FileDetailFragment.EXTRA_FILE, mFile);
+            intent .putExtra(FileDetailFragment.EXTRA_ACCOUNT, mAccount);
+            intent.putExtra(EXTRA_MODE, getIntent().getIntExtra(EXTRA_MODE, MODE_PREVIEW));
+            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+            Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);
+            if (fragment != null && mFile != null && fragment instanceof PreviewMediaFragment && mFile.isVideo()) {
+                PreviewMediaFragment videoFragment = (PreviewMediaFragment)fragment;
+                intent.putExtra(PreviewVideoActivity.EXTRA_START_POSITION, videoFragment.getPosition());
+                intent.putExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, videoFragment.isPlaying());
+            }
+        
+        } else {
+            intent = new Intent(this, FileDetailActivity.class);
+            intent .putExtra(FileDetailFragment.EXTRA_FILE, mFile);
+            intent .putExtra(FileDetailFragment.EXTRA_ACCOUNT, mAccount);
+            intent.putExtra(EXTRA_MODE, getIntent().getIntExtra(EXTRA_MODE, MODE_PREVIEW));
+            Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);
+            if (fragment != null && mFile != null && fragment instanceof PreviewMediaFragment && mFile.isVideo()) {
+                PreviewMediaFragment videoFragment = (PreviewMediaFragment)fragment;
+                intent.putExtra(PreviewVideoActivity.EXTRA_START_POSITION, videoFragment.getPosition());
+                intent.putExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, videoFragment.isPlaying());
+            }
+            // and maybe 'waiting to preview' flag
+        }
+        startActivity(intent);
+    }
+
+    @Override
+    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;
@@ -166,13 +241,13 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
     @Override
     public void onResume() {
         super.onResume();
-        if (!mConfigurationChangedToLandscape) {
-            // TODO this is probably unnecessary
-            Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);
-            if (fragment != null && fragment instanceof FileDetailFragment) {
-                ((FileDetailFragment) fragment).updateFileDetails(false, false);
-            }
+        Log_OC.e(TAG, "onResume");
+        // TODO this is probably unnecessary
+        Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);
+        if (fragment != null && fragment instanceof FileDetailFragment) {
+            ((FileDetailFragment) fragment).updateFileDetails(false, false);
         }
+            
         // Listen for download messages
         IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.DOWNLOAD_ADDED_MESSAGE);
         downloadIntentFilter.addAction(FileDownloader.DOWNLOAD_FINISH_MESSAGE);
@@ -225,6 +300,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;
@@ -242,7 +318,7 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
         
         switch(item.getItemId()){
         case android.R.id.home:
-            backToDisplayActivity(true);
+            changeToDualView(true);
             returnValue = true;
             break;
         default:
@@ -252,12 +328,17 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
         return returnValue;
     }
 
-    private void backToDisplayActivity(boolean moveToParent) {
+    @Override
+    public void onBackPressed() {
+        changeToDualView(true);
+    }
+    
+    private void changeToDualView(boolean moveToParent) {
         Intent intent = new Intent(this, FileDisplayActivity.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         OCFile targetFile = null;
         if (mFile != null) {
-            targetFile = moveToParent ? mStorageManager.getFileById(mFile.getParentId()) : mFile;
+            targetFile = moveToParent ? mStorageManager.getFileById(mFile.getParentId()) : mFile;;
         }
         intent.putExtra(FileDetailFragment.EXTRA_FILE, targetFile);
         intent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, mAccount);
@@ -265,7 +346,6 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
         finish();
     }
     
-    
     @Override
     protected Dialog onCreateDialog(int id) {
         Dialog dialog = null;
@@ -374,7 +454,7 @@ public class FileDetailActivity extends SherlockFragmentActivity implements File
                 if (success && mWaitingToPreview) {
                     mFile = mStorageManager.getFileById(mFile.getFileId());   // update the file from database, for the local storage path
                     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-                    transaction.replace(R.id.fragment, new PreviewMediaFragment(mFile, mAccount), FileDetailFragment.FTAG);
+                    transaction.replace(R.id.fragment, new PreviewMediaFragment(mFile, mAccount, 0, true), FileDetailFragment.FTAG);
                     transaction.commit();
                     mWaitingToPreview = false;
                     

+ 88 - 28
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -34,6 +34,7 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.SharedPreferences;
+import android.content.res.Configuration;
 import android.content.res.Resources.NotFoundException;
 import android.database.Cursor;
 import android.net.Uri;
@@ -88,6 +89,7 @@ import com.owncloud.android.ui.fragment.OCFileListFragment;
 import com.owncloud.android.ui.preview.PreviewImageActivity;
 import com.owncloud.android.ui.preview.PreviewImageFragment;
 import com.owncloud.android.ui.preview.PreviewMediaFragment;
+import com.owncloud.android.ui.preview.PreviewVideoActivity;
 
 /**
  * Displays, what files the user has available in his ownCloud.
@@ -130,11 +132,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;
 
         mHandler = new Handler();
 
@@ -197,21 +203,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         setContentView(R.layout.files);    
         mFileList = (OCFileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);
         mDualPane = (findViewById(R.id.file_details_container) != null);
-        if (mDualPane) {
-            if (savedInstanceState == null) initFileDetailsInDualPane();
-        } else {
-            // quick patchES to fix problem in turn from landscape to portrait, when a file is selected in the right pane
-            // TODO serious refactorization in activities and fragments providing file browsing and handling 
-            if (mCurrentFile != null) {
-                onFileClick(mCurrentFile);
-                mCurrentFile = null;
-            }
-            Fragment rightPanel = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);
-            if (rightPanel != null) {
-                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-                transaction.remove(rightPanel);
-                transaction.commit();
-            }
+        if (mDualPane && savedInstanceState == null) {
+            initFileDetailsInDualPane();
         }
             
         // Action bar setup
@@ -230,6 +223,17 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     }
 
     
+    @Override
+    public void onConfigurationChanged (Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        if (mStarted) {
+            checkConfigurationChange(newConfig);
+        } else {
+            mNewConfigurationChangeToApplyOnStart = newConfig;
+        }
+    }
+    
+    
     /**
      * Launches the account creation activity. To use when no ownCloud account is available
      */
@@ -278,7 +282,9 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             if (mCurrentFile != null) {
                 if (PreviewMediaFragment.canBePreviewed(mCurrentFile)) {
                     if (mCurrentFile.isDown()) {
-                        transaction.replace(R.id.file_details_container, new PreviewMediaFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);
+                        int startPlaybackPosition = getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0);
+                        boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true);
+                        transaction.replace(R.id.file_details_container, new PreviewMediaFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this), startPlaybackPosition, autoplay), FileDetailFragment.FTAG);
                     } else {
                         transaction.replace(R.id.file_details_container, new FileDetailFragment(mCurrentFile, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);
                         mWaitingToPreview = mCurrentFile;
@@ -296,6 +302,45 @@ 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));
+            startActivity(intent);
+        }
+    }
+
+
     @Override
     public void onDestroy() {
         super.onDestroy();
@@ -376,6 +421,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);
@@ -900,7 +946,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
                 if (success && waitedPreview) {
                     mWaitingToPreview = mStorageManager.getFileById(mWaitingToPreview.getFileId());   // update the file from database, for the local storage path
                     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-                    transaction.replace(R.id.file_details_container, new PreviewMediaFragment(mWaitingToPreview, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);
+                    transaction.replace(R.id.file_details_container, new PreviewMediaFragment(mWaitingToPreview, AccountUtils.getCurrentOwnCloudAccount(this), 0, true), FileDetailFragment.FTAG);
                     transaction.commit();
                     mWaitingToPreview = null;
                     
@@ -946,7 +992,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
      * {@inheritDoc}
      */
     @Override
-    public void onFileClick(OCFile file) {
+    public void onFileClick(OCFile file, boolean onOrientationChange) {
         if (file != null && PreviewImageFragment.canBePreviewed(file)) {
             // preview image - it handles the download, if needed
             startPreviewImage(file);
@@ -954,16 +1000,28 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         } else if (file != null && PreviewMediaFragment.canBePreviewed(file)) {
             if (file.isDown()) {
                 // general preview
-                startMediaPreview(file);
+                if (!onOrientationChange) {
+                    startMediaPreview(file, 0, true, onOrientationChange);
+                } else {
+                    int startPlaybackPosition = 0;
+                    boolean autoplay = true;
+                    Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDetailFragment.FTAG);
+                    if (fragment != null && file.isVideo()) {
+                        PreviewMediaFragment videoFragment = (PreviewMediaFragment)fragment;
+                        startPlaybackPosition = videoFragment.getPosition();
+                        autoplay = videoFragment.isPlaying();
+                    }
+                    startMediaPreview(file, startPlaybackPosition, autoplay, onOrientationChange);
+                }
                 
             } else {
                 // automatic download, preview on finish
-                startDownloadForPreview(file);
+                startDownloadForPreview(file, onOrientationChange);
                 
             }
         } else {
             // details view
-            startDetails(file);
+            startDetails(file, onOrientationChange);
         }
     }
 
@@ -974,22 +1032,24 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         startActivity(showDetailsIntent);
     }
     
-    private void startMediaPreview(OCFile file) {
-        if (mDualPane) {
+    private void startMediaPreview(OCFile file, int startPlaybackPosition, boolean autoplay, boolean onOrientationChange) {
+        if (mDualPane && !onOrientationChange) {
             FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-            transaction.replace(R.id.file_details_container, new PreviewMediaFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);
+            transaction.replace(R.id.file_details_container, new PreviewMediaFragment(file, AccountUtils.getCurrentOwnCloudAccount(this), startPlaybackPosition, autoplay), FileDetailFragment.FTAG);
             transaction.commit();
             
         } else {
             Intent showDetailsIntent = new Intent(this, FileDetailActivity.class);
             showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);
             showDetailsIntent.putExtra(FileDetailFragment.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(this));
+            showDetailsIntent.putExtra(PreviewVideoActivity.EXTRA_START_POSITION, startPlaybackPosition);
+            showDetailsIntent.putExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, autoplay);
             startActivity(showDetailsIntent);
         }
     }
     
-    private void startDownloadForPreview(OCFile file) {
-        if (mDualPane) {
+    private void startDownloadForPreview(OCFile file, boolean onOrientationChange) {
+        if (mDualPane && !onOrientationChange) {
             FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
             transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);
             transaction.commit();
@@ -1005,8 +1065,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     }
 
     
-    private void startDetails(OCFile file) {
-        if (mDualPane && !file.isImage()) {
+    private void startDetails(OCFile file, boolean onOrientationChange) {
+        if (mDualPane && !file.isImage() && !onOrientationChange) {
             FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
             transaction.replace(R.id.file_details_container, new FileDetailFragment(file, AccountUtils.getCurrentOwnCloudAccount(this)), FileDetailFragment.FTAG);
             transaction.commit();

+ 234 - 126
src/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -19,8 +19,11 @@ package com.owncloud.android.ui.fragment;
 
 import java.io.File;
 import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
 
 import android.accounts.Account;
+import android.accounts.AccountManager;
 import android.app.Activity;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
@@ -36,7 +39,6 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.webkit.MimeTypeMap;
-import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.ImageView;
 import android.widget.ProgressBar;
@@ -44,6 +46,9 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.actionbarsherlock.app.SherlockFragment;
+import com.actionbarsherlock.view.Menu;
+import com.actionbarsherlock.view.MenuInflater;
+import com.actionbarsherlock.view.MenuItem;
 import com.owncloud.android.DisplayUtils;
 import com.owncloud.android.Log_OC;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -52,6 +57,7 @@ import com.owncloud.android.files.services.FileObserverService;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
+import com.owncloud.android.network.OwnCloudClientUtils;
 import com.owncloud.android.operations.OnRemoteOperationListener;
 import com.owncloud.android.operations.RemoteOperation;
 import com.owncloud.android.operations.RemoteOperationResult;
@@ -68,6 +74,7 @@ import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;
 import com.owncloud.android.R;
 
 import eu.alefzero.webdav.OnDatatransferProgressListener;
+import eu.alefzero.webdav.WebdavClient;
 import eu.alefzero.webdav.WebdavUtils;
 
 /**
@@ -137,6 +144,7 @@ public class FileDetailFragment extends SherlockFragment implements
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mHandler = new Handler();
+        setHasOptionsMenu(true);
     }
     
 
@@ -160,20 +168,15 @@ public class FileDetailFragment extends SherlockFragment implements
         
         if (mLayout == R.layout.file_details_fragment) {
             mView.findViewById(R.id.fdKeepInSync).setOnClickListener(this);
-            mView.findViewById(R.id.fdRenameBtn).setOnClickListener(this);
-            mView.findViewById(R.id.fdDownloadBtn).setOnClickListener(this);
-            mView.findViewById(R.id.fdOpenBtn).setOnClickListener(this);
-            mView.findViewById(R.id.fdRemoveBtn).setOnClickListener(this);
-            //mView.findViewById(R.id.fdShareBtn).setOnClickListener(this);
             ProgressBar progressBar = (ProgressBar)mView.findViewById(R.id.fdProgressBar);
             mProgressListener = new ProgressListener(progressBar);
+            mView.findViewById(R.id.fdCancelBtn).setOnClickListener(this);
         }
         
         updateFileDetails(false, false);
         return view;
     }
     
-
     /**
      * {@inheritDoc}
      */
@@ -241,109 +244,236 @@ public class FileDetailFragment extends SherlockFragment implements
     }
 
     
-    @Override
-    public View getView() {
-        return super.getView() == null ? mView : super.getView();
-    }
-
-    
-    @Override
-    public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.fdDownloadBtn: {
-                FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
-                FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
-                if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile)) {
-                    downloaderBinder.cancel(mAccount, mFile);
-                    if (mFile.isDown()) {
-                        setButtonsForDown();
-                    } else {
-                        setButtonsForRemote();
-                    }
-
-                } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile)) {
-                    uploaderBinder.cancel(mAccount, mFile);
-                    if (!mFile.fileExists()) {
-                        // TODO make something better
-                        if (getActivity() instanceof FileDisplayActivity) {
-                            // double pane
-                            FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
-                            transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FTAG); // empty FileDetailFragment
-                            transaction.commit();
-                            mContainerActivity.onFileStateChanged();
-                        } else {
-                            getActivity().finish();
-                        }
-                        
-                    } else if (mFile.isDown()) {
-                        setButtonsForDown();
-                    } else {
-                        setButtonsForRemote();
-                    }
-                    
-                } else {
-                    mLastRemoteOperation = new SynchronizeFileOperation(mFile, null, mStorageManager, mAccount, true, false, getActivity());
-                    mLastRemoteOperation.execute(mAccount, getSherlockActivity(), this, mHandler, getSherlockActivity());
-                
-                    // update ui 
-                    boolean inDisplayActivity = getActivity() instanceof FileDisplayActivity;
-                    getActivity().showDialog((inDisplayActivity)? FileDisplayActivity.DIALOG_SHORT_WAIT : FileDetailActivity.DIALOG_SHORT_WAIT);
-                    setButtonsForTransferring(); // disable button immediately, although the synchronization does not result in a file transference
-                    
-                }
-                break;
-            }
-            case R.id.fdKeepInSync: {
-                CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
-                mFile.setKeepInSync(cb.isChecked());
-                mStorageManager.saveFile(mFile);
-                
-                /// register the OCFile instance in the observer service to monitor local updates;
-                /// if necessary, the file is download 
-                Intent intent = new Intent(getActivity().getApplicationContext(),
-                                           FileObserverService.class);
-                intent.putExtra(FileObserverService.KEY_FILE_CMD,
-                           (cb.isChecked()?
-                                   FileObserverService.CMD_ADD_OBSERVED_FILE:
-                                   FileObserverService.CMD_DEL_OBSERVED_FILE));
-                intent.putExtra(FileObserverService.KEY_CMD_ARG_FILE, mFile);
-                intent.putExtra(FileObserverService.KEY_CMD_ARG_ACCOUNT, mAccount);
-                getActivity().startService(intent);
-                
-                if (mFile.keepInSync()) {
-                    onClick(getView().findViewById(R.id.fdDownloadBtn));    // force an immediate synchronization
-                }
-                break;
+    @Override
+    public View getView() {
+        return super.getView() == null ? mView : super.getView();
+    }
+
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        super.onCreateOptionsMenu(menu, inflater);
+        inflater.inflate(R.menu.file_actions_menu, menu);
+        MenuItem item = menu.findItem(R.id.action_see_details);
+        if (item != null) {
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
+    }
+
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void onPrepareOptionsMenu (Menu menu) {
+        super.onPrepareOptionsMenu(menu);
+        
+        List<Integer> toHide = new ArrayList<Integer>();
+        List<Integer> toShow = new ArrayList<Integer>();
+        
+        FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
+        boolean downloading = downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile);
+        FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
+        boolean uploading = uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile);
+        
+        if (downloading || uploading) {
+            toHide.add(R.id.action_download_file);
+            toHide.add(R.id.action_rename_file);
+            toHide.add(R.id.action_remove_file);
+            toHide.add(R.id.action_open_file_with);
+            if (!downloading) {
+                toHide.add(R.id.action_cancel_download);
+                toShow.add(R.id.action_cancel_upload);
+            } else {
+                toHide.add(R.id.action_cancel_upload);
+                toShow.add(R.id.action_cancel_download);
             }
-            case R.id.fdRenameBtn: {
-                String fileName = mFile.getFileName();
-                int extensionStart = mFile.isDirectory() ? -1 : fileName.lastIndexOf(".");
-                int selectionEnd = (extensionStart >= 0) ? extensionStart : fileName.length();
-                EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), fileName, 0, selectionEnd, this);
-                dialog.show(getFragmentManager(), "nameeditdialog");
-                break;
-            }   
-            case R.id.fdRemoveBtn: {
-                ConfirmationDialogFragment confDialog = ConfirmationDialogFragment.newInstance(
-                        R.string.confirmation_remove_alert,
-                        new String[]{mFile.getFileName()},
-                        mFile.isDown() ? R.string.confirmation_remove_remote_and_local : R.string.confirmation_remove_remote,
-                        mFile.isDown() ? R.string.confirmation_remove_local : -1,
-                        R.string.common_cancel);
-                confDialog.setOnConfirmationListener(this);
-                confDialog.show(getFragmentManager(), FTAG_CONFIRMATION);
-                break;
+
+        } else if (mFile != null && mFile.isDown()) {
+            toHide.add(R.id.action_download_file);
+            toHide.add(R.id.action_cancel_download);
+            toHide.add(R.id.action_cancel_upload);
+            
+            toShow.add(R.id.action_rename_file);
+            toShow.add(R.id.action_remove_file);
+            toShow.add(R.id.action_open_file_with);
+            toShow.add(R.id.action_sync_file);
+            
+        } else if (mFile != null) {
+            toHide.add(R.id.action_open_file_with);
+            toHide.add(R.id.action_cancel_download);
+            toHide.add(R.id.action_cancel_upload);
+            toHide.add(R.id.action_sync_file);
+            
+            toShow.add(R.id.action_rename_file);
+            toShow.add(R.id.action_remove_file);
+            toShow.add(R.id.action_download_file);
+            
+        } else {
+            toHide.add(R.id.action_open_file_with);
+            toHide.add(R.id.action_cancel_download);
+            toHide.add(R.id.action_cancel_upload);
+            toHide.add(R.id.action_sync_file);
+            toHide.add(R.id.action_download_file);
+            toHide.add(R.id.action_rename_file);
+            toHide.add(R.id.action_remove_file);
+            
+        }
+
+        MenuItem item = null;
+        for (int i : toHide) {
+            item = menu.findItem(i);
+            if (item != null) {
+                item.setVisible(false);
+                item.setEnabled(false);
+            }
+        }
+        for (int i : toShow) {
+            item = menu.findItem(i);
+            if (item != null) {
+                item.setVisible(true);
+                item.setEnabled(true);
             }
-            case R.id.fdOpenBtn: {
+        }
+    }
+
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.action_open_file_with: {
                 openFile();
+                return true;
+            }
+            case R.id.action_remove_file: {
+                removeFile();
+                return true;
+            }
+            case R.id.action_rename_file: {
+                renameFile();
+                return true;
+            }
+            case R.id.action_download_file: 
+            case R.id.action_cancel_download:
+            case R.id.action_cancel_upload:
+            case R.id.action_sync_file: {
+                synchronizeFile();
+                return true;
+            }
+            default:
+                return false;
+        }
+    }
+    
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.fdKeepInSync: {
+                toggleKeepInSync();
+                break;
+            }
+            case R.id.fdCancelBtn: {
+                synchronizeFile();
                 break;
             }
             default:
                 Log_OC.e(TAG, "Incorrect view clicked!");
         }
+    }
+    
+    
+    private void toggleKeepInSync() {
+        CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
+        mFile.setKeepInSync(cb.isChecked());
+        mStorageManager.saveFile(mFile);
+        
+        /// register the OCFile instance in the observer service to monitor local updates;
+        /// if necessary, the file is download 
+        Intent intent = new Intent(getActivity().getApplicationContext(),
+                                   FileObserverService.class);
+        intent.putExtra(FileObserverService.KEY_FILE_CMD,
+                   (cb.isChecked()?
+                           FileObserverService.CMD_ADD_OBSERVED_FILE:
+                           FileObserverService.CMD_DEL_OBSERVED_FILE));
+        intent.putExtra(FileObserverService.KEY_CMD_ARG_FILE, mFile);
+        intent.putExtra(FileObserverService.KEY_CMD_ARG_ACCOUNT, mAccount);
+        getActivity().startService(intent);
         
-    }
-    
+        if (mFile.keepInSync()) {
+            synchronizeFile();   // force an immediate synchronization
+        }
+    }
+
+
+    private void removeFile() {
+        ConfirmationDialogFragment confDialog = ConfirmationDialogFragment.newInstance(
+                R.string.confirmation_remove_alert,
+                new String[]{mFile.getFileName()},
+                mFile.isDown() ? R.string.confirmation_remove_remote_and_local : R.string.confirmation_remove_remote,
+                mFile.isDown() ? R.string.confirmation_remove_local : -1,
+                R.string.common_cancel);
+        confDialog.setOnConfirmationListener(this);
+        confDialog.show(getFragmentManager(), FTAG_CONFIRMATION);
+    }
+
+
+    private void renameFile() {
+        String fileName = mFile.getFileName();
+        int extensionStart = mFile.isDirectory() ? -1 : fileName.lastIndexOf(".");
+        int selectionEnd = (extensionStart >= 0) ? extensionStart : fileName.length();
+        EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), fileName, 0, selectionEnd, this);
+        dialog.show(getFragmentManager(), "nameeditdialog");
+    }
+
+    private void synchronizeFile() {
+        FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
+        FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
+        if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile)) {
+            downloaderBinder.cancel(mAccount, mFile);
+            if (mFile.isDown()) {
+                setButtonsForDown();
+            } else {
+                setButtonsForRemote();
+            }
+
+        } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile)) {
+            uploaderBinder.cancel(mAccount, mFile);
+            if (!mFile.fileExists()) {
+                // TODO make something better
+                if (getActivity() instanceof FileDisplayActivity) {
+                    // double pane
+                    FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
+                    transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FTAG); // empty FileDetailFragment
+                    transaction.commit();
+                    mContainerActivity.onFileStateChanged();
+                } else {
+                    getActivity().finish();
+                }
+                
+            } else if (mFile.isDown()) {
+                setButtonsForDown();
+            } else {
+                setButtonsForRemote();
+            }
+            
+        } else {
+            mLastRemoteOperation = new SynchronizeFileOperation(mFile, null, mStorageManager, mAccount, true, false, getActivity());
+            mLastRemoteOperation.execute(mAccount, getSherlockActivity(), this, mHandler, getSherlockActivity());
+            
+            // update ui 
+            boolean inDisplayActivity = getActivity() instanceof FileDisplayActivity;
+            getActivity().showDialog((inDisplayActivity)? FileDisplayActivity.DIALOG_SHORT_WAIT : FileDetailActivity.DIALOG_SHORT_WAIT);
+            
+        }
+    }
+
     /**
      * Opens mFile.
      */
@@ -589,19 +719,11 @@ public class FileDetailFragment extends SherlockFragment implements
      */
     private void setButtonsForTransferring() {
         if (!isEmpty()) {
-            Button downloadButton = (Button) getView().findViewById(R.id.fdDownloadBtn);
-            downloadButton.setText(R.string.common_cancel);
-            //downloadButton.setEnabled(false);
-        
             // let's protect the user from himself ;)
-            ((Button) getView().findViewById(R.id.fdOpenBtn)).setEnabled(false);
-            ((Button) getView().findViewById(R.id.fdRenameBtn)).setEnabled(false);
-            ((Button) getView().findViewById(R.id.fdRemoveBtn)).setEnabled(false);
             getView().findViewById(R.id.fdKeepInSync).setEnabled(false);
             
             // show the progress bar for the transfer
-            ProgressBar progressBar = (ProgressBar)getView().findViewById(R.id.fdProgressBar);
-            progressBar.setVisibility(View.VISIBLE);
+            getView().findViewById(R.id.fdProgressBlock).setVisibility(View.VISIBLE);
             TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
             progressText.setVisibility(View.VISIBLE);
             FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
@@ -619,17 +741,10 @@ public class FileDetailFragment extends SherlockFragment implements
      */
     private void setButtonsForDown() {
         if (!isEmpty()) {
-            Button downloadButton = (Button) getView().findViewById(R.id.fdDownloadBtn);
-            downloadButton.setText(R.string.filedetails_sync_file);
-        
-            ((Button) getView().findViewById(R.id.fdOpenBtn)).setEnabled(true);
-            ((Button) getView().findViewById(R.id.fdRenameBtn)).setEnabled(true);
-            ((Button) getView().findViewById(R.id.fdRemoveBtn)).setEnabled(true);
             getView().findViewById(R.id.fdKeepInSync).setEnabled(true);
             
             // hides the progress bar
-            ProgressBar progressBar = (ProgressBar)getView().findViewById(R.id.fdProgressBar);
-            progressBar.setVisibility(View.GONE);
+            getView().findViewById(R.id.fdProgressBlock).setVisibility(View.GONE);
             TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
             progressText.setVisibility(View.GONE);
         }
@@ -640,17 +755,10 @@ public class FileDetailFragment extends SherlockFragment implements
      */
     private void setButtonsForRemote() {
         if (!isEmpty()) {
-            Button downloadButton = (Button) getView().findViewById(R.id.fdDownloadBtn);
-            downloadButton.setText(R.string.filedetails_download);
-            
-            ((Button) getView().findViewById(R.id.fdOpenBtn)).setEnabled(false);
-            ((Button) getView().findViewById(R.id.fdRenameBtn)).setEnabled(true);
-            ((Button) getView().findViewById(R.id.fdRemoveBtn)).setEnabled(true);
             getView().findViewById(R.id.fdKeepInSync).setEnabled(true);
             
             // hides the progress bar
-            ProgressBar progressBar = (ProgressBar)getView().findViewById(R.id.fdProgressBar);
-            progressBar.setVisibility(View.GONE);
+            getView().findViewById(R.id.fdProgressBlock).setVisibility(View.GONE);
             TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText);
             progressText.setVisibility(View.GONE);
         }

+ 8 - 7
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -141,7 +141,7 @@ public class OCFileListFragment extends FragmentListView implements EditNameDial
                 mContainerActivity.onDirectoryClick(file);
             
             } else {    /// Click on a file
-                mContainerActivity.onFileClick(file);
+                mContainerActivity.onFileClick(file, false);
             }
             
         } else {
@@ -170,6 +170,7 @@ public class OCFileListFragment extends FragmentListView implements EditNameDial
             toHide.add(R.id.action_download_file);
             toHide.add(R.id.action_cancel_download);
             toHide.add(R.id.action_cancel_upload);
+            toHide.add(R.id.action_sync_file);
             toHide.add(R.id.action_see_details);
             if (    mContainerActivity.getFileDownloaderBinder().isDownloading(AccountUtils.getCurrentOwnCloudAccount(getActivity()), targetFile) ||
                     mContainerActivity.getFileUploaderBinder().isUploading(AccountUtils.getCurrentOwnCloudAccount(getActivity()), targetFile)           ) {
@@ -183,12 +184,11 @@ public class OCFileListFragment extends FragmentListView implements EditNameDial
             if (targetFile.isDown()) {
                 toHide.add(R.id.action_cancel_download);
                 toHide.add(R.id.action_cancel_upload);
-                item = menu.findItem(R.id.action_download_file);
-                if (item != null) {
-                    item.setTitle(R.string.filedetails_sync_file);
-                }
+                toHide.add(R.id.action_download_file);
+                
             } else {
                 toHide.add(R.id.action_open_file_with);
+                toHide.add(R.id.action_sync_file);
             }
             if ( mContainerActivity.getFileDownloaderBinder().isDownloading(AccountUtils.getCurrentOwnCloudAccount(getActivity()), targetFile)) {
                 toHide.add(R.id.action_download_file);
@@ -311,7 +311,8 @@ public class OCFileListFragment extends FragmentListView implements EditNameDial
                 }
                 return true;
             }
-            case R.id.action_download_file: {
+            case R.id.action_download_file: 
+            case R.id.action_sync_file: {
                 Account account = AccountUtils.getCurrentOwnCloudAccount(getSherlockActivity());
                 RemoteOperation operation = new SynchronizeFileOperation(mTargetFile, null, mContainerActivity.getStorageManager(), account, true, false, getSherlockActivity());
                 operation.execute(account, getSherlockActivity(), mContainerActivity, mHandler, getSherlockActivity());
@@ -435,7 +436,7 @@ public class OCFileListFragment extends FragmentListView implements EditNameDial
          *  
          * @param file
          */
-        public void onFileClick(OCFile file);
+        public void onFileClick(OCFile file, boolean realClick);
 
         /**
          * Getter for the current DataStorageManager in the container activity

+ 57 - 4
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;
@@ -106,6 +107,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();
 
@@ -118,12 +120,12 @@ public class PreviewMediaFragment extends SherlockFragment implements
      * @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) {
+    public PreviewMediaFragment(OCFile fileToDetail, Account ocAccount, int startPlaybackPosition, boolean autoplay) {
         mFile = fileToDetail;
         mAccount = ocAccount;
-        mSavedPlaybackPosition = 0;
+        mSavedPlaybackPosition = startPlaybackPosition;
         mStorageManager = null; // we need a context to init this; the container activity is not available yet at this moment 
-        mAutoplay = true;
+        mAutoplay = autoplay;
     }
     
     
@@ -161,6 +163,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);
         
@@ -180,6 +184,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());
     }
@@ -191,6 +197,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) {
@@ -228,6 +235,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);
         
@@ -246,6 +255,7 @@ public class PreviewMediaFragment extends SherlockFragment implements
     @Override
     public void onStart() {
         super.onStart();
+        Log_OC.e(TAG, "onStart");
 
         if (mFile != null) {
            if (mFile.isAudio()) {
@@ -280,6 +290,7 @@ public class PreviewMediaFragment extends SherlockFragment implements
         toHide.add(R.id.action_cancel_download);
         toHide.add(R.id.action_cancel_upload);
         toHide.add(R.id.action_download_file);
+        toHide.add(R.id.action_sync_file);
         toHide.add(R.id.action_rename_file);    // by now
 
         for (int i : toHide) {
@@ -359,6 +370,7 @@ public class PreviewMediaFragment extends SherlockFragment implements
             }
             mMediaController.setEnabled(true);
             mMediaController.updatePausePlay();
+            mPrepared = true;
         }
         
         
@@ -421,10 +433,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_OC.d(TAG, "Unbinding from MediaService ...");
             if (mMediaServiceBinder != null && mMediaController != null) {
@@ -456,9 +488,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);
@@ -748,5 +785,21 @@ public class PreviewMediaFragment extends SherlockFragment implements
             container.finish();
         }
     }
+
+
+    public int getPosition() {
+        if (mPrepared) {
+            mSavedPlaybackPosition = mVideoPreview.getCurrentPosition();
+        }
+        Log_OC.e(TAG, "getting position: " + mSavedPlaybackPosition);
+        return mSavedPlaybackPosition;
+    }
+    
+    public boolean isPlaying() {
+        if (mPrepared) {
+            mAutoplay = mVideoPreview.isPlaying();
+        }
+        return mAutoplay;
+    }
     
 }