/** * */ package com.gmail.charleszq.picorner.ui.helper; import android.app.Service; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ListView; import android.widget.SearchView; import android.widget.Space; import android.widget.TextView; import com.gmail.charleszq.picorner.R; import com.gmail.charleszq.picorner.ui.command.ICommand; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.nostra13.universalimageloader.core.assist.PauseOnScrollListener; /** * @author charles(charleszq@gmail.com) * */ public abstract class AbstractHiddenListView extends AbstractHiddenView implements OnItemClickListener { protected ListView mListView; protected PullToRefreshListView mPullToRefreshListView; protected Button mCancelButton; protected FilterAdapter mAdapter; protected View mView; protected SearchView mSearchView; protected Space mSpace; protected TextView mLoadingText; protected String mLoadingMessage; private SearchView.OnQueryTextListener mQueryTextListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { if (query == null || query.trim().length() == 0) return false; CommonListTitleFilter filter = new CommonListTitleFilter(mAdapter); filter.filter(query); return true; } @Override public boolean onQueryTextChange(String newText) { if (newText == null || newText.trim().length() == 0) { mAdapter.mFilteredData.clear(); mAdapter.mFilteredData.addAll(mAdapter.mData); mAdapter.notifyDataSetChanged(); return true; } else return false; } }; /* * (non-Javadoc) * * @see * com.gmail.charleszq.picorner.ui.helper.IHiddenView#init(com.gmail.charleszq * .picorner.ui.command.ICommand, * com.gmail.charleszq.picorner.ui.helper.IHiddenView * .IHiddenViewActionListener) */ @Override public void init(ICommand<?> command, IHiddenViewActionListener listener) { super.init(command, listener); Context ctx = (Context) command.getAdapter(Context.class); mView = getView(ctx); View emptyView = mView.findViewById(R.id.empty_friend_view); mLoadingText = (TextView) emptyView.findViewById(R.id.txt_loading_msg); mSpace = (Space) mView.findViewById(R.id.contact_list_space); mSpace.setVisibility(View.VISIBLE); mPullToRefreshListView = (PullToRefreshListView) mView .findViewById(R.id.list_f_friends); mPullToRefreshListView.setMode(Mode.DISABLED); mListView = mPullToRefreshListView.getRefreshableView(); initializeListViewAdapter(ctx, command); if (mLoadingMessage != null) mLoadingText.setText(mLoadingMessage); mListView.setEmptyView(emptyView); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(this); PauseOnScrollListener pauseListener = new PauseOnScrollListener(false, true); mListView.setOnScrollListener(pauseListener); mCancelButton = (Button) mView.findViewById(R.id.btn_cancel_friends); mCancelButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onCancel(); onAction(ACTION_CANCEL); } }); initSearchView(ctx); getData(ctx); } /** * Initializes the search view. * @param ctx */ protected void initSearchView(Context ctx) { // filter mSearchView = (SearchView) mView.findViewById(R.id.contact_filter); mSearchView.setOnQueryTextListener(mQueryTextListener); // hide the soft keyboard InputMethodManager imm = (InputMethodManager) ctx .getSystemService(Service.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mSearchView.getWindowToken(), 0); } /** * Sets the adapter for this list view. * * @param ctx * @param command */ protected void initializeListViewAdapter(Context ctx, ICommand<?> command) { mAdapter = new FriendListAdapter(ctx, command); } @Override public void onItemClick(AdapterView<?> parentView, View view, int position, long id) { Object item = mAdapter.getItem((int)id); onAction(ACTION_JUST_CMD, item); } @Override public View getView(Context ctx) { if (mView == null) { mView = LayoutInflater.from(ctx).inflate(R.layout.contacts_list, null); } return mView; } /** * Gets the data from server side, then populate them into the list. * * @param ctx */ protected abstract void getData(Context ctx); /** * cancels this hidden view. */ protected abstract void onCancel(); }