Merge "Fix RenameDocumentFragment crash on rotation" into nyc-dev
This commit is contained in:
@@ -46,6 +46,7 @@ import android.widget.TextView.OnEditorActionListener;
|
|||||||
import com.android.documentsui.BaseActivity;
|
import com.android.documentsui.BaseActivity;
|
||||||
import com.android.documentsui.DocumentsApplication;
|
import com.android.documentsui.DocumentsApplication;
|
||||||
import com.android.documentsui.R;
|
import com.android.documentsui.R;
|
||||||
|
import com.android.documentsui.Shared;
|
||||||
import com.android.documentsui.Snackbars;
|
import com.android.documentsui.Snackbars;
|
||||||
import com.android.documentsui.model.DocumentInfo;
|
import com.android.documentsui.model.DocumentInfo;
|
||||||
|
|
||||||
@@ -55,6 +56,7 @@ import com.android.documentsui.model.DocumentInfo;
|
|||||||
public class RenameDocumentFragment extends DialogFragment {
|
public class RenameDocumentFragment extends DialogFragment {
|
||||||
private static final String TAG_RENAME_DOCUMENT = "rename_document";
|
private static final String TAG_RENAME_DOCUMENT = "rename_document";
|
||||||
private DocumentInfo mDocument;
|
private DocumentInfo mDocument;
|
||||||
|
private EditText mEditText;
|
||||||
|
|
||||||
public static void show(FragmentManager fm, DocumentInfo document) {
|
public static void show(FragmentManager fm, DocumentInfo document) {
|
||||||
final RenameDocumentFragment dialog = new RenameDocumentFragment();
|
final RenameDocumentFragment dialog = new RenameDocumentFragment();
|
||||||
@@ -62,6 +64,11 @@ public class RenameDocumentFragment extends DialogFragment {
|
|||||||
dialog.show(fm, TAG_RENAME_DOCUMENT);
|
dialog.show(fm, TAG_RENAME_DOCUMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the dialog UI.
|
||||||
|
* @param savedInstanceState
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
Context context = getActivity();
|
Context context = getActivity();
|
||||||
@@ -69,8 +76,7 @@ public class RenameDocumentFragment extends DialogFragment {
|
|||||||
LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
|
LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
|
||||||
View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);
|
View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);
|
||||||
|
|
||||||
final EditText editText = (EditText) view.findViewById(android.R.id.text1);
|
mEditText = (EditText) view.findViewById(android.R.id.text1);
|
||||||
fillWithFileName(editText, mDocument.displayName);
|
|
||||||
builder.setTitle(R.string.menu_rename);
|
builder.setTitle(R.string.menu_rename);
|
||||||
builder.setView(view);
|
builder.setView(view);
|
||||||
|
|
||||||
@@ -79,7 +85,7 @@ public class RenameDocumentFragment extends DialogFragment {
|
|||||||
new OnClickListener() {
|
new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
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();
|
final AlertDialog dialog = builder.create();
|
||||||
|
|
||||||
editText.setOnEditorActionListener(
|
mEditText.setOnEditorActionListener(
|
||||||
new OnEditorActionListener() {
|
new OnEditorActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onEditorAction(
|
public boolean onEditorAction(
|
||||||
@@ -95,17 +101,50 @@ public class RenameDocumentFragment extends DialogFragment {
|
|||||||
if ((actionId == EditorInfo.IME_ACTION_DONE) || (event != null
|
if ((actionId == EditorInfo.IME_ACTION_DONE) || (event != null
|
||||||
&& event.getKeyCode() == KeyEvent.KEYCODE_ENTER
|
&& event.getKeyCode() == KeyEvent.KEYCODE_ENTER
|
||||||
&& event.hasNoModifiers())) {
|
&& event.hasNoModifiers())) {
|
||||||
renameDocuments(editText.getText().toString());
|
renameDocuments(mEditText.getText().toString());
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return dialog;
|
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.
|
* Validates if string is a proper document name.
|
||||||
* Checks if string is not empty. More rules might be added later.
|
* 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.
|
* Fills text field with the file name and selects the name without extension.
|
||||||
*
|
*
|
||||||
* @param editText text field to be filled
|
* @param editText text field to be filled
|
||||||
* @param name full name of the file
|
|
||||||
*/
|
*/
|
||||||
private void fillWithFileName(EditText editText, String name) {
|
private void selectFileName(EditText editText) {
|
||||||
editText.setText(name);
|
String text = editText.getText().toString();
|
||||||
int separatorIndex = name.indexOf(".");
|
int separatorIndex = text.indexOf(".");
|
||||||
editText.setSelection(0, separatorIndex == -1 ? name.length() : separatorIndex);
|
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) {
|
private void renameDocuments(String newDisplayName) {
|
||||||
|
|||||||
Reference in New Issue
Block a user