Loading src/com/android/documentsui/OperationDialogFragment.java +16 −10 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.text.Html; import android.widget.TextView; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentManager; Loading @@ -44,6 +45,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.List; /** * Alert dialog for operation dialogs. Loading @@ -68,16 +70,18 @@ public class OperationDialogFragment extends DialogFragment { public static void show( FragmentManager fm, @DialogType int dialogType, ArrayList<DocumentInfo> failedSrcList, ArrayList<Uri> uriList, ArrayList<DocumentInfo> failedDocs, ArrayList<Uri> failedUris, ArrayList<String> failedPaths, DocumentStack dstStack, @OpType int operationType) { final Bundle args = new Bundle(); args.putInt(FileOperationService.EXTRA_DIALOG_TYPE, dialogType); args.putInt(FileOperationService.EXTRA_OPERATION_TYPE, operationType); args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_DOCS, failedSrcList); args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_URIS, uriList); args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_DOCS, failedDocs); args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_URIS, failedUris); args.putStringArrayList(FileOperationService.EXTRA_FAILED_PATHS, failedPaths); final FragmentTransaction ft = fm.beginTransaction(); final OperationDialogFragment fragment = new OperationDialogFragment(); Loading @@ -88,21 +92,23 @@ public class OperationDialogFragment extends DialogFragment { } @Override public Dialog onCreateDialog(Bundle inState) { public @NonNull Dialog onCreateDialog(Bundle inState) { super.onCreate(inState); final @DialogType int dialogType = getArguments().getInt(FileOperationService.EXTRA_DIALOG_TYPE); final @OpType int operationType = getArguments().getInt(FileOperationService.EXTRA_OPERATION_TYPE); final ArrayList<Uri> uriList = getArguments().getParcelableArrayList( FileOperationService.EXTRA_FAILED_URIS); final ArrayList<DocumentInfo> docList = getArguments().getParcelableArrayList( FileOperationService.EXTRA_FAILED_DOCS); final List<DocumentInfo> failedDocs = getArguments().getParcelableArrayList( FileOperationService.EXTRA_FAILED_DOCS, DocumentInfo.class); final List<Uri> failedUris = getArguments().getParcelableArrayList( FileOperationService.EXTRA_FAILED_URIS, Uri.class); final List<String> failedPaths = getArguments().getStringArrayList( FileOperationService.EXTRA_FAILED_PATHS); final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getActivity()); final String message = new MessageBuilder(getContext()).generateListMessage( dialogType, operationType, docList, uriList); dialogType, operationType, failedDocs, failedUris, failedPaths); builder.setMessage(Html.fromHtml(message)); builder.setPositiveButton( Loading src/com/android/documentsui/files/FilesActivity.java +9 −6 Original line number Diff line number Diff line Loading @@ -323,15 +323,18 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler final int opType = intent.getIntExtra( FileOperationService.EXTRA_OPERATION_TYPE, FileOperationService.OPERATION_COPY); final ArrayList<DocumentInfo> docList = intent.getParcelableArrayListExtra(FileOperationService.EXTRA_FAILED_DOCS); final ArrayList<Uri> uriList = intent.getParcelableArrayListExtra(FileOperationService.EXTRA_FAILED_URIS); final ArrayList<DocumentInfo> failedDocs = intent.getParcelableArrayListExtra( FileOperationService.EXTRA_FAILED_DOCS, DocumentInfo.class); final ArrayList<Uri> failedUris = intent.getParcelableArrayListExtra( FileOperationService.EXTRA_FAILED_URIS, Uri.class); final ArrayList<String> failedPaths = intent.getStringArrayListExtra( FileOperationService.EXTRA_FAILED_PATHS); OperationDialogFragment.show( getSupportFragmentManager(), dialogType, docList, uriList, failedDocs, failedUris, failedPaths, mState.stack, opType); } Loading src/com/android/documentsui/services/FileOperationService.java +4 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ public class FileOperationService extends Service implements Job.Listener { public static final String EXTRA_FAILED_URIS = "com.android.documentsui.FAILED_URIS"; public static final String EXTRA_FAILED_DOCS = "com.android.documentsui.FAILED_DOCS"; public static final String EXTRA_FAILED_PATHS = "com.android.documentsui.FAILED_PATHS"; // Extras used to start or cancel a file operation... public static final String EXTRA_JOB_ID = "com.android.documentsui.JOB_ID"; Loading Loading @@ -510,6 +511,9 @@ public class FileOperationService extends Service implements Job.Listener { if (!job.failedDocs.isEmpty()) { Log.e(TAG, "Job failed to process docs: " + job.failedDocs + "."); } if (!job.failedPaths.isEmpty()) { Log.e(TAG, "Job failed to extract paths: " + job.failedPaths); } notificationManager.notify( job.id, NOTIFICATION_ID_FAILURE, job.getFailureNotification()); } Loading src/com/android/documentsui/services/Job.java +20 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static com.android.documentsui.DocumentsApplication.acquireUnstableProvid import static com.android.documentsui.services.FileOperationService.EXTRA_CANCEL; import static com.android.documentsui.services.FileOperationService.EXTRA_DIALOG_TYPE; import static com.android.documentsui.services.FileOperationService.EXTRA_FAILED_DOCS; import static com.android.documentsui.services.FileOperationService.EXTRA_FAILED_PATHS; import static com.android.documentsui.services.FileOperationService.EXTRA_FAILED_URIS; import static com.android.documentsui.services.FileOperationService.EXTRA_JOB_ID; import static com.android.documentsui.services.FileOperationService.EXTRA_OPERATION_TYPE; Loading @@ -46,6 +47,7 @@ import android.util.Log; import androidx.annotation.DrawableRes; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.annotation.PluralsRes; import com.android.documentsui.Metrics; Loading Loading @@ -110,6 +112,7 @@ abstract public class Job implements Runnable { volatile int failureCount = 0; final ArrayList<DocumentInfo> failedDocs = new ArrayList<>(); final ArrayList<Uri> failedUris = new ArrayList<>(); final ArrayList<String> failedPaths = new ArrayList<>(); final Notification.Builder mProgressBuilder; Loading Loading @@ -274,6 +277,11 @@ abstract public class Job implements Runnable { failedUris.add(uri); } void onPathFailed(@NonNull String path) { failureCount++; failedPaths.add(path); } final boolean hasFailures() { return failureCount > 0; } Loading Loading @@ -313,8 +321,18 @@ abstract public class Job implements Runnable { final Intent navigateIntent = buildNavigateIntent(INTENT_TAG_FAILURE); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, OperationDialogFragment.DIALOG_TYPE_FAILURE); navigateIntent.putExtra(EXTRA_OPERATION_TYPE, operationType); navigateIntent.putParcelableArrayListExtra(EXTRA_FAILED_DOCS, failedDocs); navigateIntent.putParcelableArrayListExtra(EXTRA_FAILED_URIS, failedUris); // Limit the size of the lists getting passed with the failure notification. final int maxListSize = 100; navigateIntent.putParcelableArrayListExtra(EXTRA_FAILED_DOCS, failedDocs.size() <= maxListSize ? failedDocs : new ArrayList<>(failedDocs.subList(0, maxListSize))); navigateIntent.putParcelableArrayListExtra(EXTRA_FAILED_URIS, failedUris.size() <= maxListSize ? failedUris : new ArrayList<>(failedUris.subList(0, maxListSize))); navigateIntent.putStringArrayListExtra(EXTRA_FAILED_PATHS, failedPaths.size() <= maxListSize ? failedPaths : new ArrayList<>(failedPaths.subList(0, maxListSize))); final Notification.Builder errorBuilder = createNotificationBuilder() Loading src/com/android/documentsui/services/UnpackJob.kt +1 −1 Original line number Diff line number Diff line Loading @@ -322,7 +322,7 @@ class UnpackJob( synchronized(this) { tracker.filesRequired-- } onResolveFailed(Uri.withAppendedPath(dirUri, fileName)) onPathFailed(path.toString()) } // Adjust progress expectations after extracting a file. Loading Loading
src/com/android/documentsui/OperationDialogFragment.java +16 −10 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.text.Html; import android.widget.TextView; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentManager; Loading @@ -44,6 +45,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.List; /** * Alert dialog for operation dialogs. Loading @@ -68,16 +70,18 @@ public class OperationDialogFragment extends DialogFragment { public static void show( FragmentManager fm, @DialogType int dialogType, ArrayList<DocumentInfo> failedSrcList, ArrayList<Uri> uriList, ArrayList<DocumentInfo> failedDocs, ArrayList<Uri> failedUris, ArrayList<String> failedPaths, DocumentStack dstStack, @OpType int operationType) { final Bundle args = new Bundle(); args.putInt(FileOperationService.EXTRA_DIALOG_TYPE, dialogType); args.putInt(FileOperationService.EXTRA_OPERATION_TYPE, operationType); args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_DOCS, failedSrcList); args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_URIS, uriList); args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_DOCS, failedDocs); args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_URIS, failedUris); args.putStringArrayList(FileOperationService.EXTRA_FAILED_PATHS, failedPaths); final FragmentTransaction ft = fm.beginTransaction(); final OperationDialogFragment fragment = new OperationDialogFragment(); Loading @@ -88,21 +92,23 @@ public class OperationDialogFragment extends DialogFragment { } @Override public Dialog onCreateDialog(Bundle inState) { public @NonNull Dialog onCreateDialog(Bundle inState) { super.onCreate(inState); final @DialogType int dialogType = getArguments().getInt(FileOperationService.EXTRA_DIALOG_TYPE); final @OpType int operationType = getArguments().getInt(FileOperationService.EXTRA_OPERATION_TYPE); final ArrayList<Uri> uriList = getArguments().getParcelableArrayList( FileOperationService.EXTRA_FAILED_URIS); final ArrayList<DocumentInfo> docList = getArguments().getParcelableArrayList( FileOperationService.EXTRA_FAILED_DOCS); final List<DocumentInfo> failedDocs = getArguments().getParcelableArrayList( FileOperationService.EXTRA_FAILED_DOCS, DocumentInfo.class); final List<Uri> failedUris = getArguments().getParcelableArrayList( FileOperationService.EXTRA_FAILED_URIS, Uri.class); final List<String> failedPaths = getArguments().getStringArrayList( FileOperationService.EXTRA_FAILED_PATHS); final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getActivity()); final String message = new MessageBuilder(getContext()).generateListMessage( dialogType, operationType, docList, uriList); dialogType, operationType, failedDocs, failedUris, failedPaths); builder.setMessage(Html.fromHtml(message)); builder.setPositiveButton( Loading
src/com/android/documentsui/files/FilesActivity.java +9 −6 Original line number Diff line number Diff line Loading @@ -323,15 +323,18 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler final int opType = intent.getIntExtra( FileOperationService.EXTRA_OPERATION_TYPE, FileOperationService.OPERATION_COPY); final ArrayList<DocumentInfo> docList = intent.getParcelableArrayListExtra(FileOperationService.EXTRA_FAILED_DOCS); final ArrayList<Uri> uriList = intent.getParcelableArrayListExtra(FileOperationService.EXTRA_FAILED_URIS); final ArrayList<DocumentInfo> failedDocs = intent.getParcelableArrayListExtra( FileOperationService.EXTRA_FAILED_DOCS, DocumentInfo.class); final ArrayList<Uri> failedUris = intent.getParcelableArrayListExtra( FileOperationService.EXTRA_FAILED_URIS, Uri.class); final ArrayList<String> failedPaths = intent.getStringArrayListExtra( FileOperationService.EXTRA_FAILED_PATHS); OperationDialogFragment.show( getSupportFragmentManager(), dialogType, docList, uriList, failedDocs, failedUris, failedPaths, mState.stack, opType); } Loading
src/com/android/documentsui/services/FileOperationService.java +4 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ public class FileOperationService extends Service implements Job.Listener { public static final String EXTRA_FAILED_URIS = "com.android.documentsui.FAILED_URIS"; public static final String EXTRA_FAILED_DOCS = "com.android.documentsui.FAILED_DOCS"; public static final String EXTRA_FAILED_PATHS = "com.android.documentsui.FAILED_PATHS"; // Extras used to start or cancel a file operation... public static final String EXTRA_JOB_ID = "com.android.documentsui.JOB_ID"; Loading Loading @@ -510,6 +511,9 @@ public class FileOperationService extends Service implements Job.Listener { if (!job.failedDocs.isEmpty()) { Log.e(TAG, "Job failed to process docs: " + job.failedDocs + "."); } if (!job.failedPaths.isEmpty()) { Log.e(TAG, "Job failed to extract paths: " + job.failedPaths); } notificationManager.notify( job.id, NOTIFICATION_ID_FAILURE, job.getFailureNotification()); } Loading
src/com/android/documentsui/services/Job.java +20 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static com.android.documentsui.DocumentsApplication.acquireUnstableProvid import static com.android.documentsui.services.FileOperationService.EXTRA_CANCEL; import static com.android.documentsui.services.FileOperationService.EXTRA_DIALOG_TYPE; import static com.android.documentsui.services.FileOperationService.EXTRA_FAILED_DOCS; import static com.android.documentsui.services.FileOperationService.EXTRA_FAILED_PATHS; import static com.android.documentsui.services.FileOperationService.EXTRA_FAILED_URIS; import static com.android.documentsui.services.FileOperationService.EXTRA_JOB_ID; import static com.android.documentsui.services.FileOperationService.EXTRA_OPERATION_TYPE; Loading @@ -46,6 +47,7 @@ import android.util.Log; import androidx.annotation.DrawableRes; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.annotation.PluralsRes; import com.android.documentsui.Metrics; Loading Loading @@ -110,6 +112,7 @@ abstract public class Job implements Runnable { volatile int failureCount = 0; final ArrayList<DocumentInfo> failedDocs = new ArrayList<>(); final ArrayList<Uri> failedUris = new ArrayList<>(); final ArrayList<String> failedPaths = new ArrayList<>(); final Notification.Builder mProgressBuilder; Loading Loading @@ -274,6 +277,11 @@ abstract public class Job implements Runnable { failedUris.add(uri); } void onPathFailed(@NonNull String path) { failureCount++; failedPaths.add(path); } final boolean hasFailures() { return failureCount > 0; } Loading Loading @@ -313,8 +321,18 @@ abstract public class Job implements Runnable { final Intent navigateIntent = buildNavigateIntent(INTENT_TAG_FAILURE); navigateIntent.putExtra(EXTRA_DIALOG_TYPE, OperationDialogFragment.DIALOG_TYPE_FAILURE); navigateIntent.putExtra(EXTRA_OPERATION_TYPE, operationType); navigateIntent.putParcelableArrayListExtra(EXTRA_FAILED_DOCS, failedDocs); navigateIntent.putParcelableArrayListExtra(EXTRA_FAILED_URIS, failedUris); // Limit the size of the lists getting passed with the failure notification. final int maxListSize = 100; navigateIntent.putParcelableArrayListExtra(EXTRA_FAILED_DOCS, failedDocs.size() <= maxListSize ? failedDocs : new ArrayList<>(failedDocs.subList(0, maxListSize))); navigateIntent.putParcelableArrayListExtra(EXTRA_FAILED_URIS, failedUris.size() <= maxListSize ? failedUris : new ArrayList<>(failedUris.subList(0, maxListSize))); navigateIntent.putStringArrayListExtra(EXTRA_FAILED_PATHS, failedPaths.size() <= maxListSize ? failedPaths : new ArrayList<>(failedPaths.subList(0, maxListSize))); final Notification.Builder errorBuilder = createNotificationBuilder() Loading
src/com/android/documentsui/services/UnpackJob.kt +1 −1 Original line number Diff line number Diff line Loading @@ -322,7 +322,7 @@ class UnpackJob( synchronized(this) { tracker.filesRequired-- } onResolveFailed(Uri.withAppendedPath(dirUri, fileName)) onPathFailed(path.toString()) } // Adjust progress expectations after extracting a file. Loading