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

Commit 6a0a5688 authored by Steve McKay's avatar Steve McKay
Browse files

Don't cache empty roots lists (usually).

Add support for logging cache via "dbg:dumpCache".
Bug: 33021109

Change-Id: I252698a5c9295f7792d92249a084cbfa4d20bb7f
parent f41e50fc
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import com.android.documentsui.base.State;
import com.android.documentsui.base.State.ViewMode;
import com.android.documentsui.dirlist.AnimationView;
import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.queries.DebugCommandProcessor;
import com.android.documentsui.queries.SearchViewManager;
import com.android.documentsui.queries.SearchViewManager.SearchManagerListener;
import com.android.documentsui.roots.GetRootDocumentTask;
@@ -167,7 +168,14 @@ public abstract class BaseActivity
                mNavigator.update();
            }
        };
        mSearchManager = new SearchViewManager(searchListener, icicle);

        // "Commands" are meta input for controlling system behavior.
        // We piggy back on search input as it is the only text input
        // area in the app. But the functionality is independent
        // of "regular" search query processing.
        DebugCommandProcessor dbgCommands = new DebugCommandProcessor();
        dbgCommands.add(new DebugCommandProcessor.DumpRootsCacheHandler(this));
        mSearchManager = new SearchViewManager(searchListener, dbgCommands, icicle);
        mSortController = SortController.create(this, mState.derivedMode, mState.sortModel);

        // Base classes must update result in their onCreate.
+0 −1
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ public class DocumentsApplication extends Application {
    private static final long PROVIDER_ANR_TIMEOUT = 20 * DateUtils.SECOND_IN_MILLIS;

    private RootsCache mRoots;

    private ThumbnailCache mThumbnailCache;
    private ClipStorage mClipStore;
    private DocumentClipper mClipper;
+6 −0
Original line number Diff line number Diff line
@@ -416,6 +416,12 @@ public class RootInfo implements Durable, Parcelable, Comparable<RootInfo> {
                + getUri();
    }

    public String toDebugString() {
        return (TextUtils.isEmpty(summary))
                ? "\"" + title + "\" @ " + getUri()
                : "\"" + title + " (" + summary + ")\" @ " + getUri();
    }

    public String getDirectoryString() {
        return !TextUtils.isEmpty(summary) ? summary : title;
    }
+24 −6
Original line number Diff line number Diff line
@@ -15,18 +15,20 @@
 */
package com.android.documentsui.queries;

import android.content.Context;
import android.os.Build;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;

import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.base.DebugFlags;
import com.android.documentsui.base.EventHandler;

import java.util.ArrayList;
import java.util.List;

final class DebugCommandProcessor implements EventHandler<String> {
public final class DebugCommandProcessor implements EventHandler<String> {

    @VisibleForTesting
    static final String COMMAND_PREFIX = "dbg:";
@@ -43,10 +45,9 @@ final class DebugCommandProcessor implements EventHandler<String> {
        }
    }

    @VisibleForTesting
    DebugCommandProcessor(EventHandler<String[]>... commands) {
        for (EventHandler<String[]> c : commands) {
            mCommands.add(c);
    public void add(EventHandler<String[]> handler) {
        if (Build.IS_DEBUGGABLE) {
            mCommands.add(handler);
        }
    }

@@ -59,7 +60,7 @@ final class DebugCommandProcessor implements EventHandler<String> {
                    return true;
                }
            }
            Log.d(SearchViewManager.TAG, "Unrecognized debug command: " + query);
            Log.d(TAG, "Unrecognized debug command: " + query);
        }
        return false;
    }
@@ -116,4 +117,21 @@ final class DebugCommandProcessor implements EventHandler<String> {
        }
        return Boolean.valueOf(val);
    }

    public static final class DumpRootsCacheHandler implements EventHandler<String[]> {
        private final Context mContext;

        public DumpRootsCacheHandler(Context context) {
            mContext = context;
        }

        @Override
        public boolean accept(String[] tokens) {
            if ("dumpCache".equals(tokens[0])) {
                DocumentsApplication.getRootsCache(mContext).logCache();
                return true;
            }
            return false;
        }
    }
}
+8 −8
Original line number Diff line number Diff line
@@ -44,12 +44,13 @@ public class SearchViewManager implements
        SearchView.OnCloseListener, OnQueryTextListener, OnClickListener, OnFocusChangeListener,
        OnActionExpandListener {

    static final String TAG = "SearchManager";
    private static final String TAG = "SearchManager";

    private final SearchManagerListener mListener;
    private final DebugCommandProcessor mCommandProcessor;

    private @Nullable String mCurrentSearch;
    private boolean mSearchExpanded;
    private String mCurrentSearch;
    private boolean mIgnoreNextClose;
    private boolean mFullBar;

@@ -59,16 +60,15 @@ public class SearchViewManager implements

    public SearchViewManager(
            SearchManagerListener listener,
            DebugCommandProcessor commandProcessor,
            @Nullable Bundle savedState) {

        assert (listener != null);
        assert (commandProcessor != null);

        mListener = listener;
        mCommandProcessor = commandProcessor;
        mCurrentSearch = savedState != null ? savedState.getString(Shared.EXTRA_QUERY) : null;

        // "Commands" are meta input for controlling system behavior.
        // We piggy back on search input as it is the only text input
        // area in the app. But the functionality is independent
        // of "regular" search query processing.
        mCommandProcessor = new DebugCommandProcessor();
    }

    public void install(DocumentsToolbar actionBar, boolean isFullBarSearch) {
Loading