Merge branch 'develop' into favourites_context_menu
authorpurigarcia <pgarcia@solidgear.es>
Fri, 10 Jul 2015 06:44:56 +0000 (08:44 +0200)
committerpurigarcia <pgarcia@solidgear.es>
Fri, 10 Jul 2015 06:44:56 +0000 (08:44 +0200)
res/menu/file_actions_menu.xml
res/values/strings.xml
src/com/owncloud/android/files/FileMenuFilter.java
src/com/owncloud/android/files/FileOperationsHelper.java
src/com/owncloud/android/ui/activity/FileActivity.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/fragment/FileDetailFragment.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java
src/com/owncloud/android/ui/preview/PreviewImageActivity.java
src/com/owncloud/android/ui/preview/PreviewImageFragment.java
src/com/owncloud/android/ui/preview/PreviewMediaFragment.java

index 545f8ea..d98804c 100644 (file)
@@ -30,6 +30,8 @@
     <item      android:id="@+id/action_move"                                   android:title="@string/actionbar_move"                          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_send_file"                              android:title="@string/actionbar_send_file"                     android:icon="@android:drawable/ic_menu_set_as"                                 android:orderInCategory="1" />
+    <item      android:id="@+id/action_favorite_file"                  android:title="@string/fd_keep_in_sync"                 android:icon="@android:drawable/ic_menu_set_as"                                 android:orderInCategory="1" />
+    <item      android:id="@+id/action_unfavorite_file"                android:title="@string/unfavorite"                          android:icon="@android:drawable/ic_menu_set_as"                                     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>
index 716d3b2..21b840c 100644 (file)
        <string name="auth_can_not_auth_against_server">Cannot authenticate against this server</string>
     <string name="auth_account_does_not_exist">Account does not exist in the device yet</string>
     
-    <string name="fd_keep_in_sync">Keep file up to date</string>
+    <string name="fd_keep_in_sync">Favorite</string>
+    <string name="unfavorite">Unfavorite</string>
     <string name="common_rename">Rename</string>
     <string name="common_remove">Remove</string>
     <string name="confirmation_remove_alert">"Do you really want to remove %1$s?"</string>
index d6c075d..45aef48 100644 (file)
@@ -215,6 +215,20 @@ public class FileMenuFilter {
             toShow.add(R.id.action_send_file);
         }
 
+        // FAVORITES
+        if (mFile == null || downloading || uploading || mFile.isFolder() || mFile.keepInSync()) {
+            toHide.add(R.id.action_favorite_file);
+        } else {
+            toShow.add(R.id.action_favorite_file);
+        }
+
+        // UNFAVORITES
+        if (mFile == null || downloading || uploading || mFile.isFolder() || !mFile.keepInSync()) {
+            toHide.add(R.id.action_unfavorite_file);
+        } else {
+            toShow.add(R.id.action_unfavorite_file);
+        }
+
     }
 
 }
index 75fae37..fbc039b 100644 (file)
@@ -40,6 +40,7 @@ import com.owncloud.android.lib.common.network.WebdavUtils;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.services.OperationsService;
+import com.owncloud.android.services.observer.FileObserverService;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.dialog.ShareLinkToDialog;
 
@@ -223,6 +224,24 @@ public class FileOperationsHelper {
             mFileActivity.startService(intent);
         }
     }
+
+    public void toggleKeepInSync(OCFile file, boolean isFavorite) {
+        file.setKeepInSync(isFavorite);
+        mFileActivity.getStorageManager().saveFile(file);
+
+        /// register the OCFile instance in the observer service to monitor local updates
+        Intent observedFileIntent = FileObserverService.makeObservedFileIntent(
+                mFileActivity,
+                file,
+                mFileActivity.getAccount(),
+                isFavorite);
+        mFileActivity.startService(observedFileIntent);
+
+        /// immediate content synchronization
+        if (file.keepInSync()) {
+            syncFile(file);
+        }
+    }
     
     public void renameFile(OCFile file, String newFilename) {
         // RenameFile
index 9a952e4..8797648 100644 (file)
@@ -67,6 +67,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.operations.CreateShareOperation;
+import com.owncloud.android.operations.SynchronizeFileOperation;
 import com.owncloud.android.operations.SynchronizeFolderOperation;
 import com.owncloud.android.operations.UnshareLinkOperation;
 import com.owncloud.android.services.OperationsService;
@@ -75,6 +76,8 @@ import com.owncloud.android.ui.NavigationDrawerItem;
 import com.owncloud.android.ui.adapter.NavigationDrawerListAdapter;
 import com.owncloud.android.ui.dialog.LoadingDialog;
 import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
+import com.owncloud.android.ui.fragment.FileDetailFragment;
+import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.utils.ErrorMessageAdapter;
 
 import java.util.ArrayList;
@@ -691,6 +694,9 @@ public class FileActivity extends ActionBarActivity
         } else if (operation instanceof SynchronizeFolderOperation) {
             onSynchronizeFolderOperationFinish((SynchronizeFolderOperation)operation, result);
 
+        }else if (operation instanceof SynchronizeFileOperation) {
+            onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result);
+
         }
     }
 
@@ -762,6 +768,30 @@ public class FileActivity extends ActionBarActivity
             t.show();
         }
     }
