Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 19b0d5a0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[multi-part] Enable bidrectional sorting" into nyc-andromeda-dev

parents 396945a8 11d23483
Loading
Loading
Loading
Loading
+1 −9
Original line number Diff line number Diff line
@@ -63,15 +63,7 @@
            android:icon="@drawable/ic_menu_sortby"
            android:showAsAction="ifRoom">
            <menu>
                <item
                    android:id="@+id/menu_sort_name"
                    android:title="@string/sort_name" />
                <item
                    android:id="@+id/menu_sort_date"
                    android:title="@string/sort_date" />
                <item
                    android:id="@+id/menu_sort_size"
                    android:title="@string/sort_size" />
                <!-- A submenu placeholder for SortMenuController to add menu item -->
            </menu>
        </item>
        <item
+8 −12
Original line number Diff line number Diff line
@@ -85,21 +85,17 @@
    <string name="button_dismiss">Dismiss</string>
    <string name="button_retry">Try Again</string>

    <!-- Mode that sorts documents by their display name alphabetically [CHAR LIMIT=24] -->
    <string name="sort_name">By name</string>
    <!-- Mode that sorts documents by their last modified time in descending order; most recent first [CHAR LIMIT=24] -->
    <string name="sort_date">By date modified</string>
    <!-- Mode that sorts documents by their file size in descending order; largest first [CHAR LIMIT=24] -->
    <string name="sort_size">By size</string>
    <!-- A phrase to indicate which dimension items should be sorted by, such as By Name, By Size etc. [CHAR_LIMIT=24] -->
    <string name="sort_phrase">By <xliff:g id="dimension" example="Name">%1$s</xliff:g></string>

    <!-- Table header for file name [CHAR_LIMIT=24] -->
    <string name="column_name">Name</string>
    <string name="sort_dimension_name">Name</string>
    <!-- Table header for metadata of downloaded files, such as download source and progress. [CHAR_LIMIT=24] -->
    <string name="column_summary">Summary</string>
    <!-- Table header for last modified time. [CHAR_LIMIT=24] -->
    <string name="column_date">Modified</string>
    <!-- Table header for file size. [CHAR_LIMIT=24] -->
    <string name="column_size">Size</string>
    <string name="sort_dimension_summary">Summary</string>
    <!-- Table header for last modified time. [CHAR_LIMIT=12] -->
    <string name="sort_dimension_date">Modified</string>
    <!-- Table header for file size. [CHAR_LIMIT=12] -->
    <string name="sort_dimension_size">Size</string>

    <!-- content description to describe ascending sorting used with upward arrow in table header. -->
    <string name="sort_direction_ascending">Ascending</string>
+8 −37
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ import com.android.documentsui.model.RootInfo;
import com.android.documentsui.services.FileOperationService;
import com.android.documentsui.services.FileOperations;
import com.android.documentsui.sorting.SortController;
import com.android.documentsui.sorting.SortMenuController;
import com.android.documentsui.sorting.SortModel;

import java.io.FileNotFoundException;
@@ -127,6 +128,7 @@ public abstract class BaseActivity extends Activity
    private long mStartTime;

    private SortController mSortController;
    private SortMenuController mSortMenuController;

    public abstract void onDocumentPicked(DocumentInfo doc, Model model);
    public abstract void onDocumentsPicked(List<DocumentInfo> docs);
@@ -171,7 +173,7 @@ public abstract class BaseActivity extends Activity
        getContentResolver().registerContentObserver(
                RootsCache.sNotificationUri, false, mRootsCacheObserver);

        mSearchManager = new SearchViewManager(this, icicle);
        mSearchManager = new SearchViewManager(this, icicle, mState.sortModel);

        DocumentsToolbar toolbar = (DocumentsToolbar) findViewById(R.id.toolbar);
        setActionBar(toolbar);
@@ -182,7 +184,9 @@ public abstract class BaseActivity extends Activity

        mNavigator = new NavigationViewManager(mDrawer, toolbar, mState, this, breadcrumb);

        mSortController = new SortController(mState.sortModel);
        mSortController = new SortController(mState.sortModel, this);
        mSortMenuController = new SortMenuController(getResources());
        mSortController.manage(mSortMenuController);

        // Base classes must update result in their onCreate.
        setResult(Activity.RESULT_CANCELED);
@@ -197,6 +201,8 @@ public abstract class BaseActivity extends Activity
        boolean fullBarSearch = getResources().getBoolean(R.bool.full_bar_search_view);
        mSearchManager.install((DocumentsToolbar) findViewById(R.id.toolbar), fullBarSearch);

        mSortMenuController.install(menu.findItem(R.id.menu_sort));

        return showMenu;
    }

@@ -307,18 +313,6 @@ public abstract class BaseActivity extends Activity
                // SearchViewManager listens for this directly.
                return false;

            case R.id.menu_sort_name:
                setUserSortOrder(State.SORT_ORDER_DISPLAY_NAME);
                return true;

            case R.id.menu_sort_date:
                setUserSortOrder(State.SORT_ORDER_LAST_MODIFIED);
                return true;

            case R.id.menu_sort_size:
                setUserSortOrder(State.SORT_ORDER_SIZE);
                return true;

            case R.id.menu_grid:
                setViewMode(State.MODE_GRID);
                return true;
