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 Original line Diff line number Diff line
@@ -180,7 +180,7 @@ abstract class BaseActivity extends Activity {
            onBackPressed();
            onBackPressed();
            return true;
            return true;
        } else if (id == R.id.menu_create_dir) {
        } else if (id == R.id.menu_create_dir) {
            CreateDirectoryFragment.show(getFragmentManager());
            showCreateDirectoryDialog();
            return true;
            return true;
        } else if (id == R.id.menu_search) {
        } else if (id == R.id.menu_search) {
            return false;
            return false;
@@ -217,6 +217,23 @@ abstract class BaseActivity extends Activity {
        return super.onOptionsItemSelected(item);
        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
     * Call this when directory changes. Prior to root fragment update
     * the (abstract) directoryChanged method will be called.
     * the (abstract) directoryChanged method will be called.
+38 −13
Original line number Original line Diff line number Diff line
@@ -33,9 +33,13 @@ import android.os.Bundle;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Document;
import android.util.Log;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
import android.widget.Toast;


import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.DocumentInfo;
@@ -64,26 +68,47 @@ public class CreateDirectoryFragment extends DialogFragment {
        final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
        final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());


        final View view = dialogInflater.inflate(R.layout.dialog_create_dir, null, false);
        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.setTitle(R.string.menu_create_dir);
        builder.setView(view);
        builder.setView(view);


        builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
        builder.setPositiveButton(
                android.R.string.ok,
                new OnClickListener() {
                    @Override
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    public void onClick(DialogInterface dialog, int which) {
                final String displayName = text1.getText().toString();
                        createDirectory(editText.getText().toString());
                    }
                });


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


                new CreateDirectoryTask(activity, cwd, displayName).executeOnExecutor(
        editText.setOnEditorActionListener(
                        ProviderExecutor.forAuthority(cwd.authority));
                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> {
    private class CreateDirectoryTask extends AsyncTask<Void, Void, DocumentInfo> {
+11 −10
Original line number Original line Diff line number Diff line
@@ -195,23 +195,19 @@ public class StandaloneActivity extends BaseActivity {
    public boolean onPrepareOptionsMenu(Menu menu) {
    public boolean onPrepareOptionsMenu(Menu menu) {
        boolean shown = super.onPrepareOptionsMenu(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 createDir = menu.findItem(R.id.menu_create_dir);
        final MenuItem advanced = menu.findItem(R.id.menu_advanced);
        final MenuItem advanced = menu.findItem(R.id.menu_advanced);
        final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
        final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
        final MenuItem settings = menu.findItem(R.id.menu_settings);
        final MenuItem settings = menu.findItem(R.id.menu_settings);


        createDir.setVisible(cwd != null
        boolean canCreateDir = canCreateDirectory();
                && cwd.isCreateSupported()
                && !mSearchManager.isSearching()
                && !root.isDownloads());


        createDir.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        createDir.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        createDir.setVisible(canCreateDir);

        fileSize.setVisible(true);
        fileSize.setVisible(true);
        advanced.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;
        return shown;
    }
    }
@@ -301,13 +297,18 @@ public class StandaloneActivity extends BaseActivity {
                dir = DirectoryFragment.get(getFragmentManager());
                dir = DirectoryFragment.get(getFragmentManager());
                dir.copyToClipboard();
                dir.copyToClipboard();
                return true;
                return true;
            case KeyEvent.KEYCODE_N:
                if (event.isShiftPressed() && canCreateDirectory()) {
                    showCreateDirectoryDialog();
                    return true;
                }
            case KeyEvent.KEYCODE_V:
            case KeyEvent.KEYCODE_V:
                dir = DirectoryFragment.get(getFragmentManager());
                dir = DirectoryFragment.get(getFragmentManager());
                dir.pasteFromClipboard();
                dir.pasteFromClipboard();
                return true;
                return true;
            default:
                return super.onKeyUp(keyCode, event);
        }
        }

        return super.onKeyUp(keyCode, event);
    }
    }


    @Override
    @Override