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

Commit 38a72519 authored by Austin Kolander's avatar Austin Kolander
Browse files

Displays error message to user when properties fail to load.

Bug: 62661253
Test: InspectorControllerTest
Change-Id: I9e4281cff334385e5c4a6f34b4e6e44577a49ebc
parent 9126fa8f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -160,6 +160,9 @@
    <!-- Toast shown when some of the selected documents failed to be deleted [CHAR LIMIT=48] -->
    <string name="toast_failed_delete">Unable to delete some documents</string>

    <!-- Toast shown when a files document info fails to load-->
    <string name="file_inspector_load_error">Properties could not be loaded</string>

    <!-- Title of dialog when prompting user to select an app to share documents with [CHAR LIMIT=32] -->
    <string name="share_via">Share via</string>

+0 −1
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static com.android.internal.util.Preconditions.checkArgument;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+22 −9
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.documentsui.inspector;
import static android.provider.DocumentsContract.Document.FLAG_SUPPORTS_SETTINGS;
import static com.android.internal.util.Preconditions.checkArgument;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
@@ -29,6 +30,7 @@ import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.roots.ProvidersAccess;
import com.android.documentsui.ui.Snackbars;
import java.util.function.Consumer;
/**
 * A controller that coordinates retrieving document information and sending it to the view.
@@ -40,34 +42,42 @@ public final class InspectorController {
    private final Consumer<DocumentInfo> mDetails;
    private final Context mContext;
    private final ProvidersAccess mProviders;
    private final Runnable mShowSnackbar;

    /**
     * InspectorControllerTest relies on this controller.
     */
    @VisibleForTesting
    public InspectorController(Context context, Loader loader, ProvidersAccess providers,
            Consumer<DocumentInfo> header, Consumer<DocumentInfo> details) {
            Consumer<DocumentInfo> header, Consumer<DocumentInfo> details, Runnable showSnackbar) {

        checkArgument(context != null);
        checkArgument(loader != null);
        checkArgument(providers != null);
        checkArgument(header != null);
        checkArgument(details != null);
        checkArgument(showSnackbar != null);

        mContext = context;
        mLoader = loader;
        mProviders = providers;
        mHeader = header;
        mDetails = details;
        mShowSnackbar = showSnackbar;
    }

    public InspectorController(Context context, Loader loader, LinearLayout layout) {
    public InspectorController(Activity activity, Loader loader, LinearLayout layout) {

        this(context,
        this(activity,
                loader,
                DocumentsApplication.getProvidersCache (context),
                DocumentsApplication.getProvidersCache (activity),
                (HeaderView) layout.findViewById(R.id.inspector_header_view),
                (DetailsView) layout.findViewById(R.id.inspector_details_view));
                (DetailsView) layout.findViewById(R.id.inspector_details_view),
                () -> {
                    // using a runnable to support unit testing this feature.
                    Snackbars.showInspectorError(activity);
                }
            );
    }

    public void reset() {
@@ -82,13 +92,16 @@ public final class InspectorController {
     * Updates the view.
     */
    @Nullable
    private void updateView(@Nullable DocumentInfo docInfo) {
    public void updateView(@Nullable DocumentInfo docInfo) {

        if (docInfo == null) {
            return;
            mShowSnackbar.run();
        }
        else {
            mHeader.accept(docInfo);
            mDetails.accept(docInfo);
        }
    }

    /**
     * Shows the selected document in it's content provider.
+7 −0
Original line number Diff line number Diff line
@@ -72,6 +72,13 @@ public final class Snackbars {
        makeSnackbar(activity, R.string.rename_error, Snackbar.LENGTH_SHORT).show();
    }

    public static final void showInspectorError(Activity activity) {

        //Document Inspector uses a different view from other files app activities.
        final View view = activity.findViewById(R.id.fragment_container);
        Snackbar.make(view, R.string.file_inspector_load_error, Snackbar.LENGTH_INDEFINITE).show();
    }

    public static final void showCustomTextWithImage(Activity activity, String text, int imageRes) {
        Snackbar snackbar = makeSnackbar(activity, text, Snackbar.LENGTH_SHORT);
        View snackbarLayout = snackbar.getView();
+5 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.documentsui.testing;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.concurrent.CompletableFuture;
@@ -54,6 +55,10 @@ public class TestPredicate<T> implements Predicate<T> {
        assertTrue(mCalled);
    }

    public void assertNotCalled() {
        assertFalse(mCalled);
    }

    public void nextReturn(boolean value) {
        mNextReturnValue = value;
    }
Loading