From a9d424ab979983398ea6c89e24e53189e30b3418 Mon Sep 17 00:00:00 2001 From: "Garfield, Tan" Date: Wed, 11 May 2016 10:28:41 -0700 Subject: [PATCH] Open root list when hovering on the edge in drawer layout. Bug: 28345294 Change-Id: Ia569003e21aea0641ccc1d2a5e042bdc93f32bb3 (cherry picked from commit 49eda9885e81a32f8a3d7cc7b9f9f15766b2621e) --- .../DocumentsUI/res/layout/drawer_layout.xml | 15 +++++- packages/DocumentsUI/res/values/dimens.xml | 2 + .../com/android/documentsui/BaseActivity.java | 2 + .../documentsui/DocumentsActivity.java | 6 --- .../android/documentsui/DrawerController.java | 29 ++++++++++- .../android/documentsui/FilesActivity.java | 6 --- .../android/documentsui/RootsFragment.java | 48 ++++++++++--------- .../dirlist/DirectoryFragment.java | 8 +++- 8 files changed, 78 insertions(+), 38 deletions(-) diff --git a/packages/DocumentsUI/res/layout/drawer_layout.xml b/packages/DocumentsUI/res/layout/drawer_layout.xml index b65c5a066bf6f..f7824c1ebd1eb 100644 --- a/packages/DocumentsUI/res/layout/drawer_layout.xml +++ b/packages/DocumentsUI/res/layout/drawer_layout.xml @@ -52,7 +52,20 @@ - + + + + + + + diff --git a/packages/DocumentsUI/res/values/dimens.xml b/packages/DocumentsUI/res/values/dimens.xml index e682994749b9d..cad26e250e5a4 100644 --- a/packages/DocumentsUI/res/values/dimens.xml +++ b/packages/DocumentsUI/res/values/dimens.xml @@ -39,6 +39,8 @@ 2dp 280dp + 12dp + 160dp 48dp diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java index d1285c83cc89d..3597a7495b0b4 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java @@ -256,6 +256,8 @@ public abstract class BaseActivity extends Activity } else { new PickRootTask(this, root).executeOnExecutor(getExecutorForCurrentDirectory()); } + + mNavigator.revealRootsDrawer(false); } @Override diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java index 7a7d3a1d0a98a..2ca13dcf7b4d4 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java @@ -316,12 +316,6 @@ public class DocumentsActivity extends BaseActivity { .executeOnExecutor(getExecutorForCurrentDirectory()); } - @Override - void onRootPicked(RootInfo root) { - super.onRootPicked(root); - mNavigator.revealRootsDrawer(false); - } - @Override public void onDocumentPicked(DocumentInfo doc, Model model) { final FragmentManager fm = getFragmentManager(); diff --git a/packages/DocumentsUI/src/com/android/documentsui/DrawerController.java b/packages/DocumentsUI/src/com/android/documentsui/DrawerController.java index 14e6b69bfc192..97d459bf18622 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DrawerController.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DrawerController.java @@ -20,7 +20,7 @@ import static com.android.documentsui.Shared.DEBUG; import android.annotation.IntDef; import android.app.Activity; -import android.content.Context; +import android.support.annotation.ColorRes; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout.DrawerListener; @@ -120,7 +120,8 @@ abstract class DrawerController implements DrawerListener { /** * Runtime controller that manages a real drawer. */ - private static final class RuntimeDrawerController extends DrawerController { + private static final class RuntimeDrawerController extends DrawerController + implements ItemDragListener.DragHost { private final ActionBarDrawerToggle mToggle; private DrawerLayout mLayout; private View mDrawer; @@ -138,6 +139,30 @@ abstract class DrawerController implements DrawerListener { mToggle = toggle; mLayout.setDrawerListener(this); + + View edge = layout.findViewById(R.id.drawer_edge); + edge.setOnDragListener(new ItemDragListener<>(this)); + } + + @Override + public void runOnUiThread(Runnable runnable) { + mDrawer.post(runnable); + } + + @Override + public void setDropTargetHighlight(View v, boolean highlight) { + assert (v.getId() == R.id.drawer_edge); + + @ColorRes int id = highlight ? R.color.item_doc_background_selected : + android.R.color.transparent; + v.setBackgroundColor(id); + } + + @Override + public void onViewHovered(View v) { + assert (v.getId() == R.id.drawer_edge); + + setOpen(true); } @Override diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java index b2142a2c26570..282cc70cd22a1 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java @@ -263,12 +263,6 @@ public class FilesActivity extends BaseActivity { } } - @Override - void onRootPicked(RootInfo root) { - super.onRootPicked(root); - mDrawer.setOpen(false); - } - @Override public void onDocumentsPicked(List docs) { throw new UnsupportedOperationException(); diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java index 8f0113c1a6371..ad2ee07c85a98 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java @@ -186,25 +186,6 @@ public class RootsFragment extends Fragment implements ItemDragListener.DragHost startActivity(intent); } - private void openItem(int position) { - Item item = mAdapter.getItem(position); - if (item instanceof RootItem) { - BaseActivity activity = BaseActivity.get(this); - RootInfo newRoot = ((RootItem) item).root; - Metrics.logRootVisited(getActivity(), newRoot); - activity.onRootPicked(newRoot); - } else if (item instanceof AppItem) { - DocumentsActivity activity = DocumentsActivity.get(this); - ResolveInfo info = ((AppItem) item).info; - Metrics.logAppVisited(getActivity(), info); - activity.onAppPicked(info); - } else if (item instanceof SpacerItem) { - if (DEBUG) Log.d(TAG, "Ignoring click/hover on spacer item."); - } else { - throw new IllegalStateException("Unknown root: " + item); - } - } - @Override public void runOnUiThread(Runnable runnable) { getActivity().runOnUiThread(runnable); @@ -217,8 +198,9 @@ public class RootsFragment extends Fragment implements ItemDragListener.DragHost */ @Override public void onViewHovered(View view) { - int position = (Integer) view.getTag(R.id.item_position_tag); - openItem(position); + final int position = (Integer) view.getTag(R.id.item_position_tag); + final Item item = mAdapter.getItem(position); + item.open(this); } @Override @@ -232,7 +214,8 @@ public class RootsFragment extends Fragment implements ItemDragListener.DragHost private OnItemClickListener mItemListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - openItem(position); + final Item item = mAdapter.getItem(position); + item.open(RootsFragment.this); } }; @@ -269,6 +252,8 @@ public class RootsFragment extends Fragment implements ItemDragListener.DragHost abstract void bindView(View convertView); abstract boolean isDropTarget(); + + abstract void open(RootsFragment fragment); } private static class RootItem extends Item { @@ -304,6 +289,13 @@ public class RootsFragment extends Fragment implements ItemDragListener.DragHost boolean isDropTarget() { return root.supportsCreate() && !root.isLibrary(); } + + @Override + public void open(RootsFragment fragment) { + BaseActivity activity = BaseActivity.get(fragment); + Metrics.logRootVisited(fragment.getActivity(), root); + activity.onRootPicked(root); + } } private static class SpacerItem extends Item { @@ -320,6 +312,11 @@ public class RootsFragment extends Fragment implements ItemDragListener.DragHost boolean isDropTarget() { return false; } + + @Override + public void open(RootsFragment fragment) { + if (DEBUG) Log.d(TAG, "Ignoring click/hover on spacer item."); + } } private static class AppItem extends Item { @@ -349,6 +346,13 @@ public class RootsFragment extends Fragment implements ItemDragListener.DragHost // We won't support drag n' drop in DocumentsActivity, and apps only show up there. return false; } + + @Override + public void open(RootsFragment fragment) { + DocumentsActivity activity = DocumentsActivity.get(fragment); + Metrics.logAppVisited(fragment.getActivity(), info); + activity.onAppPicked(info); + } } private static class RootsAdapter extends ArrayAdapter { diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java index eec12c89048d4..b401e0a7ba63f 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java @@ -1274,12 +1274,18 @@ public class DirectoryFragment extends Fragment */ @Override public void onViewHovered(View view) { + BaseActivity activity = (BaseActivity) getActivity(); if (getModelId(view) != null) { - ((BaseActivity) getActivity()).springOpenDirectory(getDestination(view)); + activity.springOpenDirectory(getDestination(view)); } + + activity.setRootsDrawerOpen(false); } public boolean handleDropEvent(View v, DragEvent event) { + BaseActivity activity = (BaseActivity) getActivity(); + activity.setRootsDrawerOpen(false); + ClipData clipData = event.getClipData(); assert (clipData != null);