Android Open Source - EbookExplorer Folder List Comparator






From Project

Back to project page EbookExplorer.

License

The source code is released under:

Apache License

If you think the Android project EbookExplorer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.jiahaoliuliu.ebookexplorer.util;
//from   w  ww .j a  v a 2 s.c  o  m
import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;

import com.dropbox.sync.android.DbxFileInfo;

/**
 * Comparator providing a reasonable sort order for displaying folder listings to
 * a user.  This comparator groups folders together, and properly deals with
 * international characters in paths.  This comparator will give a predictable
 * sort order for file info from multiple folders, but may not provide the ideal
 * user-displayed sort order for such a case.
 */
public class FolderListComparator implements Comparator<DbxFileInfo> {
  // The sorter which indicates if it use the name to sort or it uses the date to sort
    private final boolean isNameFirst;
    private final boolean isAscending;

    /**
     * Gets a comparator whose sort order places name before date.
     * @param ascending whether the sort order should be ascending,
     *                  vs. descending (reversed).
     */
    public static FolderListComparator getNameFirst(boolean ascending) {
        return new FolderListComparator(true, ascending);
    }

    /**
     * Gets a comparator whose sort order places name before date.
     * @param ascending whether the sort order should be ascending,
     *                  vs. descending (reversed).
     */
    public static FolderListComparator getDateFirst(boolean ascending) {
        return new FolderListComparator(false, ascending);
    }

    private FolderListComparator(boolean nameFirst, boolean ascending) {
        isNameFirst = nameFirst;
        isAscending = ascending;
    }

    @Override
    public int compare(DbxFileInfo lhs, DbxFileInfo rhs) {
        int rawCmp = rawCompare(lhs, rhs);
        return isAscending ? rawCmp : -rawCmp;
    }

    int rawCompare(DbxFileInfo lhs, DbxFileInfo rhs) {
        // Folders are always grouped together, Windows-style.
        if (lhs.isFolder != rhs.isFolder) {
            return lhs.isFolder ? -1 : 1;
        }

        // Name and date are next, in the configured order.
        if (isNameFirst) {
            int cmp = comparePaths(lhs, rhs);
            if (0 != cmp) {
                return cmp;
            }
            cmp = compareDates(lhs, rhs);
            if (0 != cmp) {
                return cmp;
            }
        } else {
            int cmp = compareDates(lhs, rhs);
            if (0 != cmp) {
                return cmp;
            }
            cmp = comparePaths(lhs, rhs);
            if (0 != cmp) {
                return cmp;
            }
        }

        // Use size as final qualifier, though names should be unique in a real
        // folder listing.
        long longcmp = lhs.size - rhs.size;
        if (0 != longcmp) {
            return longcmp < 0 ? -1 : 1;
        }

        return 0;
    }

    private int comparePaths(DbxFileInfo lhs, DbxFileInfo rhs) {
        Collator c = Collator.getInstance(Locale.getDefault());
        c.setStrength(Collator.SECONDARY); // Case-insensitive

        // TODO: If we want a good ordering of multi-folder listings, we
        // may need to do comparison on a per-path-element basis, otherwise
        // files can sort unpredictably with respect to subfolders due to the
        // ordering of characters with respect to /.  This is good enough for
        // the listing of a single folder.
        // TODO: Improve it
        return c.compare(lhs.toString(), rhs.toString());
    }

    private int compareDates(DbxFileInfo lhs, DbxFileInfo rhs) {
        return lhs.modifiedTime.compareTo(rhs.modifiedTime);
    }
}




Java Source Code List

