Merge "Fix RenameDocumentFragment crash on rotation" into nyc-dev

This commit is contained in:
Aga Wronska
2016-02-23 18:00:11 +00:00
committed by Android (Google) Code Review

View File

@@ -46,6 +46,7 @@ import android.widget.TextView.OnEditorActionListener;
import com.android.documentsui.BaseActivity;
import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.R;
import com.android.documentsui.Shared;
import com.android.documentsui.Snackbars;
import com.android.documentsui.model.DocumentInfo;
@@ -55,6 +56,7 @@ import com.android.documentsui.model.DocumentInfo;
public class RenameDocumentFragment extends DialogFragment {
private static final String TAG_RENAME_DOCUMENT = "rename_document";
private DocumentInfo mDocument;
private EditText mEditText;
public static void show(FragmentManager fm, DocumentInfo document) {
final RenameDocumentFragment dialog = new RenameDocumentFragment();
@@ -62,6 +64,11 @@ public class RenameDocumentFragment extends DialogFragment {
dialog.show(fm, TAG_RENAME_DOCUMENT);
}
/**
* Creates the dialog UI.
* @param savedInstanceState
* @return
*/
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Context context = getActivity();
@@ -69,8 +76,7 @@ public class RenameDocumentFragment extends DialogFragment {
LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);
final EditText editText = (EditText) view.findViewById(android.R.id.text1);
fillWithFileName(editText, mDocument.displayName);
mEditText = (EditText) view.findViewById(android.R.id.text1);
builder.setTitle(R.string.menu_rename);
builder.setView(view);
@@ -79,7 +85,7 @@ public class RenameDocumentFragment extends DialogFragment {
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
renameDocuments(editText.getText().toString());
renameDocuments(mEditText.getText().toString());
}
});
@@ -87,7 +93,7 @@ public class RenameDocumentFragment extends DialogFragment {
final AlertDialog dialog = builder.create();
editText.setOnEditorActionListener(
mEditText.setOnEditorActionListener(
new OnEditorActionListener() {
@Override
public boolean onEditorAction(
@@ -95,17 +101,50 @@ public class RenameDocumentFragment extends DialogFragment {
if ((actionId == EditorInfo.IME_ACTION_DONE) || (event != null
&& event.getKeyCode() == KeyEvent.KEYCODE_ENTER
&& event.hasNoModifiers())) {
renameDocuments(editText.getText().toString());
renameDocuments(mEditText.getText().toString());
dialog.dismiss();
return true;
}
return false;
}
});
return dialog;
}
/**
* Sets/Restores the data.
* @param savedInstanceState
* @return
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState == null) {
// Fragment created for the first time, we set the text.
// mDocument value was set in show
mEditText.setText(mDocument.displayName);
}
else {
// Fragment restored, text was restored automatically.
// mDocument value needs to be restored.
mDocument = savedInstanceState.getParcelable(Shared.EXTRA_DOC);
}
// Do selection in both cases, because we cleared it.
selectFileName(mEditText);
}
@Override
public void onSaveInstanceState(Bundle outState) {
// Clear selection before storing state and restore it manually,
// because otherwise after rotation selection is displayed with cut/copy menu visible :/
clearFileNameSelection(mEditText);
super.onSaveInstanceState(outState);
outState.putParcelable(Shared.EXTRA_DOC, mDocument);
}
/**
* Validates if string is a proper document name.
* Checks if string is not empty. More rules might be added later.
@@ -120,12 +159,20 @@ public class RenameDocumentFragment extends DialogFragment {
* Fills text field with the file name and selects the name without extension.
*
* @param editText text field to be filled
* @param name full name of the file
*/
private void fillWithFileName(EditText editText, String name) {
editText.setText(name);
int separatorIndex = name.indexOf(".");
editText.setSelection(0, separatorIndex == -1 ? name.length() : separatorIndex);
private void selectFileName(EditText editText) {
String text = editText.getText().toString();
int separatorIndex = text.indexOf(".");
editText.setSelection(0, separatorIndex == -1 ? text.length() : separatorIndex);
}
/**
* Clears selection in text field.
*
* @param editText text field to be cleared.
*/
private void clearFileNameSelection(EditText editText) {
editText.setSelection(0, 0);
}
private void renameDocuments(String newDisplayName) {