From c8d4e22a72c1ed4b45193ab3b3c671454771adf1 Mon Sep 17 00:00:00 2001 From: Steve McKay Date: Tue, 1 Mar 2016 08:28:02 -0800 Subject: [PATCH] Don't show title in delete confirmation. Also, remove "unhide" from Adapter, since it is unused. Had to add a custom layout because Alert didn't do a good job. LOTS of work for a yes/no! Bug: 27205772 Change-Id: Ic20d73b54fd142287e07402877ac339300b4bbb7 --- .../res/layout/dialog_delete_confirmation.xml | 25 ++++++++++++++++ packages/DocumentsUI/res/values/strings.xml | 6 ++-- .../dirlist/DirectoryFragment.java | 30 ++++++++++++++----- .../documentsui/dirlist/DocumentsAdapter.java | 7 ----- .../dirlist/ModelBackedDocumentsAdapter.java | 25 +--------------- .../SectionBreakDocumentsAdapterWrapper.java | 7 ----- .../ModelBackedDocumentsAdapterTest.java | 22 -------------- .../dirlist/TestDocumentsAdapter.java | 5 ---- 8 files changed, 50 insertions(+), 77 deletions(-) create mode 100644 packages/DocumentsUI/res/layout/dialog_delete_confirmation.xml diff --git a/packages/DocumentsUI/res/layout/dialog_delete_confirmation.xml b/packages/DocumentsUI/res/layout/dialog_delete_confirmation.xml new file mode 100644 index 0000000000000..990ce0b3352b7 --- /dev/null +++ b/packages/DocumentsUI/res/layout/dialog_delete_confirmation.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml index 3dc111aa97039..6e1b30e97b305 100644 --- a/packages/DocumentsUI/res/values/strings.xml +++ b/packages/DocumentsUI/res/values/strings.xml @@ -208,11 +208,9 @@ Allow Deny - - Delete files? - Are you sure you want to delete %1$d file? - Are you sure you want to delete %1$d files? + Delete %1$d file? + Delete %1$d files? diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java index dfceff8d22b07..c8cbe7428f1cc 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java @@ -168,6 +168,7 @@ public class DirectoryFragment extends Fragment private GridLayoutManager mLayout; private int mColumnCount = 1; // This will get updated when layout changes. + private LayoutInflater mInflater; private MessageBar mMessageBar; private View mProgressBar; @@ -182,13 +183,12 @@ public class DirectoryFragment extends Fragment @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + mInflater = inflater; final View view = inflater.inflate(R.layout.fragment_directory, container, false); mMessageBar = MessageBar.create(getChildFragmentManager()); mProgressBar = view.findViewById(R.id.progressbar); - mEmptyView = view.findViewById(android.R.id.empty); - mRecView = (RecyclerView) view.findViewById(R.id.dir_list); mRecView.setRecyclerListener( new RecyclerListener() { @@ -708,13 +708,27 @@ public class DirectoryFragment extends Fragment new GetDocumentsTask() { @Override void onDocumentsReady(final List docs) { + + TextView message = + (TextView) mInflater.inflate(R.layout.dialog_delete_confirmation, null); + message.setText( + Shared.getQuantityString( + getActivity(), + R.plurals.delete_confirmation_message, + docs.size())); + + // This "insta-hides" files that are being deleted, because + // the delete operation may be not execute immediately (it + // may be queued up on the FileOperationService.) + // To hide the files locally, we call the hide method on the adapter + // ...which a live object...cannot be parceled. + // For that reason, for now, we implement this dialog NOT + // as a fragment (which can survive rotation and have its own state), + // but as a simple runtime dialog. So rotating a device with an + // active delete dialog...results in that dialog disappearing. + // We can do better, but don't have cycles for it now. new AlertDialog.Builder(getActivity()) - .setTitle(R.string.delete_confirmation_title) - .setMessage( - Shared.getQuantityString( - getActivity(), - R.plurals.delete_confirmation_message, - docs.size())) + .setView(message) .setPositiveButton( android.R.string.yes, new DialogInterface.OnClickListener() { diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentsAdapter.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentsAdapter.java index 0930c22b356c6..0bbecf9b289c7 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentsAdapter.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentsAdapter.java @@ -73,13 +73,6 @@ abstract class DocumentsAdapter */ abstract public SparseArray hide(String... ids); - /** - * Unhides a set of previously hidden items. - * - * @param ids A sparse array of IDs from a previous call to {@link #hide}. - */ - abstract void unhide(SparseArray ids); - /** * Returns a class that yields the span size for a particular element. This is * primarily useful in {@link SectionBreakDocumentsAdapterWrapper} where diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapter.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapter.java index 42dba4591326e..2b073397f292b 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapter.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapter.java @@ -24,12 +24,12 @@ import static com.android.documentsui.model.DocumentInfo.getCursorString; import android.database.Cursor; import android.provider.DocumentsContract.Document; -import android.support.annotation.VisibleForTesting; import android.util.Log; import android.util.SparseArray; import android.view.ViewGroup; import com.android.documentsui.State; + import com.google.common.collect.Sets; import java.util.ArrayList; @@ -181,29 +181,6 @@ final class ModelBackedDocumentsAdapter extends DocumentsAdapter { return hiddenItems; } - @VisibleForTesting - @Override - public void unhide(SparseArray ids) { - if (DEBUG) Log.d(TAG, "Unhiding ids: " + ids); - - // An ArrayList can shrink at runtime...and in fact - // it does when we clear it completely. - // This means we can't call add(pos, id) without - // first checking the list size. - List oldIds = mModelIds; - mModelIds = new ArrayList<>(oldIds.size() + ids.size()); - mModelIds.addAll(oldIds); - - // Finally insert the unhidden items. - for (int i = 0; i < ids.size(); i++) { - int pos = ids.keyAt(i); - String id = ids.get(pos); - mHiddenIds.remove(id); - mModelIds.add(pos, id); - notifyItemInserted(pos); - } - } - @Override public List getModelIds() { return mModelIds; diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapper.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapper.java index 3ee5cfc38f8d3..b6980596908c0 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapper.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapper.java @@ -168,13 +168,6 @@ final class SectionBreakDocumentsAdapterWrapper extends DocumentsAdapter { return mDelegate.hide(ids); } - @Override - void unhide(SparseArray ids) { - // NOTE: We hear about these changes and adjust break position - // in our AdapterDataObserver. - mDelegate.unhide(ids); - } - @Override List getModelIds() { return mDelegate.getModelIds(); diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapterTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapterTest.java index 2244be9fa8cc5..adc8141473360 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapterTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapterTest.java @@ -73,28 +73,6 @@ public class ModelBackedDocumentsAdapterTest extends AndroidTestCase { assertEquals(mModel.getItemCount() - 2, mAdapter.getItemCount()); } - // Tests that the items can be hidden and unhidden. - public void testUnhide_ItemCount() { - List ids = mModel.getModelIds(); - SparseArray hidden = mAdapter.hide(ids.toArray(new String[ids.size()])); - mAdapter.unhide(hidden); - assertEquals(mModel.getItemCount(), mAdapter.getItemCount()); - } - - // Tests that the items can be hidden and unhidden. - public void testUnhide_PreservesOrder() { - List ids = mModel.getModelIds(); - SparseArray hidden = mAdapter.hide( - ids.get(0), ids.get(1), ids.get(5), ids.get(9)); - mAdapter.unhide(hidden); - - // Finally ensure the restored items are in the original order - // by checking them against the model. - for (int i = 0; i < mAdapter.getItemCount(); i++) { - assertEquals(mModel.idForPosition(i), mAdapter.getModelId(i)); - } - } - private final class TestEnvironment implements DocumentsAdapter.Environment { private final Context testContext; diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestDocumentsAdapter.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestDocumentsAdapter.java index 267f47d80d3fe..e170dbb55181e 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestDocumentsAdapter.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestDocumentsAdapter.java @@ -60,11 +60,6 @@ public class TestDocumentsAdapter extends DocumentsAdapter { throw new UnsupportedOperationException(); } - @Override - void unhide(SparseArray ids) { - throw new UnsupportedOperationException(); - } - @Override public DocumentHolder onCreateViewHolder(ViewGroup parent, int viewType) { throw new UnsupportedOperationException();