package carbon.widget; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.support.v7.widget.LinearLayoutManager; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import carbon.Carbon; import carbon.R; import carbon.component.Component; import carbon.recycler.DividerItemDecoration; import carbon.recycler.RowListAdapter; public class AutoCompleteLayout extends LinearLayout { AutoCompleteEditText search; RecyclerView results; protected RowListAdapter<AutoCompleteEditText.FilterResult> adapter = new RowListAdapter<>(AutoCompleteEditText.FilterResult.class, AutoCompleteRow::new); public AutoCompleteLayout(Context context) { super(context); initAutoCompleteLayout(); } public AutoCompleteLayout(Context context, AttributeSet attrs) { super(Carbon.getThemedContext(context, attrs, R.styleable.AutoCompleteLayout, R.attr.carbon_autoCompleteLayoutStyle, R.styleable.AutoCompleteLayout_carbon_theme), attrs, R.attr.carbon_autoCompleteLayoutStyle); initAutoCompleteLayout(); } public AutoCompleteLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(Carbon.getThemedContext(context, attrs, R.styleable.AutoCompleteLayout, R.attr.carbon_autoCompleteLayoutStyle, R.styleable.AutoCompleteLayout_carbon_theme), attrs, defStyleAttr); initAutoCompleteLayout(); } public AutoCompleteLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(Carbon.getThemedContext(context, attrs, R.styleable.AutoCompleteLayout, R.attr.carbon_autoCompleteLayoutStyle, R.styleable.AutoCompleteLayout_carbon_theme), attrs, defStyleAttr, defStyleRes); initAutoCompleteLayout(); } private void initAutoCompleteLayout() { View.inflate(getContext(), R.layout.carbon_autocompletelayout, this); setOrientation(VERTICAL); search = (AutoCompleteEditText) findViewById(R.id.carbon_autoCompleteSearch); results = (RecyclerView) findViewById(R.id.carbon_autoCompleteResults); results.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); ColorDrawable colorDrawable = new ColorDrawable(Carbon.getThemeColor(getContext(), R.attr.carbon_dividerColor)); int dividerWidth = getResources().getDimensionPixelSize(R.dimen.carbon_1dip); results.addItemDecoration(new DividerItemDecoration(colorDrawable, dividerWidth)); results.setAdapter(adapter); search.setOnFilterListener(filteringResults -> { if (filteringResults == null) { adapter.setItems(new ArrayList<>()); return; } adapter.setItems(new ArrayList<>(filteringResults)); }); adapter.setOnItemClickedListener((view, item, position) -> search.performCompletion(item.text.toString())); } public void setDataProvider(AutoCompleteEditText.AutoCompleteDataProvider dataProvider) { search.setDataProvider(dataProvider); } public static class AutoCompleteRow implements Component<AutoCompleteEditText.FilterResult> { private final carbon.widget.TextView text; private final View view; public AutoCompleteRow(ViewGroup parent) { view = LayoutInflater.from(parent.getContext()).inflate(R.layout.carbon_autocompletelayout_row, parent, false); text = (carbon.widget.TextView) view.findViewById(R.id.carbon_autoCompleteLayoutRowText); } @Override public View getView() { return view; } @Override public void bind(AutoCompleteEditText.FilterResult data) { text.setText(data.getItem().toString()); } } }