+
+    private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation,
+                                                  RemoteOperationResult result) {
+        dismissLoadingDialog();
+        OCFile syncedFile = operation.getLocalFile();
+        if (!result.isSuccess()) {
+            if (result.getCode() == ResultCode.SYNC_CONFLICT) {
+                Intent i = new Intent(this, ConflictsResolveActivity.class);
+                i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile);
+                i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount());
+                startActivity(i);
+
+            }
+
+        } else {
+            if (operation.transferWasRequested()) {
+
+            } else {
+                Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result,
+                        operation, getResources()), Toast.LENGTH_LONG);
+                msg.show();
+            }
+        }
+    }
     
     protected void updateFileFromDB(){
         OCFile file = getFile();
@@ -770,6 +800,7 @@ public class FileActivity extends ActionBarActivity
             setFile(file);
         }
     }
+
     
     /**
      * Show loading dialog 
index 6840f91..cfeb541 100644 (file)
@@ -1457,6 +1457,7 @@ public class FileDisplayActivity extends HookActivity
                                 operation, getResources()), Toast.LENGTH_LONG);
                 msg.show();
             }
+            invalidateOptionsMenu();
         }
     }
 
index 4f099e4..9472372 100644 (file)
@@ -259,6 +259,14 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
                 }
                 return true;
             }
+            case R.id.action_favorite_file:{
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(getFile(), true);
+                return true;
+            }
+            case R.id.action_unfavorite_file:{
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(getFile(), false);
+                return true;
+            }
             default:
                 return false;
         }
@@ -268,7 +276,8 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.fdKeepInSync: {
-                toggleKeepInSync();
+                CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(getFile(),cb.isChecked());
                 break;
             }
             case R.id.fdCancelBtn: {
@@ -279,27 +288,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
                 Log_OC.e(TAG, "Incorrect view clicked!");
         }
     }
-    
-    
-    private void toggleKeepInSync() {
-        CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
-        OCFile file = getFile();
-        file.setKeepInSync(cb.isChecked());
-        mContainerActivity.getStorageManager().saveFile(file);
-        
-        /// register the OCFile instance in the observer service to monitor local updates
-        Intent observedFileIntent = FileObserverService.makeObservedFileIntent(
-                getActivity(),
-                file, 
-                mAccount,
-                cb.isChecked());
-        getActivity().startService(observedFileIntent);
-        
-        /// immediate content synchronization
-        if (file.keepInSync()) {
-            mContainerActivity.getFileOperationsHelper().syncFile(getFile());
-        }
-    }
+
 
     /**
      * Check if the fragment was created with an empty layout. An empty fragment can't show file details, must be replaced.
index 424b0d5..7160973 100644 (file)
@@ -341,6 +341,14 @@ public class OCFileListFragment extends ExtendedListFragment {
                 getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
                 return true;
             }
+            case R.id.action_favorite_file:{
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(mTargetFile, true);
+                return true;
+            }
+            case R.id.action_unfavorite_file:{
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(mTargetFile, false);
+                return true;
+            }
             default:
                 return super.onContextItemSelected(item); 
         }
@@ -492,8 +500,7 @@ public class OCFileListFragment extends ExtendedListFragment {
 
     public void sortBySize(boolean descending) {
         mAdapter.setSortOrder(FileStorageUtils.SORT_SIZE, descending);
-    }  
-    
-   
+    }
+
     
 }
index 2b0d96c..b2d0c8c 100644 (file)
@@ -55,6 +55,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCo
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.operations.CreateShareOperation;
 import com.owncloud.android.operations.RemoveFileOperation;
+import com.owncloud.android.operations.SynchronizeFileOperation;
 import com.owncloud.android.operations.UnshareLinkOperation;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
@@ -234,6 +235,9 @@ public class PreviewImageActivity extends FileActivity implements
             
         } else if (operation instanceof RemoveFileOperation) {
             finish();
+        } else if (operation instanceof SynchronizeFileOperation) {
+            onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
+
         }
     }
     
@@ -263,6 +267,14 @@ public class PreviewImageActivity extends FileActivity implements
         }
     }
 
+    private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation,
+                                                  RemoteOperationResult result) {
+        if (result.isSuccess()) {
+            invalidateOptionsMenu();
+        }
+
+    }
+
     @Override
     protected ServiceConnection newTransferenceServiceConnection() {
         return new PreviewImageServiceConnection();
index 7950ec9..b625ac2 100644 (file)
@@ -306,7 +306,14 @@ public class PreviewImageFragment extends FileFragment {
                 mContainerActivity.getFileOperationsHelper().syncFile(getFile());
                 return true;
             }
-            
+            case R.id.action_favorite_file:{
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(getFile(), true);
+                return true;
+            }
+            case R.id.action_unfavorite_file:{
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(getFile(), false);
+                return true;
+            }
             default:
                 return false;
         }
index c5883cf..5365943 100644 (file)
@@ -341,7 +341,14 @@ public class PreviewMediaFragment extends FileFragment implements
                 mContainerActivity.getFileOperationsHelper().syncFile(getFile());
                 return true;
             }
-
+            case R.id.action_favorite_file:{
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(getFile(), true);
+                return true;
+            }
+            case R.id.action_unfavorite_file:{
+                mContainerActivity.getFileOperationsHelper().toggleKeepInSync(getFile(), false);
+                return true;
+            }
             default:
                 return false;
         }