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

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

Merge "Add Feature Flag support." into arc-apps

parents 8c1d15d4 98f8c5f5
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -19,9 +19,20 @@
    <string name="trusted_quick_viewer_package" translatable="false"></string>

    <bool name="show_documents_root">false</bool>
    <bool name="enable_archive_creation">false</bool>

    <!-- Indicates if search view is taking the whole toolbar space. On larger
         layouts we reduce this to an input-box adjacent to menu actions. -->
    <bool name="full_bar_search_view">true</bool>

    <!--
        New features must be added behind a boolean flag prefixed w/ "feature_".
    -->
    <bool name="feature_archive_creation">false</bool>
    <bool name="feature_remote_actions">true</bool>
    <bool name="feature_content_paging">true</bool>
    <bool name="feature_folders_in_search_results">true</bool>
    <bool name="feature_system_keyboard_navigation">true</bool>
    <bool name="feature_launch_to_document">true</bool>
    <bool name="feature_content_refresh">true</bool>
    <bool name="feature_virtual_files_sharing">true</bool>
</resources>
+9 −4
Original line number Diff line number Diff line
@@ -32,11 +32,11 @@ import android.view.DragEvent;

import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.LoadDocStackTask.LoadDocStackCallback;
import com.android.documentsui.archives.ArchivesProvider;
import com.android.documentsui.base.BooleanConsumer;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.Lookup;
import com.android.documentsui.base.Providers;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
@@ -130,8 +130,13 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>

    @Override
    public void refreshDocument(DocumentInfo doc, BooleanConsumer callback) {
        RefreshTask task = new RefreshTask(mState, doc, REFRESH_SPINNER_TIMEOUT,
                mActivity.getApplicationContext(), mActivity::isDestroyed,
        RefreshTask task = new RefreshTask(
                mInjector.features,
                mState,
                doc,
                REFRESH_SPINNER_TIMEOUT,
                mActivity.getApplicationContext(),
                mActivity::isDestroyed,
                callback);
        task.executeOnExecutor(mExecutors.lookup(doc == null ? null : doc.authority));
    }
@@ -343,7 +348,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>

    protected final boolean launchToDocument(Uri uri) {
        // We don't support launching to a document in an archive.
        if (!ArchivesProvider.AUTHORITY.equals(uri.getAuthority())) {
        if (!Providers.isArchiveUri(uri)) {
            loadDocument(uri, this::onStackLoaded);
            return true;
        }
+14 −4
Original line number Diff line number Diff line
@@ -16,10 +16,13 @@

package com.android.documentsui;

import static com.android.documentsui.base.Shared.VERBOSE;

import android.content.AsyncTaskLoader;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
@@ -36,7 +39,6 @@ import com.android.documentsui.base.DebugFlags;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.FilteringCursorWrapper;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.roots.RootCursorWrapper;
import com.android.documentsui.sorting.SortModel;

@@ -100,7 +102,8 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
            }
            result.client = client;

            if (Shared.ENABLE_OMC_API_FEATURES) {
            Resources resources = getContext().getResources();
            if (resources.getBoolean(R.bool.feature_content_paging)) {
                Bundle queryArgs = new Bundle();
                mModel.addQuerySortArgs(queryArgs);

@@ -122,12 +125,19 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {

            cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1);

            if (mSearchMode && !Shared.ENABLE_OMC_API_FEATURES) {
            if (mSearchMode && !resources.getBoolean(R.bool.feature_folders_in_search_results)) {
                // There is no findDocumentPath API. Enable filtering on folders in search mode.
                cursor = new FilteringCursorWrapper(cursor, null, SEARCH_REJECT_MIMES);
            }

            // TODO: When API tweaks have landed, use ContentResolver.EXTRA_HONORED_ARGS
            // instead of checking directly for ContentResolver.QUERY_ARG_SORT_COLUMNS (won't work)
            if (resources.getBoolean(R.bool.feature_content_paging)
                        && cursor.getExtras().containsKey(ContentResolver.QUERY_ARG_SORT_COLUMNS)) {
                if (VERBOSE) Log.d(TAG, "Skipping sort of pre-sorted cursor. Booya!");
            } else {
                cursor = mModel.sortCursor(cursor);
            }
            result.cursor = cursor;
        } catch (Exception e) {
            Log.w(TAG, "Failed to query", e);
+6 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.documentsui;

import static com.android.documentsui.base.DocumentInfo.getCursorString;
import static com.android.documentsui.base.Shared.DEBUG;
import static com.android.internal.util.Preconditions.checkNotNull;

import android.annotation.ColorRes;
import android.annotation.Nullable;
@@ -41,8 +42,8 @@ import android.widget.TextView;

import com.android.documentsui.base.EventListener;
import com.android.documentsui.base.Events;
import com.android.documentsui.base.Features;
import com.android.documentsui.base.Procedure;
import com.android.documentsui.base.Shared;
import com.android.documentsui.dirlist.DocumentHolder;
import com.android.documentsui.dirlist.DocumentsAdapter;
import com.android.documentsui.dirlist.FocusHandler;
@@ -60,6 +61,7 @@ public final class FocusManager implements FocusHandler {

    private final ContentScope mScope = new ContentScope();

    private final Features mFeatures;
    private final SelectionManager mSelectionMgr;
    private final DrawerController mDrawer;
    private final Procedure mRootsFocuser;
@@ -68,11 +70,13 @@ public final class FocusManager implements FocusHandler {
    private boolean mNavDrawerHasFocus;

    public FocusManager(
            Features features,
            SelectionManager selectionMgr,
            DrawerController drawer,
            Procedure rootsFocuser,
            @ColorRes int color) {

        mFeatures = checkNotNull(features);
        mSelectionMgr = selectionMgr;
        mDrawer = drawer;
        mRootsFocuser = rootsFocuser;
@@ -84,7 +88,7 @@ public final class FocusManager implements FocusHandler {
    public boolean advanceFocusArea() {
        // This should only be called in pre-O devices.
        // O has built-in keyboard navigation support.
        assert(!Shared.ENABLE_OMC_API_FEATURES);
        assert(!mFeatures.isSystemKeyboardNavigationEnabled());
        boolean focusChanged = false;
        if (mNavDrawerHasFocus) {
            mDrawer.setOpen(false);
+7 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.view.View;

import com.android.documentsui.MenuManager.SelectionDetails;
import com.android.documentsui.base.EventHandler;
import com.android.documentsui.base.Features;
import com.android.documentsui.dirlist.DocumentsAdapter;
import com.android.documentsui.dirlist.Model;
import com.android.documentsui.prefs.ScopedPreferences;
@@ -41,6 +42,7 @@ import java.lang.annotation.Target;
 */
public class Injector<T extends ActionHandler> {

    public final Features features;
    public final ActivityConfig config;
    public final ScopedPreferences prefs;
    public final MessageBuilder messages;
@@ -60,21 +62,24 @@ public class Injector<T extends ActionHandler> {
    @ContentScoped
    public SelectionManager selectionMgr;

    private final Model mModel = new Model();
    private DocumentsAdapter mAdapter;
    private final Model mModel;

    // must be initialized before calling super.onCreate because prefs
    // are used in State initialization.
    public Injector(
            Features features,
            ActivityConfig config,
            ScopedPreferences prefs,
            MessageBuilder messages,
            DialogController dialogs) {

        this.features = features;
        this.config = config;
        this.prefs = prefs;
        this.messages = messages;
        this.dialogs = dialogs;

        mModel = new Model(this.features);
    }

    public Model getModel() {
Loading