Improve keyboard control of "create folder" action.
Bind CTRL+Shift+N shortcut to the create folder command.
Improve dialog support (execute on enter).
BUG=21271637
Change-Id: I9474c63cb2568b98b6d829c9552828b9b68da8de
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index cec1244..32d0bf1 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -180,7 +180,7 @@
onBackPressed();
return true;
} else if (id == R.id.menu_create_dir) {
- CreateDirectoryFragment.show(getFragmentManager());
+ showCreateDirectoryDialog();
return true;
} else if (id == R.id.menu_search) {
return false;
@@ -217,6 +217,23 @@
return super.onOptionsItemSelected(item);
}
+ void showCreateDirectoryDialog() {
+ CreateDirectoryFragment.show(getFragmentManager());
+ }
+
+ /**
+ * Returns true if a directory can be created in the current location.
+ * @return
+ */
+ boolean canCreateDirectory() {
+ final RootInfo root = getCurrentRoot();
+ final DocumentInfo cwd = getCurrentDirectory();
+ return cwd != null
+ && cwd.isCreateSupported()
+ && !mSearchManager.isSearching()
+ && !root.isDownloads();
+ }
+
/**
* Call this when directory changes. Prior to root fragment update
* the (abstract) directoryChanged method will be called.
diff --git a/src/com/android/documentsui/CreateDirectoryFragment.java b/src/com/android/documentsui/CreateDirectoryFragment.java
index 1f7b41e..0577bf1 100644
--- a/src/com/android/documentsui/CreateDirectoryFragment.java
+++ b/src/com/android/documentsui/CreateDirectoryFragment.java
@@ -33,9 +33,13 @@
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.util.Log;
+import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
import com.android.documentsui.model.DocumentInfo;
@@ -64,26 +68,47 @@
final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
final View view = dialogInflater.inflate(R.layout.dialog_create_dir, null, false);
- final EditText text1 = (EditText) view.findViewById(android.R.id.text1);
+ 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) {
- final String displayName = text1.getText().toString();
+ builder.setPositiveButton(
+ android.R.string.ok,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ createDirectory(editText.getText().toString());
+ }
+ });
- final BaseActivity activity = (BaseActivity) getActivity();
- final DocumentInfo cwd = activity.getCurrentDirectory();
-
- new CreateDirectoryTask(activity, cwd, displayName).executeOnExecutor(
- ProviderExecutor.forAuthority(cwd.authority));
- }
- });
builder.setNegativeButton(android.R.string.cancel, null);
+ final AlertDialog dialog = builder.create();
- return builder.create();
+ editText.setOnEditorActionListener(
+ new OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
+ if (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<Void, Void, DocumentInfo> {
diff --git a/src/com/android/documentsui/StandaloneActivity.java b/src/com/android/documentsui/StandaloneActivity.java
index d1e66c6..60de010 100644
--- a/src/com/android/documentsui/StandaloneActivity.java
+++ b/src/com/android/documentsui/StandaloneActivity.java
@@ -195,23 +195,19 @@
public boolean onPrepareOptionsMenu(Menu menu) {
boolean shown = super.onPrepareOptionsMenu(menu);
- final RootInfo root = getCurrentRoot();
- final DocumentInfo cwd = getCurrentDirectory();
-
final MenuItem createDir = menu.findItem(R.id.menu_create_dir);
final MenuItem advanced = menu.findItem(R.id.menu_advanced);
final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
final MenuItem settings = menu.findItem(R.id.menu_settings);
- createDir.setVisible(cwd != null
- && cwd.isCreateSupported()
- && !mSearchManager.isSearching()
- && !root.isDownloads());
+ boolean canCreateDir = canCreateDirectory();
createDir.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+ createDir.setVisible(canCreateDir);
+
fileSize.setVisible(true);
advanced.setVisible(true);
- settings.setVisible((root.flags & Root.FLAG_HAS_SETTINGS) != 0);
+ settings.setVisible((getCurrentRoot().flags & Root.FLAG_HAS_SETTINGS) != 0);
return shown;
}
@@ -301,13 +297,18 @@
dir = DirectoryFragment.get(getFragmentManager());
dir.copyToClipboard();
return true;
+ case KeyEvent.KEYCODE_N:
+ if (event.isShiftPressed() && canCreateDirectory()) {
+ showCreateDirectoryDialog();
+ return true;
+ }
case KeyEvent.KEYCODE_V:
dir = DirectoryFragment.get(getFragmentManager());
dir.pasteFromClipboard();
return true;
- default:
- return super.onKeyUp(keyCode, event);
}
+
+ return super.onKeyUp(keyCode, event);
}
@Override