createdirectory java_CreateDirectoryFragment.java

/*

* Copyright (C) 2013 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.android.documentsui;

import static com.android.documentsui.base.Shared.TAG;

import android.app.AlertDialog;

import android.app.Dialog;

import android.app.DialogFragment;

import android.app.FragmentManager;

import android.content.ContentProviderClient;

import android.content.ContentResolver;

import android.content.Context;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;

import android.net.Uri;

import android.os.AsyncTask;

import android.os.Bundle;

import android.provider.DocumentsContract;

import android.provider.DocumentsContract.Document;

import android.support.annotation.Nullable;

import android.support.design.widget.Snackbar;

import android.util.Log;

import android.view.KeyEvent;

import android.view.inputmethod.EditorInfo;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.TextView.OnEditorActionListener;

import com.android.documentsui.base.DocumentInfo;

import com.android.documentsui.base.Shared;

import com.android.documentsui.ui.Snackbars;

/**

* Dialog to create a new directory.

*/

public class CreateDirectoryFragment extends DialogFragment {

private static final String TAG_CREATE_DIRECTORY = "create_directory";

public static void show(FragmentManager fm) {

final CreateDirectoryFragment dialog = new CreateDirectoryFragment();

dialog.show(fm, TAG_CREATE_DIRECTORY);

}

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

final Context context = getActivity();

final ContentResolver resolver = context.getContentResolver();

final AlertDialog.Builder builder = new AlertDialog.Builder(context);

final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());

final View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);

final EditText editText = (EditText) view.findViewById(android.R.id.text1);

builder.setTitle(R.string.menu_create_dir);

builder.setView(view);

builder.setPositiveButton(

android.R.string.ok,

new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

createDirectory(editText.getText().toString());

}

});

builder.setNegativeButton(android.R.string.cancel, null);

final AlertDialog dialog = builder.create();

// Workaround for the problem - virtual keyboard doesn't show on the phone.

Shared.ensureKeyboardPresent(context, dialog);

editText.setOnEditorActionListener(

new OnEditorActionListener() {

@Override

public boolean onEditorAction(

TextView view, int actionId, @Nullable KeyEvent event) {

if ((actionId == EditorInfo.IME_ACTION_DONE) || (event != null

&& event.getKeyCode() == KeyEvent.KEYCODE_ENTER

&& event.hasNoModifiers())) {

createDirectory(editText.getText().toString());

dialog.dismiss();

return true;

}

return false;

}

});

return dialog;

}

private void createDirectory(String name) {

final BaseActivity activity = (BaseActivity) getActivity();

final DocumentInfo cwd = activity.getCurrentDirectory();

new CreateDirectoryTask(activity, cwd, name).executeOnExecutor(

ProviderExecutor.forAuthority(cwd.authority));

}

private class CreateDirectoryTask extends AsyncTask{

private final BaseActivity mActivity;

private final DocumentInfo mCwd;

private final String mDisplayName;

public CreateDirectoryTask(

BaseActivity activity, DocumentInfo cwd, String displayName) {

mActivity = activity;

mCwd = cwd;

mDisplayName = displayName;

}

@Override

protected void onPreExecute() {

mActivity.setPending(true);

}

@Override

protected DocumentInfo doInBackground(Void... params) {

final ContentResolver resolver = mActivity.getContentResolver();

ContentProviderClient client = null;

try {

client = DocumentsApplication.acquireUnstableProviderOrThrow(

resolver, mCwd.derivedUri.getAuthority());

final Uri childUri = DocumentsContract.createDocument(

client, mCwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);

return DocumentInfo.fromUri(resolver, childUri);

} catch (Exception e) {

Log.w(TAG, "Failed to create directory", e);

return null;

} finally {

ContentProviderClient.releaseQuietly(client);

}

}

@Override

protected void onPostExecute(DocumentInfo result) {

if (result != null) {

// Navigate into newly created child

mActivity.onDirectoryCreated(result);

Metrics.logCreateDirOperation(getContext());

} else {

Snackbars.makeSnackbar(mActivity, R.string.create_error, Snackbar.LENGTH_SHORT)

.show();

Metrics.logCreateDirError(getContext());

}

mActivity.setPending(false);

}

}

}

