package com.mapzen.pelias.widget; import android.content.Context; import android.database.DataSetObserver; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.widget.ListAdapter; import android.widget.ListView; /** * List view used by {@link PeliasSearchView} to display autocomplete items. Adds ability to * show/hide an empty view for when the list has no results. */ public class AutoCompleteListView extends ListView { private View emptyView; /** * Constructs a new list given a context. */ public AutoCompleteListView(Context context) { super(context); } /** * Constructs a new list given a context and attribute set. */ public AutoCompleteListView(Context context, AttributeSet attrs) { super(context, attrs); } /** * Constructs a new list given a context, attribute set, and style. */ public AutoCompleteListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void setEmptyView(View emptyView) { this.emptyView = emptyView; updateEmptyView(); } @Override public View getEmptyView() { return emptyView; } @Override public void setVisibility(int visibility) { super.setVisibility(visibility); updateEmptyView(); } @Override public void setAdapter(final ListAdapter adapter) { super.setAdapter(adapter); adapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { updateEmptyView(); } }); } @Override public void setAnimation(Animation animation) { super.setAnimation(animation); if (emptyView != null && getAdapter() != null && getAdapter().isEmpty()) { emptyView.setAnimation(animation); } } private void updateEmptyView() { if (emptyView == null) { return; } if (getVisibility() != VISIBLE) { emptyView.setVisibility(View.GONE); return; } if (getAdapter() == null || getAdapter().isEmpty()) { emptyView.setVisibility(VISIBLE); } else { emptyView.setVisibility(GONE); } } }