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

Commit 8badb047 authored by Tony Huang's avatar Tony Huang Committed by Android (Google) Code Review
Browse files

Merge "Refactor LoadRootTask for backup behavior when root doesn't exist."

parents 1c7750af 957be8c3
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -482,13 +482,13 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA

    @Override
    public final void loadRoot(Uri uri) {
        new LoadRootTask<>(mActivity, mProviders, mState, uri)
        new LoadRootTask<>(mActivity, mProviders, uri, this::onRootLoaded)
                .executeOnExecutor(mExecutors.lookup(uri.getAuthority()));
    }

    @Override
    public final void loadFirstRoot(Uri uri) {
        new LoadFirstRootTask<>(mActivity, mProviders, mState, uri)
        new LoadFirstRootTask<>(mActivity, mProviders, uri, this::onRootLoaded)
                .executeOnExecutor(mExecutors.lookup(uri.getAuthority()));
    }

@@ -537,6 +537,14 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA
        }
    }

    private void onRootLoaded(@Nullable RootInfo root) {
        if (root != null) {
            mActivity.onRootPicked(root);
        } else {
            launchToDefaultLocation();
        }
    }

    protected abstract void launchToDefaultLocation();

    protected void restoreRootAndDirectory() {
+6 −3
Original line number Diff line number Diff line
@@ -21,15 +21,18 @@ import android.net.Uri;

import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;

import java.util.Collection;

public final class LoadFirstRootTask<T extends Activity & CommonAddons>
        extends LoadRootTask<T> {

    public LoadFirstRootTask(T activity, ProvidersAccess providers, State state, Uri rootUri) {
        super(activity, providers, state, rootUri);
    public LoadFirstRootTask(
            T activity,
            ProvidersAccess providers,
            Uri rootUri,
            LoadRootCallback callback) {
        super(activity, providers, rootUri, callback);
    }

    @Override
+22 −7
Original line number Diff line number Diff line
@@ -23,25 +23,29 @@ import android.net.Uri;
import android.provider.DocumentsContract;
import android.util.Log;

import androidx.annotation.Nullable;

import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.base.PairedTask;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;

public class LoadRootTask<T extends Activity & CommonAddons>
        extends PairedTask<T, Void, RootInfo> {
    private static final String TAG = "LoadRootTask";

    protected final ProvidersAccess mProviders;

    private final State mState;
    private final Uri mRootUri;
    private final LoadRootCallback mCallback;

    public LoadRootTask(T activity, ProvidersAccess providers, State state, Uri rootUri) {
    public LoadRootTask(
            T activity,
            ProvidersAccess providers,
            Uri rootUri,
            LoadRootCallback callback) {
        super(activity);
        mState = state;
        mProviders = providers;
        mRootUri = rootUri;
        mCallback = callback;
    }

    @Override
@@ -59,14 +63,25 @@ public class LoadRootTask<T extends Activity & CommonAddons>
            if (DEBUG) {
                Log.d(TAG, "Loaded root: " + root);
            }
            mOwner.onRootPicked(root);
        } else {
            Log.w(TAG, "Failed to find root: " + mRootUri);
            mOwner.finish();
        }

        mCallback.onRootLoaded(root);
    }

    protected String getRootId(Uri rootUri) {
        return DocumentsContract.getRootId(rootUri);
    }

    /**
     * Callback for task finished.
     */
    @FunctionalInterface
    public interface LoadRootCallback {
        /**
         * Return the RootInfo of input uri, null if the uri is invalid.
         */
        void onRootLoaded(@Nullable RootInfo root);
    }
}