CreateDirectoryFragment.java revision 78b137030864c028920046a38b5a040f5920fddf
1/* 2 * Copyright (C) 2013 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 17package com.android.documentsui; 18 19import static com.android.documentsui.DocumentsActivity.TAG; 20 21import android.app.AlertDialog; 22import android.app.Dialog; 23import android.app.DialogFragment; 24import android.app.FragmentManager; 25import android.content.ContentProviderClient; 26import android.content.ContentResolver; 27import android.content.Context; 28import android.content.DialogInterface; 29import android.content.DialogInterface.OnClickListener; 30import android.net.Uri; 31import android.os.AsyncTask; 32import android.os.Bundle; 33import android.provider.DocumentsContract; 34import android.provider.DocumentsContract.Document; 35import android.util.Log; 36import android.view.LayoutInflater; 37import android.view.View; 38import android.widget.EditText; 39import android.widget.Toast; 40 41import com.android.documentsui.model.DocumentInfo; 42 43/** 44 * Dialog to create a new directory. 45 */ 46public class CreateDirectoryFragment extends DialogFragment { 47 private static final String TAG_CREATE_DIRECTORY = "create_directory"; 48 49 public static void show(FragmentManager fm) { 50 final CreateDirectoryFragment dialog = new CreateDirectoryFragment(); 51 dialog.show(fm, TAG_CREATE_DIRECTORY); 52 } 53 54 @Override 55 public Dialog onCreateDialog(Bundle savedInstanceState) { 56 final Context context = getActivity(); 57 final ContentResolver resolver = context.getContentResolver(); 58 59 final AlertDialog.Builder builder = new AlertDialog.Builder(context); 60 final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext()); 61 62 final View view = dialogInflater.inflate(R.layout.dialog_create_dir, null, false); 63 final EditText text1 = (EditText) view.findViewById(android.R.id.text1); 64 65 builder.setTitle(R.string.menu_create_dir); 66 builder.setView(view); 67 68 builder.setPositiveButton(android.R.string.ok, new OnClickListener() { 69 @Override 70 public void onClick(DialogInterface dialog, int which) { 71 final String displayName = text1.getText().toString(); 72 73 final DocumentsActivity activity = (DocumentsActivity) getActivity(); 74 final DocumentInfo cwd = activity.getCurrentDirectory(); 75 76 new CreateDirectoryTask(activity, cwd, displayName).executeOnExecutor( 77 ProviderExecutor.forAuthority(cwd.authority)); 78 } 79 }); 80 builder.setNegativeButton(android.R.string.cancel, null); 81 82 return builder.create(); 83 } 84 85 private class CreateDirectoryTask extends AsyncTask<Void, Void, DocumentInfo> { 86 private final DocumentsActivity mActivity; 87 private final DocumentInfo mCwd; 88 private final String mDisplayName; 89 90 public CreateDirectoryTask( 91 DocumentsActivity activity, DocumentInfo cwd, String displayName) { 92 mActivity = activity; 93 mCwd = cwd; 94 mDisplayName = displayName; 95 } 96 97 @Override 98 protected DocumentInfo doInBackground(Void... params) { 99 final ContentResolver resolver = mActivity.getContentResolver(); 100 ContentProviderClient client = null; 101 try { 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); 109 return null; 110 } finally { 111 ContentProviderClient.releaseQuietly(client); 112 } 113 } 114 115 @Override 116 protected void onPostExecute(DocumentInfo result) { 117 if (result != null) { 118 // Navigate into newly created child 119 mActivity.onDocumentPicked(result); 120 } else { 121 Toast.makeText(mActivity, R.string.create_error, Toast.LENGTH_SHORT).show(); 122 } 123 } 124 } 125} 126