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

Commit e07c7730 authored by Austin Kolander's avatar Austin Kolander
Browse files

Add support for opening file in owning application.

This is a future feature not visible to the user yet.

Bug: 62622099
Test: InspectorControllerTest
Change-Id: Iadf79914afd099070003d9d159a2ebcc3aec7262
parent 8db11bf5
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -16,3 +16,7 @@
-keep public class android.support.v4.view.accessibility.AccessibilityNodeInfoCompat {
   public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain();
}

-keepclassmembers public class com.android.documentsui.inspector.InspectorController {
    *;
}
 No newline at end of file
+9 −7
Original line number Diff line number Diff line
@@ -25,11 +25,12 @@ import android.widget.TextView;

import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.R;
import java.util.function.Consumer;

/**
 * Organizes and Displays the basic details about a file
 */
public class DetailsView extends LinearLayout {
public class DetailsView extends LinearLayout implements Consumer<DocumentInfo> {

    private final LayoutInflater mInflater;

@@ -46,12 +47,6 @@ public class DetailsView extends LinearLayout {
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void update(DocumentInfo info) {
        addRow(R.string.sort_dimension_file_type, info.mimeType);
        addRow(R.string.sort_dimension_size, formatSize(info.size));
        addRow(R.string.sort_dimension_date, String.valueOf(info.lastModified));
    }

    private void addRow(@StringRes int StringId, String value) {
        View row = mInflater.inflate(R.layout.table_row, null);
        TextView title = (TextView) row.findViewById(R.id.key);
@@ -80,4 +75,11 @@ public class DetailsView extends LinearLayout {
        }
        return docSize;
    }

    @Override
    public void accept(DocumentInfo info) {
        addRow(R.string.sort_dimension_file_type, info.mimeType);
        addRow(R.string.sort_dimension_size, formatSize(info.size));
        addRow(R.string.sort_dimension_date, String.valueOf(info.lastModified));
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import com.android.documentsui.R;
import com.android.documentsui.inspector.InspectorController.Loader;

@@ -52,7 +51,7 @@ public class DocumentInspectorFragment extends Fragment {
                container, false);
        mHeader = (HeaderView) mView.findViewById(R.id.inspector_header_view);
        mDetails = (DetailsView) mView.findViewById(R.id.inspector_details_view);
        mController = new InspectorController(loader, mView);
        mController = new InspectorController(getActivity(), loader, mView);
        return mView;
    }

+4 −2
Original line number Diff line number Diff line
@@ -24,11 +24,12 @@ import android.widget.TextView;

import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.R;
import java.util.function.Consumer;

/**
 * Organizes and displays the title and thumbnail for a given document
 */
public class HeaderView extends RelativeLayout {
public class HeaderView extends RelativeLayout implements Consumer<DocumentInfo> {

    private View mHeader;
    private TextView mTitle;
@@ -49,7 +50,8 @@ public class HeaderView extends RelativeLayout {
        mTitle = (TextView) mHeader.findViewById(R.id.inspector_file_title);
    }

    public void update(DocumentInfo info) {
    @Override
    public void accept(DocumentInfo info) {
        mTitle.setText(info.displayName);
        this.addView(mHeader);
    }
+49 −17
Original line number Diff line number Diff line
@@ -15,41 +15,59 @@
 */
package com.android.documentsui.inspector;

import static android.provider.DocumentsContract.Document.FLAG_SUPPORTS_SETTINGS;
import static com.android.internal.util.Preconditions.checkArgument;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.widget.LinearLayout;

import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.internal.util.Preconditions;
import com.android.documentsui.roots.ProvidersAccess;
import java.util.function.Consumer;

import com.android.documentsui.R;
/**
 * A controller that coordinates retrieving document information and sending it to the view.
 */
public final class InspectorController {

    private final Loader mLoader;
    private @Nullable LinearLayout mLayout;
    private @Nullable HeaderView mHeader;
    private @Nullable DetailsView mDetails;
    private final Consumer<DocumentInfo> mHeader;
    private final Consumer<DocumentInfo> mDetails;
    private final Context mContext;
    private final ProvidersAccess mProviders;

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

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

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

    public InspectorController(Loader loader, LinearLayout layout) {
        checkArgument(loader != null);
        checkArgument(layout != null);
        mLoader = loader;
        mLayout = layout;
        mHeader = (HeaderView) mLayout.findViewById(R.id.inspector_header_view);
        mDetails = (DetailsView) mLayout.findViewById(R.id.inspector_details_view);
    public InspectorController(Context context, Loader loader, LinearLayout layout) {

        this(context,
                loader,
                DocumentsApplication.getProvidersCache (context),
                (HeaderView) layout.findViewById(R.id.inspector_header_view),
                (DetailsView) layout.findViewById(R.id.inspector_details_view));
    }

    public void reset() {
@@ -68,8 +86,22 @@ public final class InspectorController {
        if (docInfo == null) {
            return;
        }
        mHeader.update(docInfo);
        mDetails.update(docInfo);
        mHeader.accept(docInfo);
        mDetails.accept(docInfo);
    }

    /**
     * Shows the selected document in it's content provider.
     *
     * @param DocumentInfo whose flag FLAG_SUPPORTS_SETTINGS is set.
     */
    public void showInProvider(Uri uri) {

        Intent intent = new Intent(DocumentsContract.ACTION_DOCUMENT_SETTINGS);
        intent.setPackage(mProviders.getPackageName(uri.getAuthority()));
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setData(uri);
        mContext.startActivity(intent);
    }

    /**
Loading