android.support.v4.app.Watson.java
com.actionbarsherlock.ActionBarSherlock.java
com.actionbarsherlock.app.ActionBar.java
com.actionbarsherlock.app.SherlockActivity.java
com.actionbarsherlock.app.SherlockDialogFragment.java
com.actionbarsherlock.app.SherlockExpandableListActivity.java
com.actionbarsherlock.app.SherlockFragmentActivity.java
com.actionbarsherlock.app.SherlockFragment.java
com.actionbarsherlock.app.SherlockListActivity.java
com.actionbarsherlock.app.SherlockListFragment.java
com.actionbarsherlock.app.SherlockPreferenceActivity.java
com.actionbarsherlock.internal.ActionBarSherlockCompat.java
com.actionbarsherlock.internal.ActionBarSherlockNative.java
com.actionbarsherlock.internal.ResourcesCompat.java
com.actionbarsherlock.internal.app.ActionBarImpl.java
com.actionbarsherlock.internal.app.ActionBarWrapper.java
com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorListenerAdapter.java
com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorSet.java
com.actionbarsherlock.internal.nineoldandroids.animation.Animator.java
com.actionbarsherlock.internal.nineoldandroids.animation.FloatEvaluator.java
com.actionbarsherlock.internal.nineoldandroids.animation.FloatKeyframeSet.java
com.actionbarsherlock.internal.nineoldandroids.animation.IntEvaluator.java
com.actionbarsherlock.internal.nineoldandroids.animation.IntKeyframeSet.java
com.actionbarsherlock.internal.nineoldandroids.animation.KeyframeSet.java
com.actionbarsherlock.internal.nineoldandroids.animation.Keyframe.java
com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator.java
com.actionbarsherlock.internal.nineoldandroids.animation.PropertyValuesHolder.java
com.actionbarsherlock.internal.nineoldandroids.animation.TypeEvaluator.java
com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.java
com.actionbarsherlock.internal.nineoldandroids.view.NineViewGroup.java
com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy.java
com.actionbarsherlock.internal.nineoldandroids.widget.NineFrameLayout.java
com.actionbarsherlock.internal.nineoldandroids.widget.NineHorizontalScrollView.java
com.actionbarsherlock.internal.nineoldandroids.widget.NineLinearLayout.java
com.actionbarsherlock.internal.view.ActionProviderWrapper.java
com.actionbarsherlock.internal.view.StandaloneActionMode.java
com.actionbarsherlock.internal.view.View_HasStateListenerSupport.java
com.actionbarsherlock.internal.view.View_OnAttachStateChangeListener.java
com.actionbarsherlock.internal.view.menu.ActionMenuItemView.java
com.actionbarsherlock.internal.view.menu.ActionMenuItem.java
com.actionbarsherlock.internal.view.menu.ActionMenuPresenter.java
com.actionbarsherlock.internal.view.menu.ActionMenuView.java
com.actionbarsherlock.internal.view.menu.ActionMenu.java
com.actionbarsherlock.internal.view.menu.BaseMenuPresenter.java
com.actionbarsherlock.internal.view.menu.ListMenuItemView.java
com.actionbarsherlock.internal.view.menu.MenuBuilder.java
com.actionbarsherlock.internal.view.menu.MenuItemImpl.java
com.actionbarsherlock.internal.view.menu.MenuItemWrapper.java
com.actionbarsherlock.internal.view.menu.MenuPopupHelper.java
com.actionbarsherlock.internal.view.menu.MenuPresenter.java
com.actionbarsherlock.internal.view.menu.MenuView.java
com.actionbarsherlock.internal.view.menu.MenuWrapper.java
com.actionbarsherlock.internal.view.menu.SubMenuBuilder.java
com.actionbarsherlock.internal.view.menu.SubMenuWrapper.java
com.actionbarsherlock.internal.widget.AbsActionBarView.java
com.actionbarsherlock.internal.widget.ActionBarContainer.java
com.actionbarsherlock.internal.widget.ActionBarContextView.java
com.actionbarsherlock.internal.widget.ActionBarView.java
com.actionbarsherlock.internal.widget.CapitalizingButton.java
com.actionbarsherlock.internal.widget.CapitalizingTextView.java
com.actionbarsherlock.internal.widget.CollapsibleActionViewWrapper.java
com.actionbarsherlock.internal.widget.IcsAbsSpinner.java
com.actionbarsherlock.internal.widget.IcsAdapterView.java
com.actionbarsherlock.internal.widget.IcsColorDrawable.java
com.actionbarsherlock.internal.widget.IcsLinearLayout.java
com.actionbarsherlock.internal.widget.IcsListPopupWindow.java
com.actionbarsherlock.internal.widget.IcsProgressBar.java
com.actionbarsherlock.internal.widget.IcsSpinner.java
com.actionbarsherlock.internal.widget.IcsToast.java
com.actionbarsherlock.internal.widget.IcsView.java
com.actionbarsherlock.internal.widget.PopupWindowCompat.java
com.actionbarsherlock.internal.widget.ScrollingTabContainerView.java
com.actionbarsherlock.internal.widget.TabsLinearLayout.java
com.actionbarsherlock.view.ActionMode.java
com.actionbarsherlock.view.ActionProvider.java
com.actionbarsherlock.view.CollapsibleActionView.java
com.actionbarsherlock.view.MenuInflater.java
com.actionbarsherlock.view.MenuItem.java
com.actionbarsherlock.view.Menu.java
com.actionbarsherlock.view.SubMenu.java
com.actionbarsherlock.view.Window.java
com.actionbarsherlock.widget.ActivityChooserModel.java
com.actionbarsherlock.widget.ActivityChooserView.java
com.actionbarsherlock.widget.SearchView.java
com.actionbarsherlock.widget.ShareActionProvider.java
com.actionbarsherlock.widget.SuggestionsAdapter.java
com.jiahaoliuliu.ebookexplorer.EbookDetailsActivity.java
com.jiahaoliuliu.ebookexplorer.FolderAdapter.java
com.jiahaoliuliu.ebookexplorer.MainActivity.java
com.jiahaoliuliu.ebookexplorer.util.FolderListComparator.java
com.jiahaoliuliu.ebookexplorer.util.FolderLoader.java