summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/DocumentsUI/res/layout/fragment_directory.xml6
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java3
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java1
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java6
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java5
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java5
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java117
7 files changed, 71 insertions, 72 deletions
diff --git a/packages/DocumentsUI/res/layout/fragment_directory.xml b/packages/DocumentsUI/res/layout/fragment_directory.xml
index 6d8a913f74f1..b02349a693f6 100644
--- a/packages/DocumentsUI/res/layout/fragment_directory.xml
+++ b/packages/DocumentsUI/res/layout/fragment_directory.xml
@@ -28,12 +28,6 @@
android:visibility="gone"
style="@android:style/TextAppearance.Material.Subhead" />
- <!-- The 'list' view is still used for RecentsCreateFragment -->
- <ListView
- android:id="@+id/list"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 1e7a42fa7732..4d0a7eb67483 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -90,6 +90,7 @@ abstract class BaseActivity extends Activity {
@LayoutRes
private int mLayoutId;
private final String mTag;
+ private DirectoryContainerView mDirectoryContainer;
public abstract void onDocumentPicked(DocumentInfo doc, @Nullable DocumentContext siblings);
public abstract void onDocumentsPicked(List<DocumentInfo> docs);
@@ -116,6 +117,7 @@ abstract class BaseActivity extends Activity {
setContentView(mLayoutId);
mRoots = DocumentsApplication.getRootsCache(this);
+ mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory);
mSearchManager = new SearchManager();
// Base classes must update result in their onCreate.
@@ -316,6 +318,7 @@ abstract class BaseActivity extends Activity {
* @param anim
*/
final void onCurrentDirectoryChanged(int anim) {
+ mDirectoryContainer.setDrawDisappearingFirst(anim == ANIM_DOWN);
onDirectoryChanged(anim);
final RootsFragment roots = RootsFragment.get(getFragmentManager());
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
index b30cab6ccf9d..1a17b6c63997 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
@@ -102,6 +102,7 @@ import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.DocumentStack;
import com.android.documentsui.model.RootInfo;
import com.android.internal.util.Preconditions;
+
import com.google.common.collect.Lists;
import java.util.ArrayList;
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index 1de1c6a57028..8b2b4f2dc6ae 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -75,8 +75,6 @@ public class DocumentsActivity extends BaseActivity {
private Toolbar mRootsToolbar;
- private DirectoryContainerView mDirectoryContainer;
-
private ItemSelectedListener mStackListener;
private BaseAdapter mStackAdapter;
@@ -114,8 +112,6 @@ public class DocumentsActivity extends BaseActivity {
mDrawer = DrawerController.create(this);
}
- mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory);
-
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mStackAdapter = new StackAdapter();
@@ -407,8 +403,6 @@ public class DocumentsActivity extends BaseActivity {
final RootInfo root = getCurrentRoot();
final DocumentInfo cwd = getCurrentDirectory();
- mDirectoryContainer.setDrawDisappearingFirst(anim == ANIM_DOWN);
-
if (cwd == null) {
// No directory means recents
if (mState.action == ACTION_CREATE ||
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
index 450def799a1a..c1362c87e620 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
@@ -62,7 +62,6 @@ public class FilesActivity extends BaseActivity {
private Toolbar mToolbar;
private Spinner mToolbarStack;
- private DirectoryContainerView mDirectoryContainer;
private ItemSelectedListener mStackListener;
private BaseAdapter mStackAdapter;
private DocumentClipper mClipper;
@@ -77,8 +76,6 @@ public class FilesActivity extends BaseActivity {
final Context context = this;
- mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory);
-
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mStackAdapter = new StackAdapter();
@@ -235,8 +232,6 @@ public class FilesActivity extends BaseActivity {
final RootInfo root = getCurrentRoot();
final DocumentInfo cwd = getCurrentDirectory();
- mDirectoryContainer.setDrawDisappearingFirst(anim == ANIM_DOWN);
-
if (cwd == null) {
DirectoryFragment.showRecentsOpen(fm, anim);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java b/packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java
index 740157829d3f..798992b470e3 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java
@@ -56,8 +56,6 @@ public class ManageRootActivity extends BaseActivity {
private Toolbar mToolbar;
private Spinner mToolbarStack;
- private DirectoryContainerView mDirectoryContainer;
-
private ItemSelectedListener mStackListener;
private BaseAdapter mStackAdapter;
@@ -73,8 +71,6 @@ public class ManageRootActivity extends BaseActivity {
mDrawer = DrawerController.createDummy();
- mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory);
-
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setTitleTextAppearance(context,
android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title);
@@ -157,7 +153,6 @@ public class ManageRootActivity extends BaseActivity {
// If started in manage roots mode, there has to be a cwd (i.e. the root dir of the managed
// root).
Preconditions.checkNotNull(cwd);
- mDirectoryContainer.setDrawDisappearingFirst(anim == ANIM_DOWN);
if (mState.currentSearch != null) {
// Ongoing search
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
index 662822ee35d3..681133156dca 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
@@ -30,19 +30,19 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
+import android.support.annotation.Nullable;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils.TruncateAt;
import android.text.style.ImageSpan;
import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.BaseAdapter;
import android.widget.ImageView;
-import android.widget.ListView;
import android.widget.TextView;
import com.android.documentsui.BaseActivity.State;
@@ -64,8 +64,7 @@ import java.util.List;
public class RecentsCreateFragment extends Fragment {
private View mEmptyView;
- private ListView mListView;
-
+ private RecyclerView mRecView;
private DocumentStackAdapter mAdapter;
private LoaderCallbacks<List<DocumentStack>> mCallbacks;
@@ -85,13 +84,14 @@ public class RecentsCreateFragment extends Fragment {
final View view = inflater.inflate(R.layout.fragment_directory, container, false);
- mEmptyView = view.findViewById(android.R.id.empty);
+ mRecView = (RecyclerView) view.findViewById(R.id.recyclerView);
+ mRecView.setLayoutManager(new LinearLayoutManager(getContext()));
+ mRecView.addOnItemTouchListener(mItemListener);
- mListView = (ListView) view.findViewById(R.id.list);
- mListView.setOnItemClickListener(mItemListener);
+ mEmptyView = view.findViewById(android.R.id.empty);
mAdapter = new DocumentStackAdapter();
- mListView.setAdapter(mAdapter);
+ mRecView.setAdapter(mAdapter);
final RootsCache roots = DocumentsApplication.getRootsCache(context);
final State state = ((BaseActivity) getActivity()).getDisplayState();
@@ -105,7 +105,7 @@ public class RecentsCreateFragment extends Fragment {
@Override
public void onLoadFinished(
Loader<List<DocumentStack>> loader, List<DocumentStack> data) {
- mAdapter.swapStacks(data);
+ mAdapter.update(data);
// When launched into empty recents, show drawer
if (mAdapter.isEmpty() && !state.stackTouched &&
@@ -116,7 +116,7 @@ public class RecentsCreateFragment extends Fragment {
@Override
public void onLoaderReset(Loader<List<DocumentStack>> loader) {
- mAdapter.swapStacks(null);
+ mAdapter.update(null);
}
};
@@ -135,13 +135,24 @@ public class RecentsCreateFragment extends Fragment {
getLoaderManager().destroyLoader(LOADER_RECENTS);
}
- private OnItemClickListener mItemListener = new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- final DocumentStack stack = mAdapter.getItem(position);
- ((BaseActivity) getActivity()).onStackPicked(stack);
- }
- };
+ private RecyclerView.OnItemTouchListener mItemListener =
+ new RecyclerView.OnItemTouchListener() {
+ @Override
+ public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
+ Events.MotionInputEvent event = new Events.MotionInputEvent(e, mRecView);
+ if (event.isOverItem() && event.isActionUp()) {
+ final DocumentStack stack = mAdapter.getItem(event.getItemPosition());
+ ((BaseActivity) getActivity()).onStackPicked(stack);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onTouchEvent(RecyclerView rv, MotionEvent e) {}
+ @Override
+ public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
+ };
public static class RecentsCreateLoader extends UriDerivativeLoader<Uri, List<DocumentStack>> {
private final RootsCache mRoots;
@@ -187,14 +198,32 @@ public class RecentsCreateFragment extends Fragment {
}
}
- private class DocumentStackAdapter extends BaseAdapter {
- private List<DocumentStack> mStacks;
+ private static final class StackHolder extends RecyclerView.ViewHolder {
+ public View view;
+ public StackHolder(View view) {
+ super(view);
+ this.view = view;
+ }
+ }
+
+ private class DocumentStackAdapter extends RecyclerView.Adapter<StackHolder> {
+ @Nullable private List<DocumentStack> mItems;
+
+ DocumentStack getItem(int position) {
+ return mItems.get(position);
+ }
+
+ @Override
+ public int getItemCount() {
+ return mItems == null ? 0 : mItems.size();
+ }
- public DocumentStackAdapter() {
+ boolean isEmpty() {
+ return mItems == null ? true : mItems.isEmpty();
}
- public void swapStacks(List<DocumentStack> stacks) {
- mStacks = stacks;
+ void update(@Nullable List<DocumentStack> items) {
+ mItems = items;
if (isEmpty()) {
mEmptyView.setVisibility(View.VISIBLE);
@@ -206,17 +235,22 @@ public class RecentsCreateFragment extends Fragment {
}
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
- final Context context = parent.getContext();
+ public StackHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ final Context context = parent.getContext();
- if (convertView == null) {
- final LayoutInflater inflater = LayoutInflater.from(context);
- convertView = inflater.inflate(R.layout.item_doc_list, parent, false);
- }
+ final LayoutInflater inflater = LayoutInflater.from(context);
+ return new StackHolder(
+ (View) inflater.inflate(R.layout.item_doc_list, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(StackHolder holder, int position) {
+ Context context = getContext();
+ View view = holder.view;
- final ImageView iconMime = (ImageView) convertView.findViewById(R.id.icon_mime);
- final TextView title = (TextView) convertView.findViewById(android.R.id.title);
- final View line2 = convertView.findViewById(R.id.line2);
+ final ImageView iconMime = (ImageView) view.findViewById(R.id.icon_mime);
+ final TextView title = (TextView) view.findViewById(android.R.id.title);
+ final View line2 = view.findViewById(R.id.line2);
final DocumentStack stack = getItem(position);
iconMime.setImageDrawable(stack.root.loadIcon(context));
@@ -234,23 +268,6 @@ public class RecentsCreateFragment extends Fragment {
title.setEllipsize(TruncateAt.MIDDLE);
if (line2 != null) line2.setVisibility(View.GONE);
-
- return convertView;
- }
-
- @Override
- public int getCount() {
- return mStacks != null ? mStacks.size() : 0;
- }
-
- @Override
- public DocumentStack getItem(int position) {
- return mStacks.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return getItem(position).hashCode();
}
}