From 91bec536ac5a86ff48167fbe71ed7346d9c6fe4e Mon Sep 17 00:00:00 2001 From: Ben Kwa Date: Wed, 16 Sep 2015 13:15:38 -0700 Subject: [PATCH] DocumentsUI: Add an error screen to DirectoryFragment. - Reorganize the directory fragment. - Repurpose the "empty" view to hold a message and a button. - Message is set to the "No items" message if a directory is empty. - Message is set to the error message if a query error occurs. - Don't close DocumentsUI when a query error occurs. Change-Id: I4e1e96f23040606b410ac746252dcb0ab9286f04 --- .../res/layout/fragment_directory.xml | 99 ++++++++++--------- packages/DocumentsUI/res/values/strings.xml | 3 +- .../documentsui/DirectoryFragment.java | 51 +++++----- .../android/documentsui/DirectoryView.java | 4 +- 4 files changed, 85 insertions(+), 72 deletions(-) diff --git a/packages/DocumentsUI/res/layout/fragment_directory.xml b/packages/DocumentsUI/res/layout/fragment_directory.xml index b02349a693f62..45cb34db54e0f 100644 --- a/packages/DocumentsUI/res/layout/fragment_directory.xml +++ b/packages/DocumentsUI/res/layout/fragment_directory.xml @@ -17,61 +17,70 @@ + android:background="@color/material_grey_50" + android:orientation="vertical" + android:animateLayoutChanges="true"> - + android:layout_height="wrap_content" + android:indeterminate="true" + style="@style/TrimmedHorizontalProgressBar" + android:visibility="gone"/> + + + - - + + + android:text="@string/empty" + style="@android:style/TextAppearance.Material.Subhead" /> - - - - - - - - - + android:text="@string/button_retry" + style="?android:attr/buttonBarPositiveButtonStyle" /> + + + + + + + + diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml index 28018f8eceece..a12edf397178e 100644 --- a/packages/DocumentsUI/res/values/strings.xml +++ b/packages/DocumentsUI/res/values/strings.xml @@ -81,7 +81,8 @@ Move Dismiss - + Try Again + By name diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java index 1a17b6c639974..a891cfdc718e4 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java @@ -369,21 +369,6 @@ public class DirectoryFragment extends Fragment { @Override public void onLoadFinished(Loader loader, DirectoryResult result) { - if (result == null || result.exception != null) { - // onBackPressed does a fragment transaction, which can't be done inside - // onLoadFinished - mHandler.post(new Runnable() { - @Override - public void run() { - final Activity activity = getActivity(); - if (activity != null) { - activity.onBackPressed(); - } - } - }); - return; - } - if (!isAdded()) return; mModel.update(result); @@ -900,6 +885,29 @@ public class DirectoryFragment extends Fragment { } } + void showEmptyView() { + mEmptyView.setVisibility(View.VISIBLE); + mRecView.setVisibility(View.GONE); + TextView msg = (TextView) mEmptyView.findViewById(R.id.message); + msg.setText(R.string.empty); + // No retry button for the empty view. + mEmptyView.findViewById(R.id.button_retry).setVisibility(View.GONE); + } + + void showErrorView() { + mEmptyView.setVisibility(View.VISIBLE); + mRecView.setVisibility(View.GONE); + TextView msg = (TextView) mEmptyView.findViewById(R.id.message); + msg.setText(R.string.query_error); + // TODO: Enable this once the retry button does something. + mEmptyView.findViewById(R.id.button_retry).setVisibility(View.GONE); + } + + void showRecyclerView() { + mEmptyView.setVisibility(View.GONE); + mRecView.setVisibility(View.VISIBLE); + } + private final class DocumentsAdapter extends RecyclerView.Adapter { private final Context mContext; @@ -1955,21 +1963,16 @@ public class DirectoryFragment extends Fragment { mProgressBar.setVisibility(model.isLoading() ? View.VISIBLE : View.GONE); if (model.isEmpty()) { - mEmptyView.setVisibility(View.VISIBLE); - mRecView.setVisibility(View.GONE); + showEmptyView(); } else { - mEmptyView.setVisibility(View.GONE); - mRecView.setVisibility(View.VISIBLE); + showRecyclerView(); + mAdapter.notifyDataSetChanged(); } - - mAdapter.notifyDataSetChanged(); } @Override public void onModelUpdateFailed(Exception e) { - // TODO: deal with catastrophic update failures - String error = getString(R.string.query_error); - mAdapter.notifyDataSetChanged(); + showErrorView(); } } } diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java index 4893652c4849f..000b92a0b1a54 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java @@ -18,9 +18,9 @@ package com.android.documentsui; import android.content.Context; import android.util.AttributeSet; -import android.widget.FrameLayout; +import android.widget.LinearLayout; -public class DirectoryView extends FrameLayout { +public class DirectoryView extends LinearLayout { private float mPosition = 0f; private int mWidth;