package org.wikipedia.edit.summaries; import android.content.ContentProviderClient; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.RemoteException; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AutoCompleteTextView; import android.widget.FilterQueryProvider; import android.widget.TextView; import org.wikipedia.WikipediaApp; import org.wikipedia.database.contract.EditHistoryContract; import org.wikipedia.page.PageTitle; import org.wikipedia.util.ContentProviderClientCompat; import java.util.Date; import static org.wikipedia.util.L10nUtil.setConditionalTextDirection; public class EditSummaryHandler { private final View container; private final AutoCompleteTextView summaryEdit; public EditSummaryHandler(@NonNull final View container, @NonNull AutoCompleteTextView summaryEditText, @NonNull PageTitle title) { this.container = container; this.summaryEdit = summaryEditText; this.container.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { summaryEdit.requestFocus(); } }); EditSummaryAdapter adapter = new EditSummaryAdapter(container.getContext(), null, true); summaryEdit.setAdapter(adapter); adapter.setFilterQueryProvider(new FilterQueryProvider() { @Override public Cursor runQuery(CharSequence charSequence) { ContentProviderClient client = EditSummary.DATABASE_TABLE .acquireClient(container.getContext().getApplicationContext()); Uri uri = EditHistoryContract.Summary.URI; final String[] projection = null; String selection = EditHistoryContract.Summary.SUMMARY.qualifiedName() + " like ?"; String[] selectionArgs = new String[] {charSequence + "%"}; String order = EditHistoryContract.Summary.ORDER_MRU; try { return client.query(uri, projection, selection, selectionArgs, order); } catch (RemoteException e) { throw new RuntimeException(e); } finally { ContentProviderClientCompat.close(client); } } }); setConditionalTextDirection(summaryEdit, title.getWikiSite().languageCode()); } public void show() { container.setVisibility(View.VISIBLE); } public void persistSummary() { WikipediaApp app = (WikipediaApp)container.getContext().getApplicationContext(); EditSummary summary = new EditSummary(summaryEdit.getText().toString(), new Date()); app.getDatabaseClient(EditSummary.class).upsert(summary, EditHistoryContract.Summary.SELECTION); } public boolean handleBackPressed() { if (container.getVisibility() == View.VISIBLE) { container.setVisibility(View.GONE); return true; } return false; } private class EditSummaryAdapter extends android.support.v4.widget.CursorAdapter { EditSummaryAdapter(Context context, Cursor c, boolean autoRequery) { super(context, c, autoRequery); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return LayoutInflater.from(context) .inflate(android.R.layout.simple_list_item_1, parent, false); } @Override public void bindView(View convertView, Context context, Cursor cursor) { ((TextView)convertView).setText(convertToString(cursor)); } @Override public CharSequence convertToString(Cursor cursor) { return EditSummary.DATABASE_TABLE.fromCursor(cursor).getSummary(); } } }