Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d91adeef authored by Steve McKay's avatar Steve McKay Committed by Android (Google) Code Review
Browse files

Merge "Improve keyboard control of "create folder" action."

parents f6431d84 a521d0d3
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -180,7 +180,7 @@ abstract class BaseActivity extends Activity {
            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 @@ abstract class BaseActivity extends Activity {
        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.
+38 −13
Original line number Diff line number Diff line
@@ -33,9 +33,13 @@ import android.os.Bundle;
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 @@ public class CreateDirectoryFragment extends DialogFragment {
        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() {
        builder.setPositiveButton(
                android.R.string.ok,
                new OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                final String displayName = text1.getText().toString();
                        createDirectory(editText.getText().toString());
                    }
                });

                final BaseActivity activity = (BaseActivity) getActivity();
                final DocumentInfo cwd = activity.getCurrentDirectory();
        builder.setNegativeButton(android.R.string.cancel, null);
        final AlertDialog dialog = builder.create();

                new CreateDirectoryTask(activity, cwd, displayName).executeOnExecutor(
                        ProviderExecutor.forAuthority(cwd.authority));
        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;
                    }
                });
        builder.setNegativeButton(android.R.string.cancel, null);

        return builder.create();

        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> {
+11 −10
Original line number Diff line number Diff line
@@ -195,23 +195,19 @@ public class StandaloneActivity extends BaseActivity {
    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 @@ public class StandaloneActivity extends BaseActivity {
                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