package org.wikipedia.edit.summaries; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.AutoCompleteTextView; import android.widget.TextView; import org.wikipedia.R; import org.wikipedia.edit.EditSectionActivity; import org.wikipedia.page.PageTitle; import org.wikipedia.views.ViewAnimations; import static org.wikipedia.util.DeviceUtil.hideSoftKeyboard; import static org.wikipedia.util.DeviceUtil.showSoftKeyboard; public class EditSummaryFragment extends Fragment { private PageTitle title; private View editSummaryContainer; private EditSummaryHandler editSummaryHandler; private EditSectionActivity parentActivity; private AutoCompleteTextView summaryText; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { editSummaryContainer = inflater.inflate(R.layout.fragment_preview_summary, container, false); summaryText = (AutoCompleteTextView) editSummaryContainer.findViewById(R.id.edit_summary_edit); // Explicitly enable standard dictionary autocompletion in the edit summary box // We should be able to do this in the XML, but doing it there doesn't work. Thanks Android! summaryText.setInputType(summaryText.getInputType() & (~EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE)); // ...so that clicking the "Done" button on the keyboard will have the effect of // clicking the "Next" button in the actionbar: summaryText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { if ((keyEvent != null && (keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) { parentActivity.clickNextButton(); } return false; } }); return editSummaryContainer; } public void setTitle(PageTitle title) { this.title = title; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (savedInstanceState != null) { summaryText.setText(savedInstanceState.getString("summaryText")); } parentActivity = (EditSectionActivity)getActivity(); editSummaryHandler = new EditSummaryHandler(editSummaryContainer, summaryText, title); } /** * Shows (fades in) the custom edit summary fragment. * When fade-in completes, the keyboard is shown automatically, and the state * of the actionbar button(s) is updated. */ public void show() { ViewAnimations.fadeIn(editSummaryContainer, new Runnable() { @Override public void run() { parentActivity.supportInvalidateOptionsMenu(); summaryText.requestFocus(); showSoftKeyboard(summaryText); } }); } /** * Hides (fades out) the custom edit summary fragment. * When fade-out completes, the keyboard is hidden, and the state of the actionbar * button(s) is updated. */ public void hide() { ViewAnimations.fadeOut(editSummaryContainer, new Runnable() { @Override public void run() { hideSoftKeyboard(parentActivity); parentActivity.supportInvalidateOptionsMenu(); } }); } public boolean isActive() { return editSummaryContainer.getVisibility() == View.VISIBLE; } public boolean handleBackPressed() { if (isActive()) { hide(); return editSummaryHandler.handleBackPressed(); } return false; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("summaryText", summaryText.getText().toString()); } /** * Gets the custom ("other") summary, if any, that the user has entered. * @return Custom summary of the edit. */ public String getSummary() { return summaryText.getText().toString(); } /** * Commits the custom ("other") edit summary that the user may have entered, * so that it remains saved in a drop-down list for future use. */ public void saveSummary() { if (summaryText.length() > 0) { editSummaryHandler.persistSummary(); } } }