• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.documentsui.picker;
18 
19 import android.app.Activity;
20 import android.content.ContentProviderClient;
21 import android.content.ContentResolver;
22 import android.net.Uri;
23 import android.provider.DocumentsContract;
24 import android.support.design.widget.Snackbar;
25 import android.util.Log;
26 
27 import com.android.documentsui.DocumentsAccess;
28 import com.android.documentsui.DocumentsApplication;
29 import com.android.documentsui.R;
30 import com.android.documentsui.base.BooleanConsumer;
31 import com.android.documentsui.base.DocumentInfo;
32 import com.android.documentsui.base.DocumentStack;
33 import com.android.documentsui.base.PairedTask;
34 import com.android.documentsui.ui.Snackbars;
35 
36 import java.util.function.Consumer;
37 
38 /**
39  * Task that creates a new document in the background.
40  */
41 class CreatePickedDocumentTask extends PairedTask<Activity, Void, Uri> {
42     private final LastAccessedStorage mLastAccessed;
43     private final DocumentsAccess mDocs;
44     private final DocumentStack mStack;
45     private final String mMimeType;
46     private final String mDisplayName;
47     private final BooleanConsumer mInProgressStateListener;
48     private final Consumer<Uri> mCallback;
49 
CreatePickedDocumentTask( Activity activity, DocumentsAccess docs, LastAccessedStorage lastAccessed, DocumentStack stack, String mimeType, String displayName, BooleanConsumer inProgressStateListener, Consumer<Uri> callback)50     CreatePickedDocumentTask(
51             Activity activity,
52             DocumentsAccess docs,
53             LastAccessedStorage lastAccessed,
54             DocumentStack stack,
55             String mimeType,
56             String displayName,
57             BooleanConsumer inProgressStateListener,
58             Consumer<Uri> callback) {
59         super(activity);
60         mLastAccessed = lastAccessed;
61         mDocs = docs;
62         mStack = stack;
63         mMimeType = mimeType;
64         mDisplayName = displayName;
65         mInProgressStateListener = inProgressStateListener;
66         mCallback = callback;
67     }
68 
69     @Override
prepare()70     protected void prepare() {
71         mInProgressStateListener.accept(true);
72     }
73 
74     @Override
run(Void... params)75     protected Uri run(Void... params) {
76         DocumentInfo cwd = mStack.peek();
77 
78         Uri childUri = mDocs.createDocument(cwd, mMimeType, mDisplayName);
79 
80         if (childUri != null) {
81             mLastAccessed.setLastAccessed(mOwner, mStack);
82         }
83 
84         return childUri;
85     }
86 
87     @Override
finish(Uri result)88     protected void finish(Uri result) {
89         if (result != null) {
90             mCallback.accept(result);
91         } else {
92             Snackbars.makeSnackbar(
93                     mOwner, R.string.save_error, Snackbar.LENGTH_SHORT).show();
94         }
95 
96         mInProgressStateListener.accept(false);
97     }
98 }
99