/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package my.home.lehome.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.Filterable; import android.widget.TextView; import com.squareup.otto.Subscribe; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; import my.home.common.BusProvider; import my.home.domain.events.DLoadAutoCompleteConfEvent; import my.home.domain.events.DShowAutoCompleteItemEvent; import my.home.domain.usecase.AutoCompleteItemUsecase; import my.home.domain.usecase.AutoCompleteItemUsecaseImpl; import my.home.lehome.R; import my.home.model.entities.AutoCompleteItem; /** * Created by legendmohe on 15/2/14. */ public class AutoCompleteAdapter extends BaseAdapter implements Filterable { public static final String TAG = AutoCompleteAdapter.class.getName(); // private static final int MAX_RESULTS = 10; private AutoCompleteItemUsecase mAutoCompleteItemUsecase; private WeakReference<Context> mContext; private WeakReference<onLoadConfListener> mLoadConfListener; private List<AutoCompleteItem> mResultList = new ArrayList<AutoCompleteItem>(); public AutoCompleteAdapter(Context context) { mContext = new WeakReference<Context>(context); mAutoCompleteItemUsecase = new AutoCompleteItemUsecaseImpl(context); registerBus(); } public void initAutoCompleteItem() { mAutoCompleteItemUsecase.setMode(AutoCompleteItemUsecase.MODE_LOAD_CONF) .execute(); } private void registerBus() { BusProvider.getRestBusInstance().register(this); } public void destory() { BusProvider.getRestBusInstance().unregister(this); } @Override public int getCount() { return mResultList.size(); } @Override public AutoCompleteItem getItem(int index) { return mResultList.get(index); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { Context context = mContext.get(); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.auto_complete_item_layout, parent, false); } ((TextView) convertView.findViewById(R.id.content_textview)).setText(getItem(position).getContent()); ((TextView) convertView.findViewById(R.id.type_textview)).setText(getItem(position).getType()); return convertView; } @Override public Filter getFilter() { Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults filterResults = new Filter.FilterResults(); if (constraint != null) { getAutoCompleteItem(constraint.toString().trim()); // Assign the data to the FilterResults filterResults.values = mResultList; filterResults.count = mResultList.size(); } return filterResults; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { // Log.i(TAG, String.valueOf(results.count)); if (results != null && results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } }; return filter; } private void getAutoCompleteItem(String inputSrc) { if (inputSrc.trim().length() != 0) { mAutoCompleteItemUsecase.setMode(AutoCompleteItemUsecase.MODE_GETITEM) .setInputText(inputSrc) .execute(); } } @Subscribe public void onGetAutoCompleteItems(DShowAutoCompleteItemEvent event) { mResultList = event.getResultList(); } @Subscribe public void onConfAutoCompleteItems(DLoadAutoCompleteConfEvent event) { if (mLoadConfListener == null || mLoadConfListener.get() == null) return; if (event.getReturnCode() == DLoadAutoCompleteConfEvent.ERROR) { mLoadConfListener.get().onLoadComplete(false); } else { mLoadConfListener.get().onLoadComplete(true); } } public void setOnLoadConfListener(onLoadConfListener listener) { mLoadConfListener = new WeakReference<onLoadConfListener>(listener); } public List<AutoCompleteItem> getResultList() { return mResultList; } public void setResultList(List<AutoCompleteItem> mResultList) { this.mResultList = mResultList; } public interface onLoadConfListener { public void onLoadComplete(boolean loadSuccess); } }