summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dooper <dooper@google.com> 2017-06-02 10:32:00 -0700
committer Julian Mancini <dooper@google.com> 2017-06-06 10:10:51 -0700
commit3975fa2e90c0322ecf70f350422b83dabda58c5e (patch)
tree10e1b547c3d0b731294a82b9b00505bdd67ccff5
parent86ae0a1679aa2194c3637fc8eab3be6d43e94038 (diff)
Add menu to show properties, add feature flag.
Bug: 62293172 Test: upcoming Change-Id: Idb0de7ad2b41472fc7b0b762d88dda5f512d5ce2
-rw-r--r--res/menu/action_mode_menu.xml5
-rw-r--r--res/values/config.xml1
-rw-r--r--res/values/strings.xml2
-rw-r--r--src/com/android/documentsui/AbstractActionHandler.java5
-rw-r--r--src/com/android/documentsui/ActionHandler.java4
-rw-r--r--src/com/android/documentsui/ActivityConfig.java2
-rw-r--r--src/com/android/documentsui/MenuManager.java6
-rw-r--r--src/com/android/documentsui/Metrics.java1
-rw-r--r--src/com/android/documentsui/base/Features.java6
-rw-r--r--src/com/android/documentsui/dirlist/DirectoryFragment.java7
-rw-r--r--src/com/android/documentsui/files/ActionHandler.java13
-rw-r--r--src/com/android/documentsui/files/FilesActivity.java4
-rw-r--r--src/com/android/documentsui/files/MenuManager.java7
-rw-r--r--tests/common/com/android/documentsui/testing/TestFeatures.java6
-rw-r--r--tests/common/com/android/documentsui/testing/TestMenu.java1
-rw-r--r--tests/unit/com/android/documentsui/files/MenuManagerTest.java2
16 files changed, 63 insertions, 9 deletions
diff --git a/res/menu/action_mode_menu.xml b/res/menu/action_mode_menu.xml
index f6fdb7e04..ba238163a 100644
--- a/res/menu/action_mode_menu.xml
+++ b/res/menu/action_mode_menu.xml
@@ -63,6 +63,11 @@
android:showAsAction="never"
android:visible="false" />
<item
+ android:id="@+id/action_menu_inspector"
+ android:title="@string/menu_inspector"
+ android:showAsAction="never"
+ android:visible="false" />
+ <item
android:id="@+id/action_menu_view_in_owner"
android:title="@string/menu_view_in_owner"
android:showAsAction="never"
diff --git a/res/values/config.xml b/res/values/config.xml
index c7713e78f..4035c6558 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -48,6 +48,7 @@
<bool name="feature_remote_actions">true</bool>
<bool name="feature_system_keyboard_navigation">true</bool>
<bool name="feature_virtual_files_sharing">true</bool>
+ <bool name="feature_inspector">false</bool>
<bool name="feature_debug_mode">false</bool>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f25939f30..b0f198ccf 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -67,6 +67,8 @@
<string name="menu_extract">Extract to\u2026</string>
<!-- Menu item that renames the selected document [CHAR LIMIT=28] -->
<string name="menu_rename">Rename</string>
+ <!--Menu item that displays properties about the selected document [CHAR LIMIT=28] -->
+ <string name="menu_inspector">Properties</string>
<!-- Menu item that renames the selected document [CHAR LIMIT=28] -->
<string name="menu_view_in_owner">View in <xliff:g id="source" example="Google Drive">%1$s</xliff:g></string>
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index df4e38082..9c1a132ef 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -44,7 +44,6 @@ import com.android.documentsui.LoadDocStackTask.LoadDocStackCallback;
import com.android.documentsui.base.BooleanConsumer;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentStack;
-import com.android.documentsui.base.Features;
import com.android.documentsui.base.Lookup;
import com.android.documentsui.base.Providers;
import com.android.documentsui.base.RootInfo;
@@ -231,6 +230,10 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
throw new UnsupportedOperationException("Can't open document.");
}
+ public void showInspector(Selection selection, Context context) {
+ throw new UnsupportedOperationException("Can't open properties.");
+ }
+
@Override
public void springOpenDirectory(DocumentInfo doc) {
throw new UnsupportedOperationException("Can't spring open directories.");
diff --git a/src/com/android/documentsui/ActionHandler.java b/src/com/android/documentsui/ActionHandler.java
index e4abf7d0b..0a14b04ef 100644
--- a/src/com/android/documentsui/ActionHandler.java
+++ b/src/com/android/documentsui/ActionHandler.java
@@ -19,6 +19,7 @@ package com.android.documentsui;
import android.annotation.IntDef;
import android.app.PendingIntent;
import android.content.ContentProvider;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.net.Uri;
@@ -29,6 +30,7 @@ import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.dirlist.DocumentDetails;
+import com.android.documentsui.selection.Selection;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -101,6 +103,8 @@ public interface ActionHandler {
void showCreateDirectoryDialog();
+ void showInspector(Selection selection, Context context);
+
@Nullable DocumentInfo renameDocument(String name, DocumentInfo document);
/**
diff --git a/src/com/android/documentsui/ActivityConfig.java b/src/com/android/documentsui/ActivityConfig.java
index 5b70fd5a3..6b0fa23f2 100644
--- a/src/com/android/documentsui/ActivityConfig.java
+++ b/src/com/android/documentsui/ActivityConfig.java
@@ -20,7 +20,7 @@ import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.State;
/**
- * Providers support for specializing the DirectoryFragment to the "host" Activity.
+ * Provides support for specializing the DirectoryFragment to the "host" Activity.
* Feel free to expand the role of this class to handle other specializations.
*/
public abstract class ActivityConfig {
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index d00d14b34..a8c97671c 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -28,7 +28,6 @@ import com.android.documentsui.base.Menus;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
import com.android.documentsui.dirlist.DirectoryFragment;
-import com.android.documentsui.files.FilesActivity;
import com.android.documentsui.queries.SearchViewManager;
import com.android.documentsui.sidebar.RootsFragment;
import com.android.internal.annotations.VisibleForTesting;
@@ -64,6 +63,7 @@ public abstract class MenuManager {
updateCompress(menu.findItem(R.id.action_menu_compress), selection);
updateExtractTo(menu.findItem(R.id.action_menu_extract_to), selection);
updateViewInOwner(menu.findItem(R.id.action_menu_view_in_owner), selection);
+ updateInspector(menu.findItem(R.id.action_menu_inspector), selection);
Menus.disableHiddenItems(menu);
}
@@ -273,6 +273,10 @@ public abstract class MenuManager {
rename.setVisible(false);
}
+ protected void updateInspector(MenuItem properties, SelectionDetails selectionDetails) {
+ properties.setVisible(false);
+ }
+
protected void updateViewInOwner(MenuItem view, SelectionDetails selectionDetails) {
view.setVisible(false);
}
diff --git a/src/com/android/documentsui/Metrics.java b/src/com/android/documentsui/Metrics.java
index c30debd76..7c284c4d3 100644
--- a/src/com/android/documentsui/Metrics.java
+++ b/src/com/android/documentsui/Metrics.java
@@ -319,6 +319,7 @@ public final class Metrics {
public static final int USER_ACTION_COMPRESS = 27;
public static final int USER_ACTION_EXTRACT_TO = 28;
public static final int USER_ACTION_VIEW_IN_APPLICATION = 29;
+ public static final int USER_ACTION_INSPECTOR = 30;
@IntDef(flag = false, value = {
USER_ACTION_OTHER,
diff --git a/src/com/android/documentsui/base/Features.java b/src/com/android/documentsui/base/Features.java
index 7a8fed69c..7a9936fb6 100644
--- a/src/com/android/documentsui/base/Features.java
+++ b/src/com/android/documentsui/base/Features.java
@@ -39,6 +39,7 @@ public interface Features {
boolean isDebugSupportEnabled();
boolean isFoldersInSearchResultsEnabled();
boolean isGestureScaleEnabled();
+ boolean isInspectorEnabled();
boolean isJobProgressDialogEnabled();
boolean isLaunchToDocumentEnabled();
boolean isNotificationChannelEnabled();
@@ -47,6 +48,7 @@ public interface Features {
boolean isSystemKeyboardNavigationEnabled();
boolean isVirtualFilesSharingEnabled();
+
/**
* Call this to force-enable any particular feature known by this instance.
* Note that all feature may not support being enabled at runtime as
@@ -127,6 +129,10 @@ public interface Features {
return isEnabled(R.bool.feature_gesture_scale);
}
+ public boolean isInspectorEnabled() {
+ return isEnabled(R.bool.feature_inspector);
+ }
+
@Override
public boolean isJobProgressDialogEnabled() {
return isEnabled(R.bool.feature_job_progress_dialog);
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index 4e97da7e5..0065004cb 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -67,7 +67,6 @@ import com.android.documentsui.BaseActivity;
import com.android.documentsui.BaseActivity.RetainedState;
import com.android.documentsui.DirectoryReloadLock;
import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.DragAndDropManager;
import com.android.documentsui.FocusManager;
import com.android.documentsui.Injector;
import com.android.documentsui.Injector.ContentScoped;
@@ -84,7 +83,6 @@ import com.android.documentsui.base.EventListener;
import com.android.documentsui.base.Events.InputEvent;
import com.android.documentsui.base.Events.MotionInputEvent;
import com.android.documentsui.base.Features;
-import com.android.documentsui.base.Lookup;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
@@ -684,6 +682,11 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
transferDocuments(selection, null, FileOperationService.OPERATION_MOVE);
return true;
+ case R.id.action_menu_inspector:
+ mActionModeController.finishActionMode();
+ mActions.showInspector(selection, getContext());
+ return true;
+
case R.id.dir_menu_cut_to_clipboard:
mActions.cutToClipboard();
return true;
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index 6f39e51ef..b5df11545 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -23,6 +23,7 @@ import android.content.ActivityNotFoundException;
import android.content.ClipData;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
+import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.DocumentsContract;
@@ -32,7 +33,6 @@ import android.view.DragEvent;
import com.android.documentsui.AbstractActionHandler;
import com.android.documentsui.ActionModeAddons;
import com.android.documentsui.ActivityConfig;
-import com.android.documentsui.CreateDirectoryFragment;
import com.android.documentsui.DocumentsAccess;
import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.DragAndDropManager;
@@ -63,7 +63,6 @@ import com.android.documentsui.roots.ProvidersAccess;
import com.android.documentsui.selection.Selection;
import com.android.documentsui.services.FileOperation;
import com.android.documentsui.services.FileOperationService;
-import com.android.documentsui.services.FileOperationService.OpType;
import com.android.documentsui.services.FileOperations;
import com.android.documentsui.ui.DialogController;
import com.android.internal.annotations.VisibleForTesting;
@@ -676,6 +675,16 @@ public class ActionHandler<T extends Activity & Addons> extends AbstractActionHa
return intent;
}
+ @Override
+ public void showInspector(Selection selected, Context context) {
+ assert(selected.size() == 1);
+ Intent intent = new Intent(mActivity, FilesActivity.class);
+ DocumentInfo selectedDoc = mModel.getDocuments(selected).get(0);
+ intent.putExtra(Intent.ACTION_VIEW, selectedDoc.derivedUri);
+ Metrics.logUserAction(context, Metrics.USER_ACTION_INSPECTOR);
+ mActivity.startActivity(intent);
+ }
+
public interface Addons extends CommonAddons {
}
}
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index aeef64573..cf0b36ea5 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -231,12 +231,12 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
super.onPostCreate(savedInstanceState);
// This check avoids a flicker from "Recents" to "Home".
// Only update action bar at this point if there is an active
- // serach. Why? Because this avoid an early (undesired) load of
+ // search. Why? Because this avoid an early (undesired) load of
// the recents root...which is the default root in other activities.
// In Files app "Home" is the default, but it is loaded async.
// update will be called once Home root is loaded.
// Except while searching we need this call to ensure the
- // search bits get layed out correctly.
+ // search bits get laid out correctly.
if (mSearchManager.isSearching()) {
mNavigator.update();
}
diff --git a/src/com/android/documentsui/files/MenuManager.java b/src/com/android/documentsui/files/MenuManager.java
index 5c48e02de..4754c6d27 100644
--- a/src/com/android/documentsui/files/MenuManager.java
+++ b/src/com/android/documentsui/files/MenuManager.java
@@ -265,6 +265,13 @@ public final class MenuManager extends com.android.documentsui.MenuManager {
}
@Override
+ protected void updateInspector(MenuItem properties, SelectionDetails selectionDetails) {
+ boolean visible = mFeatures.isInspectorEnabled();
+ properties.setVisible(visible);
+ properties.setEnabled(visible && selectionDetails.size() == 1);
+ }
+
+ @Override
protected void updateViewInOwner(MenuItem view, SelectionDetails selectionDetails) {
if (selectionDetails.canViewInOwner()) {
view.setVisible(true);
diff --git a/tests/common/com/android/documentsui/testing/TestFeatures.java b/tests/common/com/android/documentsui/testing/TestFeatures.java
index 204e8d23e..39f88a0c2 100644
--- a/tests/common/com/android/documentsui/testing/TestFeatures.java
+++ b/tests/common/com/android/documentsui/testing/TestFeatures.java
@@ -28,6 +28,7 @@ public class TestFeatures implements Features {
public boolean debugSupport = true;
public boolean foldersInSearchResults = true;
public boolean gestureScale = true;
+ public boolean inspector = true;
public boolean jobProgressDialog = false;
public boolean launchToDocument = true;
public boolean notificationChannel = true;
@@ -77,6 +78,11 @@ public class TestFeatures implements Features {
}
@Override
+ public boolean isInspectorEnabled() {
+ return inspector;
+ }
+
+ @Override
public boolean isLaunchToDocumentEnabled() {
return launchToDocument;
}
diff --git a/tests/common/com/android/documentsui/testing/TestMenu.java b/tests/common/com/android/documentsui/testing/TestMenu.java
index 7ddcf162f..9df06d9b7 100644
--- a/tests/common/com/android/documentsui/testing/TestMenu.java
+++ b/tests/common/com/android/documentsui/testing/TestMenu.java
@@ -64,6 +64,7 @@ public abstract class TestMenu implements Menu {
R.id.action_menu_move_to,
R.id.action_menu_compress,
R.id.action_menu_rename,
+ R.id.action_menu_inspector,
R.id.action_menu_view_in_owner,
R.id.option_menu_search,
R.id.option_menu_debug,
diff --git a/tests/unit/com/android/documentsui/files/MenuManagerTest.java b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
index e3e12f1c2..342021085 100644
--- a/tests/unit/com/android/documentsui/files/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
@@ -87,6 +87,7 @@ public final class MenuManagerTest {
private TestMenuItem actionModeCompress;
private TestMenuItem actionModeRename;
private TestMenuItem actionModeViewInOwner;
+ private TestMenuItem actionModeInspector;
/* Option Menu items */
private TestMenuItem optionSearch;
@@ -143,6 +144,7 @@ public final class MenuManagerTest {
actionModeMoveTo = testMenu.findItem(R.id.action_menu_move_to);
actionModeCompress = testMenu.findItem(R.id.action_menu_compress);
actionModeRename = testMenu.findItem(R.id.action_menu_rename);
+ actionModeInspector = testMenu.findItem(R.id.action_menu_inspector);
actionModeViewInOwner = testMenu.findItem(R.id.action_menu_view_in_owner);
optionSearch = testMenu.findItem(R.id.option_menu_search);