瀏覽代碼

media folder sorting (enabled, alphanumerical) + javadoc

AndyScherzinger 8 年之前
父節點
當前提交
db96fe0399

+ 2 - 2
src/com/owncloud/android/datamodel/MediaProvider.java

@@ -38,8 +38,8 @@ public class MediaProvider {
     private static final Uri MEDIA_URI = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
 
     /**
-     * TODO rewrite
-     * Getting All Images Path
+     * TODO rewrite/beautify
+     * Getting All Images Paths.
      *
      * @param contentResolver the content resolver
      * @return List with images folders

+ 76 - 2
src/com/owncloud/android/ui/activity/FolderSyncActivity.java

@@ -48,6 +48,8 @@ import com.owncloud.android.ui.dialog.SyncedFolderPreferencesDialogFragment;
 import com.owncloud.android.ui.dialog.parcel.SyncedFolderParcelable;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -87,6 +89,9 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         setupContent();
     }
 
+    /**
+     * sets up the UI elements and loads all media/synced folders.
+     */
     private void setupContent() {
         mRecyclerView = (RecyclerView) findViewById(android.R.id.list);
 
@@ -106,6 +111,9 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         load();
     }
 
+    /**
+     * loads all media/synced folders, adds them to the recycler view adapter and shows the list.
+     */
     private void load() {
         if (mAdapter.getItemCount() > 0) return;
         setListShown(false);
@@ -114,8 +122,8 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
             @Override
             public void run() {
                 final List<MediaFolder> mediaFolders = MediaProvider.getAllShownImagesPath(getContentResolver());
-                syncFolderItems = mergeFolderData(mSyncedFolderProvider.getSyncedFolders(),
-                        mediaFolders);
+                syncFolderItems = sortSyncedFolderItem(mergeFolderData(mSyncedFolderProvider.getSyncedFolders(),
+                        mediaFolders));
 
                 // TODO remove before merging to master, keeping it for debugging atm
                 /**
@@ -135,6 +143,13 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         }).start();
     }
 
+    /**
+     * merges two lists of SyncedFolder and MediaFolder items into one of SyncedFolderItems.
+     *
+     * @param syncedFolders the synced folders
+     * @param mediaFolders  the media folders
+     * @return the merged list of SyncedFolderItems
+     */
     @NonNull
     private List<SyncedFolderItem> mergeFolderData(List<SyncedFolder> syncedFolders,
                                                    @NonNull List<MediaFolder> mediaFolders) {
@@ -153,6 +168,48 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         return result;
     }
 
+    /**
+     * Sorts list by SyncedFolderItems.
+     *
+     * @param syncFolderItemList SyncedFolderItems to sort
+     */
+    public static List<SyncedFolderItem> sortSyncedFolderItem(List<SyncedFolderItem> syncFolderItemList) {
+        Collections.sort(syncFolderItemList, new Comparator<SyncedFolderItem>() {
+            public int compare(SyncedFolderItem f1, SyncedFolderItem f2) {
+                if (f1 == null && f2 == null) {
+                    return 0;
+                } else if (f1 == null) {
+                    return -1;
+                } else if (f2 == null) {
+                    return 1;
+                } else if (f1.isEnabled() && f2.isEnabled()) {
+                    return f1.getFolderName().compareTo(f2.getFolderName());
+                } else if (f1.isEnabled()) {
+                    return -1;
+                } else if (f2.isEnabled()) {
+                    return 1;
+                } else if (f1.getFolderName() == null && f2.getFolderName() == null) {
+                    return 0;
+                } else if (f1.getFolderName() == null) {
+                    return -1;
+                } else if (f2.getFolderName() == null) {
+                    return 1;
+                } else {
+                    return f1.getFolderName().compareTo(f2.getFolderName());
+                }
+            }
+        });
+
+        return syncFolderItemList;
+    }
+
+    /**
+     * creates a SyncedFolderItem merging a SyncedFolder and MediaFolder object instance.
+     *
+     * @param syncedFolder the synced folder object
+     * @param mediaFolder  the media folder object
+     * @return the created SyncedFolderItem
+     */
     @NonNull
     private SyncedFolderItem createSyncedFolder(@NonNull SyncedFolder syncedFolder, @NonNull MediaFolder mediaFolder) {
         return new SyncedFolderItem(
@@ -170,6 +227,12 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
                 mediaFolder.numberOfFiles);
     }
 
+    /**
+     * creates a SyncedFolderItem based on a MediaFolder object instance.
+     *
+     * @param mediaFolder the media folder object
+     * @return the created SyncedFolderItem
+     */
     @NonNull
     private SyncedFolderItem createSyncedFolderFromMediaFolder(@NonNull MediaFolder mediaFolder) {
         return new SyncedFolderItem(
@@ -187,6 +250,12 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
                 mediaFolder.numberOfFiles);
     }
 
+    /**
+     * creates a lookup map for a list of given synced folders with their local path as the key.
+     *
+     * @param syncFolders list of synced folders
+     * @return the lookup map for synced folders
+     */
     @NonNull
     private Map<String, SyncedFolder> createSyncedFoldersMap(List<SyncedFolder> syncFolders) {
         Map<String, SyncedFolder> result = new HashMap<>();
@@ -198,6 +267,11 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         return result;
     }
 
+    /**
+     * show/hide recycler view list or the empty message / progress info.
+     *
+     * @param shown flag if list should be shown
+     */
     private void setListShown(boolean shown) {
         if (mRecyclerView != null) {
             mRecyclerView.setVisibility(shown ? View.VISIBLE : View.GONE);