@@ -529,29 +523,6 @@ public abstract class BaseActivity extends Activity
        invalidateOptionsMenu();
    }

    /**
     * Set state sort order based on explicit user action.
     */
    void setUserSortOrder(int sortOrder) {
        switch(sortOrder) {
            case State.SORT_ORDER_DISPLAY_NAME:
                Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_NAME);
                break;
            case State.SORT_ORDER_LAST_MODIFIED:
                Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_DATE);
                break;
            case State.SORT_ORDER_SIZE:
                Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_SIZE);
                break;
        }

        mState.userSortOrder = sortOrder;
        DirectoryFragment dir = getDirectoryFragment();
        if (dir != null) {
            dir.onSortOrderChanged();
        }
    }

    /**
     * Set mode based on explicit user action.
     */
+9 −43
Original line number Diff line number Diff line
@@ -16,12 +16,6 @@

package com.android.documentsui;

import static com.android.documentsui.Shared.DEBUG;
import static com.android.documentsui.Shared.TAG;
import static com.android.documentsui.State.SORT_ORDER_DISPLAY_NAME;
import static com.android.documentsui.State.SORT_ORDER_LAST_MODIFIED;
import static com.android.documentsui.State.SORT_ORDER_SIZE;

import android.content.AsyncTaskLoader;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
@@ -35,9 +29,9 @@ import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.util.Log;

import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.RootInfo;
import com.android.documentsui.sorting.SortModel;

import libcore.io.IoUtils;

@@ -45,6 +39,8 @@ import java.io.FileNotFoundException;

public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {

    private static final String TAG = "DirectoryLoader";

    private static final String[] SEARCH_REJECT_MIMES = new String[] { Document.MIME_TYPE_DIR };

    private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver();
@@ -52,7 +48,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
    private final int mType;
    private final RootInfo mRoot;
    private final Uri mUri;
    private final int mUserSortOrder;
    private final SortModel mModel;
    private final boolean mSearchMode;

    private DocumentInfo mDoc;
@@ -60,12 +56,12 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
    private DirectoryResult mResult;

    public DirectoryLoader(Context context, int type, RootInfo root, DocumentInfo doc, Uri uri,
            int userSortOrder, boolean inSearchMode) {
            SortModel model, boolean inSearchMode) {
        super(context, ProviderExecutor.forAuthority(root.authority));
        mType = type;
        mRoot = root;
        mUri = uri;
        mUserSortOrder = userSortOrder;
        mModel = model;
        mDoc = doc;
        mSearchMode = inSearchMode;
    }
@@ -84,6 +80,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {

        final DirectoryResult result = new DirectoryResult();
        result.doc = mDoc;
        result.sortModel = mModel;

        // Use default document when searching
        if (mSearchMode) {
@@ -98,30 +95,12 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
            }
        }

        if (mUserSortOrder != State.SORT_ORDER_UNKNOWN) {
            result.sortOrder = mUserSortOrder;
        } else {
            if ((mDoc.flags & Document.FLAG_DIR_PREFERS_LAST_MODIFIED) != 0) {
                result.sortOrder = State.SORT_ORDER_LAST_MODIFIED;
            } else {
                result.sortOrder = State.SORT_ORDER_DISPLAY_NAME;
            }
        }

        // Search always uses ranking from provider
        if (mSearchMode) {
            result.sortOrder = State.SORT_ORDER_UNKNOWN;
        }

        if (DEBUG)
                Log.d(TAG, "userSortOrder=" + mUserSortOrder + ", sortOrder=" + result.sortOrder);

        ContentProviderClient client = null;
        Cursor cursor = null;
        Cursor cursor;
        try {
            client = DocumentsApplication.acquireUnstableProviderOrThrow(resolver, authority);
            cursor = client.query(
                    mUri, null, null, null, getQuerySortOrder(result.sortOrder), mSignal);
                    mUri, null, null, null, mModel.getDocumentSortQuery(), mSignal);
            if (cursor == null) {
                throw new RemoteException("Provider returned null");
            }
@@ -211,17 +190,4 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {

        getContext().getContentResolver().unregisterContentObserver(mObserver);
    }

    public static String getQuerySortOrder(int sortOrder) {
        switch (sortOrder) {
            case SORT_ORDER_DISPLAY_NAME:
                return Document.COLUMN_DISPLAY_NAME + " ASC";
            case SORT_ORDER_LAST_MODIFIED:
                return Document.COLUMN_LAST_MODIFIED + " DESC";
            case SORT_ORDER_SIZE:
                return Document.COLUMN_SIZE + " DESC";
            default:
                return null;
        }
    }
}
+3 −5
Original line number Diff line number Diff line
@@ -16,13 +16,11 @@

package com.android.documentsui;

import static com.android.documentsui.State.MODE_UNKNOWN;
import static com.android.documentsui.State.SORT_ORDER_UNKNOWN;

import android.content.ContentProviderClient;
import android.database.Cursor;

import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.sorting.SortModel;

import libcore.io.IoUtils;

@@ -31,8 +29,7 @@ public class DirectoryResult implements AutoCloseable {
    public Cursor cursor;
    public Exception exception;
    public DocumentInfo doc;

    public int sortOrder = SORT_ORDER_UNKNOWN;
    public SortModel sortModel;

    @Override
    public void close() {
@@ -40,5 +37,6 @@ public class DirectoryResult implements AutoCloseable {
        ContentProviderClient.releaseQuietly(client);
        cursor = null;
        client = null;
        sortModel = null;
    }
}
Loading