diff options
author | 2017-07-12 18:46:09 -0700 | |
---|---|---|
committer | 2017-07-14 10:03:58 -0700 | |
commit | 3bbb0cb62f8c8b339e6a12cf85d3bf7b76e8808b (patch) | |
tree | 631a5eb3b65d62fce490594a4feb2b33efe2fae7 | |
parent | 7f5395425290f0234d28615fd8cce8fb4202e668 (diff) |
Improve debug info.
Add generic section title support to TableView.
Add debug section title.
Use sentence case for debug labels.
Add more debug values (like weblinkable!)
Minor padding layout tweaks.
Move Julian's sweet row update logic into base class, use that from Debug (solving a bug).
- exclude "web_linkable" support, since it wasn't landed in arc-apps.
Bug: 63635841, 63638300
Test: Build and view the goodness.
Change-Id: I8f66b4f75b886b366b4eeff65afe2ac104df45d1
(cherry picked from commit f433d20a7759775dfc848fdd50da2a3f01219a54)
20 files changed, 161 insertions, 83 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 04680a09c..9f0ad3a7e 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -57,7 +57,7 @@ </activity> <activity - android:name=".inspector.DocumentInspectorActivity" + android:name=".inspector.InspectorActivity" android:label="@string/menu_inspector" android:icon="@drawable/launcher_icon" android:theme="@style/DocumentsTheme"> diff --git a/res/layout/document_inspector_fragment.xml b/res/layout/document_inspector_fragment.xml index 82a2dabd4..5edb5e081 100644 --- a/res/layout/document_inspector_fragment.xml +++ b/res/layout/document_inspector_fragment.xml @@ -22,11 +22,13 @@ <LinearLayout android:orientation="vertical" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:paddingBottom="5dp"> <com.android.documentsui.inspector.HeaderView android:id="@+id/inspector_header_view" android:layout_width="match_parent" + android:paddingBottom="5dp" android:layout_height="@dimen/inspector_header_height" /> <com.android.documentsui.inspector.DetailsView @@ -58,4 +60,4 @@ android:layout_height="wrap_content" android:visibility="gone" /> </LinearLayout> -</ScrollView>
\ No newline at end of file +</ScrollView> diff --git a/res/layout/inspector_action_view.xml b/res/layout/inspector_action_view.xml index 0d08cbf0e..91418ae1c 100644 --- a/res/layout/inspector_action_view.xml +++ b/res/layout/inspector_action_view.xml @@ -14,36 +14,33 @@ limitations under the License. --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:paddingLeft="16dp" - android:paddingRight="16dp" android:layout_width="match_parent" android:layout_height="match_parent"> - <TextView - android:id="@+id/action_header" - android:layout_height="48dp" - android:layout_width="wrap_content" - android:fontFamily="sans-serif-medium" - android:textSize="14sp" - android:color="@color/material_subheader" - android:gravity="center_vertical"/> + <include + layout="@layout/inspector_section_title" + android:id="@+id/action_header" /> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/default_app_info" + android:paddingLeft="16dp" + android:paddingRight="16dp" android:layout_width="match_parent" android:layout_height="match_parent" - android:id="@+id/default_app_info" + android:paddingBottom="10dp" android:layout_below="@id/action_header"> <ImageView + android:id="@+id/app_icon" + android:paddingLeft="5dp" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:id="@+id/app_icon"/> + android:layout_height="wrap_content" /> <TextView + android:id="@+id/app_name" + android:paddingLeft="16dp" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:id="@+id/app_name" - android:paddingLeft="5dp" android:layout_toRightOf="@id/app_icon" android:layout_centerVertical="true"/> @@ -54,5 +51,7 @@ android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@null"/> + </RelativeLayout> -</RelativeLayout>
\ No newline at end of file + +</RelativeLayout> diff --git a/res/layout/inspector_section_title.xml b/res/layout/inspector_section_title.xml new file mode 100644 index 000000000..2804811da --- /dev/null +++ b/res/layout/inspector_section_title.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2017 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<TextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:paddingLeft="16dp" + android:layout_gravity="center_vertical" + android:fontFamily="sans-serif-medium" + android:textSize="14sp" + android:textColor="@color/inspector_section_title"> + +</TextView> diff --git a/res/layout/table_key_value_row.xml b/res/layout/table_key_value_row.xml index ff45cc13d..2bc8cf687 100644 --- a/res/layout/table_key_value_row.xml +++ b/res/layout/table_key_value_row.xml @@ -19,7 +19,8 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingTop="20dp" + android:paddingTop="10dp" + android:paddingBottom="10dp" android:paddingLeft="16dp"> <TextView diff --git a/res/values/colors.xml b/res/values/colors.xml index 9b2670e5e..ca66c5d2b 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -72,6 +72,6 @@ <color name="scroll_thumb">#ffbebebe</color> <color name="scroll_track">#fff0f0f0</color> - <color name="material_subheader">#757575</color> <color name="inspector_value">#ff939393</color> + <color name="inspector_section_title">#ff939393</color> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 482c29373..c45d32265 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -386,4 +386,8 @@ <!-- Button for continuing a file operation in background, eg. copying, moving or extracting. [CHAR LIMIT=48] --> <string name="continue_in_background">Continue in background</string> + + <!-- Title of inspector's debug info section. [CHAR LIMIT=48] --> + <string name="inspector_debug_section">Debug info (dev only)</string> + </resources> diff --git a/src/com/android/documentsui/base/DocumentInfo.java b/src/com/android/documentsui/base/DocumentInfo.java index c9c4d6621..c27e9c653 100644 --- a/src/com/android/documentsui/base/DocumentInfo.java +++ b/src/com/android/documentsui/base/DocumentInfo.java @@ -257,6 +257,14 @@ public class DocumentInfo implements Durable, Parcelable { return (flags & Document.FLAG_SUPPORTS_RENAME) != 0; } + public boolean isThumbnailSupported() { + return (flags & Document.FLAG_SUPPORTS_THUMBNAIL) != 0; + } + + public boolean isWeblinkSupported() { + return false; // web link support not back ported to arc-apps. + } + public boolean isArchive() { return ArchivesProvider.isSupportedArchiveType(mimeType); } diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java index 42bd76ad4..922f0c002 100644 --- a/src/com/android/documentsui/files/ActionHandler.java +++ b/src/com/android/documentsui/files/ActionHandler.java @@ -58,7 +58,7 @@ import com.android.documentsui.clipping.UrisSupplier; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.DocumentDetails; import com.android.documentsui.files.ActionHandler.Addons; -import com.android.documentsui.inspector.DocumentInspectorActivity; +import com.android.documentsui.inspector.InspectorActivity; import com.android.documentsui.queries.SearchViewManager; import com.android.documentsui.roots.ProvidersAccess; import com.android.documentsui.selection.Selection; @@ -677,11 +677,11 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa @Override public void showInspector(DocumentInfo doc) { Metrics.logUserAction(mActivity, Metrics.USER_ACTION_INSPECTOR); - Intent intent = new Intent(mActivity, DocumentInspectorActivity.class); + Intent intent = new Intent(mActivity, InspectorActivity.class); intent.putExtra( Shared.EXTRA_SHOW_DEBUG, mFeatures.isDebugSupportEnabled() - && DebugFlags.getDocumentDetailsEnabled()); + || DebugFlags.getDocumentDetailsEnabled()); intent.setData(doc.derivedUri); mActivity.startActivity(intent); } diff --git a/src/com/android/documentsui/inspector/DebugView.java b/src/com/android/documentsui/inspector/DebugView.java index c4e26d304..581e7542c 100644 --- a/src/com/android/documentsui/inspector/DebugView.java +++ b/src/com/android/documentsui/inspector/DebugView.java @@ -18,6 +18,7 @@ package com.android.documentsui.inspector; import android.content.Context; import android.util.AttributeSet; +import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; import java.util.function.Consumer; @@ -41,19 +42,25 @@ public class DebugView extends TableView implements Consumer<DocumentInfo> { @Override public void accept(DocumentInfo info) { - addRow("uri", info.derivedUri); - addRow("docid", info.documentId); - addRow("mimetype: ", info.mimeType); - addRow("container", info.isContainer()); - addRow("virtual", info.isVirtual()); - addRow("supports create", info.isCreateSupported()); - addRow("supports delete", info.isDeleteSupported()); - addRow("supports rename", info.isRenameSupported()); + setTitle(this, R.string.inspector_debug_section); + + put("Content uri", info.derivedUri); + put("Document id", info.documentId); + put("Mimetype: ", info.mimeType); + put("Is archive", info.isArchive()); + put("Is container", info.isContainer()); + put("Is partial", info.isPartial()); + put("Is virtual", info.isVirtual()); + put("Supports create", info.isCreateSupported()); + put("Supports delete", info.isDeleteSupported()); + put("Supports rename", info.isRenameSupported()); + put("Supports settings", info.isSettingsSupported()); + put("Supports thumbnail", info.isThumbnailSupported()); + put("Supports weblink", info.isWeblinkSupported()); + put("Supports write", info.isWriteSupported()); } - private void addRow(String key, Object value) { - KeyValueRow row = createKeyValueRow(this); - row.setKey(key); - row.setValue(String.valueOf(value)); + private void put(String key, Object value) { + put(key, String.valueOf(value)); } } diff --git a/src/com/android/documentsui/inspector/DetailsView.java b/src/com/android/documentsui/inspector/DetailsView.java index 2e07b170c..668a1cb8f 100644 --- a/src/com/android/documentsui/inspector/DetailsView.java +++ b/src/com/android/documentsui/inspector/DetailsView.java @@ -15,29 +15,23 @@ */ package com.android.documentsui.inspector; -import android.annotation.StringRes; import android.content.Context; import android.text.format.DateFormat; import android.text.format.Formatter; import android.util.AttributeSet; -import android.widget.TextView; import com.android.documentsui.DocumentsApplication; import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Lookup; -import java.util.HashMap; -import java.util.Map; import java.util.function.Consumer; /** - * Organizes and Displays the basic details about a file + * Displays the basic details about a file. */ public class DetailsView extends TableView implements Consumer<DocumentInfo> { - private final Map<Integer, KeyValueRow> rows = new HashMap(); - public DetailsView(Context context) { this(context, null); } @@ -50,35 +44,31 @@ public class DetailsView extends TableView implements Consumer<DocumentInfo> { super(context, attrs, defStyleAttr); } - private void setRow(@StringRes int keyId, String value) { - if(rows.containsKey(keyId)) { - rows.get(keyId).setValue(value); - } else { - KeyValueRow row = createKeyValueRow(this); - row.setKey(keyId); - row.setValue(value); - rows.put(keyId, row); - } - } - @Override public void accept(DocumentInfo info) { - final Lookup<String, String> fileTypeLookup - = DocumentsApplication.getFileTypeLookup(getContext()); - setRow(R.string.sort_dimension_file_type, fileTypeLookup.lookup(info.mimeType)); + + Lookup<String, String> fileTypeLookup = + DocumentsApplication.getFileTypeLookup(getContext()); + + put(R.string.sort_dimension_file_type, fileTypeLookup.lookup(info.mimeType)); + + // TODO: Each of these rows need to be removed if the condition is false and previously + // set. if (info.size > 0) { - setRow(R.string.sort_dimension_size, Formatter.formatFileSize(getContext(), info.size)); + put(R.string.sort_dimension_size, Formatter.formatFileSize(getContext(), info.size)); } + if (info.lastModified > 0) { - setRow(R.string.sort_dimension_date, + put(R.string.sort_dimension_date, DateFormat.getDateFormat(getContext()).format(info.lastModified)); } - if(info.numberOfChildren != -1) { - setRow(R.string.directory_children, String.valueOf(info.numberOfChildren)); + + if (info.numberOfChildren != -1) { + put(R.string.directory_children, String.valueOf(info.numberOfChildren)); } if (info.summary != null) { - setRow(R.string.sort_dimension_summary, info.summary); + put(R.string.sort_dimension_summary, info.summary); } } }
\ No newline at end of file diff --git a/src/com/android/documentsui/inspector/DocumentInspectorActivity.java b/src/com/android/documentsui/inspector/InspectorActivity.java index c8d01c01b..44af73580 100644 --- a/src/com/android/documentsui/inspector/DocumentInspectorActivity.java +++ b/src/com/android/documentsui/inspector/InspectorActivity.java @@ -18,18 +18,16 @@ package com.android.documentsui.inspector; import android.app.Activity; import android.app.FragmentManager; import android.content.Intent; -import android.net.Uri; import android.os.Bundle; import android.view.MenuItem; import android.view.Window; import android.widget.Toolbar; import com.android.documentsui.R; -import com.android.documentsui.base.Shared; -public class DocumentInspectorActivity extends Activity { +public class InspectorActivity extends Activity { - private DocumentInspectorFragment mFragment; + private InspectorFragment mFragment; @Override public void onCreate(Bundle savedInstanceState) { @@ -42,13 +40,13 @@ public class DocumentInspectorActivity extends Activity { getActionBar().setDisplayHomeAsUpEnabled(true); FragmentManager fragmentManager = getFragmentManager(); - mFragment = (DocumentInspectorFragment) fragmentManager.findFragmentById( + mFragment = (InspectorFragment) fragmentManager.findFragmentById( R.id.fragment_container); if (mFragment == null) { Intent intent = getIntent(); - mFragment = DocumentInspectorFragment.newInstance(intent); + mFragment = InspectorFragment.newInstance(intent); fragmentManager.beginTransaction() diff --git a/src/com/android/documentsui/inspector/DocumentInspectorFragment.java b/src/com/android/documentsui/inspector/InspectorFragment.java index 5e10cf761..ef7c3b1f4 100644 --- a/src/com/android/documentsui/inspector/DocumentInspectorFragment.java +++ b/src/com/android/documentsui/inspector/InspectorFragment.java @@ -33,7 +33,7 @@ import com.android.documentsui.inspector.InspectorController.Loader; /** * Displays the Properties view in Files. */ -public class DocumentInspectorFragment extends Fragment { +public class InspectorFragment extends Fragment { private static final String DOC_URI_ARG = "docUri"; private InspectorController mController; @@ -72,7 +72,7 @@ public class DocumentInspectorFragment extends Fragment { /** * Creates a fragment and sets a Uri as an argument. */ - public static DocumentInspectorFragment newInstance(Intent intent) { + public static InspectorFragment newInstance(Intent intent) { Uri uri = intent.getData(); boolean showDebug = intent.getBooleanExtra(Shared.EXTRA_SHOW_DEBUG, false); @@ -81,7 +81,7 @@ public class DocumentInspectorFragment extends Fragment { args.putParcelable(DOC_URI_ARG, uri); args.putBoolean(Shared.EXTRA_SHOW_DEBUG, showDebug); - DocumentInspectorFragment fragment = new DocumentInspectorFragment(); + InspectorFragment fragment = new InspectorFragment(); fragment.setArguments(args); return fragment; } diff --git a/src/com/android/documentsui/inspector/TableView.java b/src/com/android/documentsui/inspector/TableView.java index 96849730e..91c30d844 100644 --- a/src/com/android/documentsui/inspector/TableView.java +++ b/src/com/android/documentsui/inspector/TableView.java @@ -15,14 +15,22 @@ */ package com.android.documentsui.inspector; +import android.annotation.StringRes; import android.content.Context; +import android.content.res.Resources; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.ViewGroup; import android.widget.LinearLayout; +import android.widget.TextView; import com.android.documentsui.R; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + /** * Organizes and Displays the basic details about a file @@ -31,6 +39,10 @@ public class TableView extends LinearLayout { private final LayoutInflater mInflater; + private final Map<String, KeyValueRow> mRows = new HashMap<>(); + private final Resources mRes; + private @Nullable TextView mTitle; + public TableView(Context context) { this(context, null); } @@ -42,6 +54,15 @@ public class TableView extends LinearLayout { public TableView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + mRes = context.getResources(); + } + + protected void setTitle(ViewGroup parent, @StringRes int title) { + if (mTitle == null) { + mTitle = (TextView) mInflater.inflate(R.layout.inspector_section_title, null); + parent.addView(mTitle); + } + mTitle.setText(mContext.getResources().getString(title)); } protected KeyValueRow createKeyValueRow(ViewGroup parent) { @@ -49,4 +70,25 @@ public class TableView extends LinearLayout { parent.addView(row); return row; } + + /** + * Puts or updates an value in the table view. + */ + protected void put(@StringRes int keyId, String value) { + put(mRes.getString(keyId), value); + } + + /** + * Puts or updates an value in the table view. + */ + protected void put(String key, String value) { + if(mRows.containsKey(key)) { + mRows.get(key).setValue(value); + } else { + KeyValueRow row = createKeyValueRow(this); + row.setKey(key); + row.setValue(value); + mRows.put(key, row); + } + } } diff --git a/src/com/android/documentsui/inspector/actions/Action.java b/src/com/android/documentsui/inspector/actions/Action.java index 12f6c1efe..1b0b69379 100644 --- a/src/com/android/documentsui/inspector/actions/Action.java +++ b/src/com/android/documentsui/inspector/actions/Action.java @@ -22,6 +22,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.Drawable; + import com.android.documentsui.base.DocumentInfo; /** diff --git a/src/com/android/documentsui/inspector/actions/ActionView.java b/src/com/android/documentsui/inspector/actions/ActionView.java index 78a41fe66..485e2b1b6 100644 --- a/src/com/android/documentsui/inspector/actions/ActionView.java +++ b/src/com/android/documentsui/inspector/actions/ActionView.java @@ -24,6 +24,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; + import com.android.documentsui.R; import com.android.documentsui.inspector.InspectorController; @@ -33,7 +34,6 @@ import com.android.documentsui.inspector.InspectorController; */ public final class ActionView extends LinearLayout implements InspectorController.ActionDisplay { - private final Context mContext; private final TextView mHeader; private final ImageView mAppIcon; private final TextView mAppName; @@ -55,7 +55,6 @@ public final class ActionView extends LinearLayout implements InspectorControlle View view = inflater.inflate(R.layout.inspector_action_view, null); addView(view); - mContext = context; mHeader = (TextView) findViewById(R.id.action_header); mAppIcon = (ImageView) findViewById(R.id.app_icon); mAppName = (TextView) findViewById(R.id.app_name); diff --git a/src/com/android/documentsui/inspector/actions/ClearDefaultAppAction.java b/src/com/android/documentsui/inspector/actions/ClearDefaultAppAction.java index 62c8f9489..4c355d068 100644 --- a/src/com/android/documentsui/inspector/actions/ClearDefaultAppAction.java +++ b/src/com/android/documentsui/inspector/actions/ClearDefaultAppAction.java @@ -15,15 +15,14 @@ */ package com.android.documentsui.inspector.actions; -import android.annotation.Nullable; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.graphics.drawable.Drawable; -import android.net.Uri; + import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; + import java.util.List; /** diff --git a/src/com/android/documentsui/inspector/actions/ShowInProviderAction.java b/src/com/android/documentsui/inspector/actions/ShowInProviderAction.java index 50a2a1054..ed36f092f 100644 --- a/src/com/android/documentsui/inspector/actions/ShowInProviderAction.java +++ b/src/com/android/documentsui/inspector/actions/ShowInProviderAction.java @@ -17,10 +17,9 @@ package com.android.documentsui.inspector.actions; import static android.provider.DocumentsContract.Document.FLAG_SUPPORTS_SETTINGS; -import android.annotation.Nullable; import android.content.Context; import android.content.pm.PackageManager; -import android.graphics.drawable.Drawable; + import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.roots.ProvidersAccess; diff --git a/tests/functional/com/android/documentsui/FilesActivityUiTest.java b/tests/functional/com/android/documentsui/FilesActivityUiTest.java index 07f3417b7..87f3bac21 100644 --- a/tests/functional/com/android/documentsui/FilesActivityUiTest.java +++ b/tests/functional/com/android/documentsui/FilesActivityUiTest.java @@ -22,7 +22,7 @@ import android.os.RemoteException; import android.support.test.filters.LargeTest; import com.android.documentsui.files.FilesActivity; -import com.android.documentsui.inspector.DocumentInspectorActivity; +import com.android.documentsui.inspector.InspectorActivity; @LargeTest public class FilesActivityUiTest extends ActivityTest<FilesActivity> { @@ -116,7 +116,7 @@ public class FilesActivityUiTest extends ActivityTest<FilesActivity> { return; } Instrumentation.ActivityMonitor monitor = new Instrumentation.ActivityMonitor( - DocumentInspectorActivity.class.getName(), null, false); + InspectorActivity.class.getName(), null, false); bots.directory.selectDocument("file0.log"); bots.main.clickActionItem("Properties"); monitor.waitForActivityWithTimeout(TIMEOUT); diff --git a/tests/functional/com/android/documentsui/InspectorUiTest.java b/tests/functional/com/android/documentsui/InspectorUiTest.java index cdb9f60dd..724ba1d52 100644 --- a/tests/functional/com/android/documentsui/InspectorUiTest.java +++ b/tests/functional/com/android/documentsui/InspectorUiTest.java @@ -20,14 +20,14 @@ import android.net.Uri; import android.provider.DocumentsContract; import com.android.documentsui.bots.UiBot; -import com.android.documentsui.inspector.DocumentInspectorActivity; +import com.android.documentsui.inspector.InspectorActivity; -public class InspectorUiTest extends ActivityTest<DocumentInspectorActivity> { +public class InspectorUiTest extends ActivityTest<InspectorActivity> { private static final String TEST_DOC_NAME = "test.txt"; public InspectorUiTest() { - super(DocumentInspectorActivity.class); + super(InspectorActivity.class); } @Override |