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);