diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 77e8cba9e6..10f6f9ba75 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -357,7 +357,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements boolean retval = true; switch (item.getItemId()) { case R.id.action_create_dir: { - EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.uploader_info_dirname), "", this); + EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.uploader_info_dirname), "", -1, -1, this); dialog.show(getSupportFragmentManager(), "createdirdialog"); break; } diff --git a/src/com/owncloud/android/ui/dialog/EditNameDialog.java b/src/com/owncloud/android/ui/dialog/EditNameDialog.java index 069eedb775..a5485244e4 100644 --- a/src/com/owncloud/android/ui/dialog/EditNameDialog.java +++ b/src/com/owncloud/android/ui/dialog/EditNameDialog.java @@ -26,6 +26,7 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager.LayoutParams; +import android.widget.EditText; import android.widget.TextView; import com.actionbarsherlock.app.SherlockDialogFragment; @@ -42,8 +43,10 @@ public class EditNameDialog extends SherlockDialogFragment implements DialogInte public static final String TAG = EditNameDialog.class.getSimpleName(); - protected static final String ARG_TITLE = "title"; - protected static final String ARG_NAME = "name"; + protected static final String ARG_TITLE = "TITLE"; + protected static final String ARG_NAME = "NAME"; + protected static final String ARG_SELECTION_START = "SELECTION_START"; + protected static final String ARG_SELECTION_END = "SELECTION_END"; private String mNewFilename; private boolean mResult; @@ -52,16 +55,20 @@ public class EditNameDialog extends SherlockDialogFragment implements DialogInte /** * Public factory method to get dialog instances. * - * @param title Text to show as title in the dialog. - * @param name Optional text to include in the text input field when the dialog is shown. - * @param listener Instance to notify when the dialog is dismissed. + * @param title Text to show as title in the dialog. + * @param name Optional text to include in the text input field when the dialog is shown. + * @param listener Instance to notify when the dialog is dismissed. + * @param selectionStart Index to the first character to be selected in the input field; negative value for none + * @param selectionEnd Index to the last character to be selected in the input field; negative value for none * @return New dialog instance, ready to show. */ - static public EditNameDialog newInstance(String title, String name, EditNameDialogListener listener) { + static public EditNameDialog newInstance(String title, String name, int selectionStart, int selectionEnd, EditNameDialogListener listener) { EditNameDialog f = new EditNameDialog(); Bundle args = new Bundle(); args.putString(ARG_TITLE, title); args.putString(ARG_NAME, name); + args.putInt(ARG_SELECTION_START, selectionStart); + args.putInt(ARG_SELECTION_END, selectionEnd); f.setArguments(args); f.setOnDismissListener(listener); return f; @@ -81,7 +88,7 @@ public class EditNameDialog extends SherlockDialogFragment implements DialogInte // Inflate the layout for the dialog LayoutInflater inflater = getSherlockActivity().getLayoutInflater(); View v = inflater.inflate(R.layout.edit_box_dialog, null); // null parent view because it will go in the dialog layout - TextView inputText = ((TextView)v.findViewById(R.id.user_input)); + EditText inputText = ((EditText)v.findViewById(R.id.user_input)); inputText.setText(currentName); // Set it to the dialog @@ -99,6 +106,11 @@ public class EditNameDialog extends SherlockDialogFragment implements DialogInte Dialog d = builder.create(); inputText.requestFocus(); + int selectionStart = getArguments().getInt(ARG_SELECTION_START, -1); + int selectionEnd = getArguments().getInt(ARG_SELECTION_END, -1); + if (selectionStart >= 0 && selectionEnd >= 0) { + inputText.setSelection(Math.min(selectionStart, selectionEnd), Math.max(selectionStart, selectionEnd)); + } d.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); return d; } diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java index 96218a6eff..d08aace852 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -364,7 +364,10 @@ public class FileDetailFragment extends SherlockFragment implements break; } case R.id.fdRenameBtn: { - EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), mFile.getFileName(), this); + String fileName = mFile.getFileName(); + int extensionStart = mFile.isDirectory() ? -1 : fileName.lastIndexOf("."); + int selectionEnd = (extensionStart >= 0) ? extensionStart : fileName.length(); + EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), fileName, 0, selectionEnd, this); dialog.show(getFragmentManager(), "nameeditdialog"); break; } diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index fe25025d43..41c29f4377 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -53,7 +53,6 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; -import android.support.v4.app.DialogFragment; import android.util.Log; import android.view.ContextMenu; import android.view.MenuInflater; @@ -241,7 +240,10 @@ public class OCFileListFragment extends FragmentListView implements EditNameDial mTargetFile = (OCFile) mAdapter.getItem(info.position); switch (item.getItemId()) { case R.id.action_rename_file: { - EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), mTargetFile.getFileName(), this); + String fileName = mTargetFile.getFileName(); + int extensionStart = mTargetFile.isDirectory() ? -1 : fileName.lastIndexOf("."); + int selectionEnd = (extensionStart >= 0) ? extensionStart : fileName.length(); + EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), fileName, 0, selectionEnd, this); dialog.show(getFragmentManager(), EditNameDialog.TAG); return true; }