2 * Copyright (C) 2013 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.documentsui;
19 import static com.android.documentsui.DocumentsActivity.TAG;
21 import android.app.AlertDialog;
22 import android.app.Dialog;
23 import android.app.DialogFragment;
24 import android.app.FragmentManager;
25 import android.content.ContentProviderClient;
26 import android.content.ContentResolver;
27 import android.content.Context;
28 import android.content.DialogInterface;
29 import android.content.DialogInterface.OnClickListener;
30 import android.net.Uri;
31 import android.os.AsyncTask;
32 import android.os.Bundle;
33 import android.provider.DocumentsContract;
34 import android.provider.DocumentsContract.Document;
35 import android.util.Log;
36 import android.view.LayoutInflater;
37 import android.view.View;
38 import android.widget.EditText;
39 import android.widget.Toast;
41 import com.android.documentsui.model.DocumentInfo;
44 * Dialog to create a new directory.
46 public class CreateDirectoryFragment extends DialogFragment {
47 private static final String TAG_CREATE_DIRECTORY = "create_directory";
49 public static void show(FragmentManager fm) {
50 final CreateDirectoryFragment dialog = new CreateDirectoryFragment();
51 dialog.show(fm, TAG_CREATE_DIRECTORY);
55 public Dialog onCreateDialog(Bundle savedInstanceState) {
56 final Context context = getActivity();
57 final ContentResolver resolver = context.getContentResolver();
59 final AlertDialog.Builder builder = new AlertDialog.Builder(context);
60 final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
62 final View view = dialogInflater.inflate(R.layout.dialog_create_dir, null, false);
63 final EditText text1 = (EditText) view.findViewById(android.R.id.text1);
65 builder.setTitle(R.string.menu_create_dir);
66 builder.setView(view);
68 builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
70 public void onClick(DialogInterface dialog, int which) {
71 final String displayName = text1.getText().toString();
73 final DocumentsActivity activity = (DocumentsActivity) getActivity();
74 final DocumentInfo cwd = activity.getCurrentDirectory();
76 new CreateDirectoryTask(activity, cwd, displayName).executeOnExecutor(
77 ProviderExecutor.forAuthority(cwd.authority));
80 builder.setNegativeButton(android.R.string.cancel, null);
82 return builder.create();
85 private class CreateDirectoryTask extends AsyncTask<Void, Void, DocumentInfo> {
86 private final DocumentsActivity mActivity;
87 private final DocumentInfo mCwd;
88 private final String mDisplayName;
90 public CreateDirectoryTask(
91 DocumentsActivity activity, DocumentInfo cwd, String displayName) {
94 mDisplayName = displayName;
98 protected DocumentInfo doInBackground(Void... params) {
99 final ContentResolver resolver = mActivity.getContentResolver();
100 ContentProviderClient client = null;
102 client = DocumentsApplication.acquireUnstableProviderOrThrow(
103 resolver, mCwd.derivedUri.getAuthority());
104 final Uri childUri = DocumentsContract.createDocument(
105 client, mCwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);
106 return DocumentInfo.fromUri(resolver, childUri);
107 } catch (Exception e) {
108 Log.w(TAG, "Failed to create directory", e);
111 ContentProviderClient.releaseQuietly(client);
116 protected void onPostExecute(DocumentInfo result) {
117 if (result != null) {
118 // Navigate into newly created child
119 mActivity.onDocumentPicked(result);
121 Toast.makeText(mActivity, R.string.create_error, Toast.LENGTH_SHORT).show();