Loading src/com/android/documentsui/dirlist/DocumentHolder.java +16 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.documentsui.dirlist; import android.content.Context; import android.database.Cursor; import android.graphics.Rect; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; Loading @@ -39,6 +40,8 @@ public abstract class DocumentHolder extends RecyclerView.ViewHolder implements View.OnKeyListener { static final float DISABLED_ALPHA = 0.3f; private static final int[] sCoord = new int[2]; private static final Rect sViewRect = new Rect(); protected final Context mContext; Loading Loading @@ -151,4 +154,17 @@ public abstract class DocumentHolder static ViewPropertyAnimator fade(ImageView view, float alpha) { return view.animate().setDuration(Shared.CHECK_ANIMATION_DURATION).alpha(alpha); } static boolean isTouchInViewRegion(View view, MotionEvent event) { if (view == null || event == null || !view.isAttachedToWindow()) { return false; } view.getLocationOnScreen(sCoord); sViewRect.set(sCoord[0], sCoord[1], sCoord[0] + view.getMeasuredWidth(), sCoord[1] + view.getMeasuredHeight()); return sViewRect.contains((int) event.getRawX(), (int) event.getRawY()); } } src/com/android/documentsui/dirlist/GridDirectoryHolder.java +1 −4 Original line number Diff line number Diff line Loading @@ -69,10 +69,7 @@ final class GridDirectoryHolder extends DocumentHolder { @Override public boolean inSelectRegion(MotionEvent event) { Rect iconRect = new Rect(); mIconLayout.getGlobalVisibleRect(iconRect); return iconRect.contains((int) event.getRawX(), (int) event.getRawY()); return DocumentHolder.isTouchInViewRegion(mIconLayout, event); } /** Loading src/com/android/documentsui/dirlist/GridDocumentHolder.java +1 −4 Original line number Diff line number Diff line Loading @@ -120,10 +120,7 @@ final class GridDocumentHolder extends DocumentHolder { @Override public boolean inSelectRegion(MotionEvent event) { Rect iconRect = new Rect(); mIconLayout.getGlobalVisibleRect(iconRect); return iconRect.contains((int) event.getRawX(), (int) event.getRawY()); return DocumentHolder.isTouchInViewRegion(mIconLayout, event); } /** Loading src/com/android/documentsui/dirlist/ListDocumentHolder.java +1 −4 Original line number Diff line number Diff line Loading @@ -140,10 +140,7 @@ final class ListDocumentHolder extends DocumentHolder { @Override public boolean inSelectRegion(MotionEvent event) { Rect iconRect = new Rect(); mIconLayout.getGlobalVisibleRect(iconRect); return iconRect.contains((int) event.getRawX(), (int) event.getRawY()); return DocumentHolder.isTouchInViewRegion(mIconLayout, event); } /** Loading src/com/android/documentsui/services/DeleteJob.java +27 −8 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.documentsui.base.Features; import com.android.documentsui.clipping.UrisSupplier; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import javax.annotation.Nullable; Loading @@ -55,6 +56,8 @@ public final class DeleteJob extends ResolvedResourcesJob { private final Messenger mMessenger; private final ArrayList<Uri> mDeletionFailedUris = new ArrayList<>(); /** * Moves files to a destination identified by {@code destination}. * Performs most work by delegating to CopyJob, then deleting Loading @@ -67,6 +70,21 @@ public final class DeleteJob extends ResolvedResourcesJob { super(service, listener, id, OPERATION_DELETE, stack, srcs, features); mParentUri = srcParent; mMessenger = messenger; initDeletionFailedUrisList(); } private void initDeletionFailedUrisList() { Iterable<Uri> uris; try { uris = mResourceUris.getUris(appContext); } catch (IOException e) { Log.e(TAG, "Failed to read list of target resource Uris.", e); failureCount = this.mResourceUris.getItemCount(); return; } for (Uri uri : uris) { mDeletionFailedUris.add(uri); } } @Override Loading Loading @@ -125,6 +143,7 @@ public final class DeleteJob extends ResolvedResourcesJob { if (DEBUG) Log.d(TAG, "Deleting document @ " + doc.derivedUri); try { deleteDocument(doc, parentDoc); mDeletionFailedUris.remove(doc.derivedUri); } catch (ResourceException e) { Metrics.logFileOperationFailure( appContext, Metrics.SUBFILEOP_DELETE_DOCUMENT, doc.derivedUri); Loading @@ -147,15 +166,15 @@ public final class DeleteJob extends ResolvedResourcesJob { try { Message message = Message.obtain(); message.what = MESSAGE_FINISH; message.arg1 = failureCount; if (failureCount > 0 && failureCount < mResourceUris.getItemCount()) { // If the size of mDeletionFailedUris is 0, it means either 1). all deletions succeeded // or 2). reading all uris from mResourceUris failed. For case 2). We also need to check // the failureCount to get the correct count. message.arg1 = mDeletionFailedUris.size() == 0 ? (failureCount == mResourceUris.getItemCount() ? failureCount : 0) : mDeletionFailedUris.size(); if (message.arg1 > 0 && message.arg1 < mResourceUris.getItemCount()) { Bundle b = new Bundle(); ArrayList<Uri> uris = new ArrayList<>(); uris.addAll(failedUris); for (DocumentInfo documentInfo : failedDocs) { uris.add(documentInfo.derivedUri); } b.putParcelableArrayList(KEY_FAILED_URIS, uris); b.putParcelableArrayList(KEY_FAILED_URIS, mDeletionFailedUris); message.setData(b); } mMessenger.send(message); Loading Loading
src/com/android/documentsui/dirlist/DocumentHolder.java +16 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.documentsui.dirlist; import android.content.Context; import android.database.Cursor; import android.graphics.Rect; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; Loading @@ -39,6 +40,8 @@ public abstract class DocumentHolder extends RecyclerView.ViewHolder implements View.OnKeyListener { static final float DISABLED_ALPHA = 0.3f; private static final int[] sCoord = new int[2]; private static final Rect sViewRect = new Rect(); protected final Context mContext; Loading Loading @@ -151,4 +154,17 @@ public abstract class DocumentHolder static ViewPropertyAnimator fade(ImageView view, float alpha) { return view.animate().setDuration(Shared.CHECK_ANIMATION_DURATION).alpha(alpha); } static boolean isTouchInViewRegion(View view, MotionEvent event) { if (view == null || event == null || !view.isAttachedToWindow()) { return false; } view.getLocationOnScreen(sCoord); sViewRect.set(sCoord[0], sCoord[1], sCoord[0] + view.getMeasuredWidth(), sCoord[1] + view.getMeasuredHeight()); return sViewRect.contains((int) event.getRawX(), (int) event.getRawY()); } }
src/com/android/documentsui/dirlist/GridDirectoryHolder.java +1 −4 Original line number Diff line number Diff line Loading @@ -69,10 +69,7 @@ final class GridDirectoryHolder extends DocumentHolder { @Override public boolean inSelectRegion(MotionEvent event) { Rect iconRect = new Rect(); mIconLayout.getGlobalVisibleRect(iconRect); return iconRect.contains((int) event.getRawX(), (int) event.getRawY()); return DocumentHolder.isTouchInViewRegion(mIconLayout, event); } /** Loading
src/com/android/documentsui/dirlist/GridDocumentHolder.java +1 −4 Original line number Diff line number Diff line Loading @@ -120,10 +120,7 @@ final class GridDocumentHolder extends DocumentHolder { @Override public boolean inSelectRegion(MotionEvent event) { Rect iconRect = new Rect(); mIconLayout.getGlobalVisibleRect(iconRect); return iconRect.contains((int) event.getRawX(), (int) event.getRawY()); return DocumentHolder.isTouchInViewRegion(mIconLayout, event); } /** Loading
src/com/android/documentsui/dirlist/ListDocumentHolder.java +1 −4 Original line number Diff line number Diff line Loading @@ -140,10 +140,7 @@ final class ListDocumentHolder extends DocumentHolder { @Override public boolean inSelectRegion(MotionEvent event) { Rect iconRect = new Rect(); mIconLayout.getGlobalVisibleRect(iconRect); return iconRect.contains((int) event.getRawX(), (int) event.getRawY()); return DocumentHolder.isTouchInViewRegion(mIconLayout, event); } /** Loading
src/com/android/documentsui/services/DeleteJob.java +27 −8 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.documentsui.base.Features; import com.android.documentsui.clipping.UrisSupplier; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import javax.annotation.Nullable; Loading @@ -55,6 +56,8 @@ public final class DeleteJob extends ResolvedResourcesJob { private final Messenger mMessenger; private final ArrayList<Uri> mDeletionFailedUris = new ArrayList<>(); /** * Moves files to a destination identified by {@code destination}. * Performs most work by delegating to CopyJob, then deleting Loading @@ -67,6 +70,21 @@ public final class DeleteJob extends ResolvedResourcesJob { super(service, listener, id, OPERATION_DELETE, stack, srcs, features); mParentUri = srcParent; mMessenger = messenger; initDeletionFailedUrisList(); } private void initDeletionFailedUrisList() { Iterable<Uri> uris; try { uris = mResourceUris.getUris(appContext); } catch (IOException e) { Log.e(TAG, "Failed to read list of target resource Uris.", e); failureCount = this.mResourceUris.getItemCount(); return; } for (Uri uri : uris) { mDeletionFailedUris.add(uri); } } @Override Loading Loading @@ -125,6 +143,7 @@ public final class DeleteJob extends ResolvedResourcesJob { if (DEBUG) Log.d(TAG, "Deleting document @ " + doc.derivedUri); try { deleteDocument(doc, parentDoc); mDeletionFailedUris.remove(doc.derivedUri); } catch (ResourceException e) { Metrics.logFileOperationFailure( appContext, Metrics.SUBFILEOP_DELETE_DOCUMENT, doc.derivedUri); Loading @@ -147,15 +166,15 @@ public final class DeleteJob extends ResolvedResourcesJob { try { Message message = Message.obtain(); message.what = MESSAGE_FINISH; message.arg1 = failureCount; if (failureCount > 0 && failureCount < mResourceUris.getItemCount()) { // If the size of mDeletionFailedUris is 0, it means either 1). all deletions succeeded // or 2). reading all uris from mResourceUris failed. For case 2). We also need to check // the failureCount to get the correct count. message.arg1 = mDeletionFailedUris.size() == 0 ? (failureCount == mResourceUris.getItemCount() ? failureCount : 0) : mDeletionFailedUris.size(); if (message.arg1 > 0 && message.arg1 < mResourceUris.getItemCount()) { Bundle b = new Bundle(); ArrayList<Uri> uris = new ArrayList<>(); uris.addAll(failedUris); for (DocumentInfo documentInfo : failedDocs) { uris.add(documentInfo.derivedUri); } b.putParcelableArrayList(KEY_FAILED_URIS, uris); b.putParcelableArrayList(KEY_FAILED_URIS, mDeletionFailedUris); message.setData(b); } mMessenger.send(message); Loading