Java程序

|

168行

|

6.22 KB

/*

* Copyright (C) 2013 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.android.documentsui;

import static com.android.documentsui.base.Shared.TAG;

import android.app.AlertDialog;

import android.app.Dialog;

import android.app.DialogFragment;

import android.app.FragmentManager;

import android.content.ContentProviderClient;

import android.content.ContentResolver;

import android.content.Context;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;

import android.net.Uri;

import android.os.AsyncTask;

import android.os.Bundle;

import android.provider.DocumentsContract;

import android.provider.DocumentsContract.Document;

import android.support.annotation.Nullable;

import android.support.design.widget.Snackbar;

import android.util.Log;

import android.view.KeyEvent;

import android.view.inputmethod.EditorInfo;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.TextView.OnEditorActionListener;

import com.android.documentsui.base.DocumentInfo;

import com.android.documentsui.base.Shared;

import com.android.documentsui.ui.Snackbars;

/**

* Dialog to create a new directory.

*/

public class CreateDirectoryFragment extends DialogFragment {

private static final String TAG_CREATE_DIRECTORY = "create_directory";

public static void show(FragmentManager fm) {

final CreateDirectoryFragment dialog = new CreateDirectoryFragment();

dialog.show(fm, TAG_CREATE_DIRECTORY);

}

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

final Context context = getActivity();

final ContentResolver resolver = context.getContentResolver();

final AlertDialog.Builder builder = new AlertDialog.Builder(context);

final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());

final View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);

final EditText editText = (EditText) view.findViewById(android.R.id.text1);

builder.setTitle(R.string.menu_create_dir);

builder.setView(view);

builder.setPositiveButton(

android.R.string.ok,

new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

createDirectory(editText.getText().toString());

}

});

builder.setNegativeButton(android.R.string.cancel, null);

final AlertDialog dialog = builder.create();

// Workaround for the problem - virtual keyboard doesn't show on the phone.

Shared.ensureKeyboardPresent(context, dialog);

editText.setOnEditorActionListener(

new OnEditorActionListener() {

@Override

public boolean onEditorAction(

TextView view, int actionId, @Nullable KeyEvent event) {

if ((actionId == EditorInfo.IME_ACTION_DONE) || (event != null

&& event.getKeyCode() == KeyEvent.KEYCODE_ENTER

&& event.hasNoModifiers())) {

createDirectory(editText.getText().toString());

dialog.dismiss();

return true;

}

return false;

}

});

return dialog;

}

private void createDirectory(String name) {

final BaseActivity activity = (BaseActivity) getActivity();

final DocumentInfo cwd = activity.getCurrentDirectory();

new CreateDirectoryTask(activity, cwd, name).executeOnExecutor(

ProviderExecutor.forAuthority(cwd.authority));

}

private class CreateDirectoryTask extends AsyncTask {

private final BaseActivity mActivity;

private final DocumentInfo mCwd;

private final String mDisplayName;

public CreateDirectoryTask(

BaseActivity activity, DocumentInfo cwd, String displayName) {

mActivity = activity;

mCwd = cwd;

mDisplayName = displayName;

}

@Override

protected void onPreExecute() {

mActivity.setPending(true);

}

@Override

protected DocumentInfo doInBackground(Void... params) {

final ContentResolver resolver = mActivity.getContentResolver();

ContentProviderClient client = null;

try {

client = DocumentsApplication.acquireUnstableProviderOrThrow(

resolver, mCwd.derivedUri.getAuthority());

final Uri childUri = DocumentsContract.createDocument(

client, mCwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);

return DocumentInfo.fromUri(resolver, childUri);

} catch (Exception e) {

Log.w(TAG, "Failed to create directory", e);

return null;

} finally {

ContentProviderClient.releaseQuietly(client);

}

}

@Override

protected void onPostExecute(DocumentInfo result) {

if (result != null) {

// Navigate into newly created child

mActivity.onDirectoryCreated(result);

Metrics.logCreateDirOperation(getContext());

} else {

Snackbars.makeSnackbar(mActivity, R.string.create_error, Snackbar.LENGTH_SHORT)

.show();

Metrics.logCreateDirError(getContext());

}

mActivity.setPending(false);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值