/** * */ package com.gmail.charleszq.picorner.ui.flickr; import java.util.ArrayList; import java.util.Collection; import java.util.List; import android.app.Service; import android.content.Context; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.ListView; import android.widget.SearchView; import android.widget.SearchView.OnQueryTextListener; import android.widget.Toast; import com.gmail.charleszq.picorner.R; import com.gmail.charleszq.picorner.task.IGeneralTaskDoneListener; import com.gmail.charleszq.picorner.task.flickr.SearchGroupTask; import com.gmail.charleszq.picorner.ui.command.ICommand; import com.gmail.charleszq.picorner.ui.helper.AbstractHiddenListView; import com.gmail.charleszq.picorner.ui.helper.PhotoCollectionItemAdapter; import com.googlecode.flickrjandroid.groups.Group; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2; import com.nostra13.universalimageloader.core.ImageLoader; /** * @author charles(charleszq@gmail.com) * */ public class GroupSearchHiddenListView extends AbstractHiddenListView { /* * The search task. */ private SearchGroupTask mSearchTask; /** * The current query string to search groups. */ private String mQueryString; private int mCurrentPage = 1; private int mActivePage = 1; private IGeneralTaskDoneListener<Collection<Group>> mSearchTaskDoneListener = new IGeneralTaskDoneListener<Collection<Group>>() { @Override public void onTaskDone(Collection<Group> result) { mPullToRefreshListView.onRefreshComplete(); ImageLoader.getInstance().resume(); if (result == null || result.isEmpty()) { if (mActivePage == 1) { mPullToRefreshListView.setVisibility(View.INVISIBLE); Context ctx = (Context) mCommand.getAdapter(Context.class); Toast.makeText(ctx, ctx.getString(R.string.msg_no_groups_found), Toast.LENGTH_SHORT).show(); } return; } mCurrentPage = mActivePage; mAdapter.populateData(result); mSpace.setVisibility(View.GONE); } }; /* * (non-Javadoc) * * @see * com.gmail.charleszq.picorner.ui.helper.AbstractHiddenListView#getData * (android.content.Context) */ @Override protected void getData(Context ctx) { // do nothing here, we need user input the search text first. } /* * (non-Javadoc) * * @see * com.gmail.charleszq.picorner.ui.helper.AbstractHiddenListView#onCancel() */ @Override protected void onCancel() { ImageLoader.getInstance().resume(); if (mSearchTask != null) { mSearchTask.cancel(true); } } @Override protected void initSearchView(final Context ctx) { mSearchView = (SearchView) mView.findViewById(R.id.contact_filter); mSearchView.setQueryHint(ctx .getString(R.string.menu_item_flickr_group_search)); mSearchView.requestFocus(); mSearchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { doSearch(ctx, query); return true; } @Override public boolean onQueryTextChange(String newText) { return false; } }); mPullToRefreshListView.setVisibility(View.INVISIBLE); } private void doSearch(Context ctx, String query) { mCurrentPage = 1; mActivePage = 1; mQueryString = query; List<Group> groups = new ArrayList<Group>(); mAdapter.populateData(groups); // hide the soft keyboard InputMethodManager imm = (InputMethodManager) ctx .getSystemService(Service.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mSearchView.getWindowToken(), 0); mPullToRefreshListView.setVisibility(View.VISIBLE); mPullToRefreshListView.setMode(Mode.BOTH); mSearchTask = new SearchGroupTask(query); mSearchTask.addTaskDoneListener(mSearchTaskDoneListener); mSearchTask.execute(mActivePage); } @Override protected void initializeListViewAdapter(final Context ctx, ICommand<?> command) { this.mAdapter = new PhotoCollectionItemAdapter(ctx, command); mLoadingMessage = ctx.getString(R.string.msg_searching_flickr_group); mActivePage = 1; mCurrentPage = 1; mPullToRefreshListView.setMode(Mode.BOTH); mPullToRefreshListView .setOnRefreshListener(new OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh( PullToRefreshBase<ListView> refreshView) { if (mCurrentPage > 1) { mActivePage = mCurrentPage - 1; runTask(ctx, mActivePage); } else mPullToRefreshListView.onRefreshComplete(); } @Override public void onPullUpToRefresh( PullToRefreshBase<ListView> refreshView) { mActivePage = mCurrentPage + 1; runTask(ctx, mActivePage); } }); } private void runTask(Context ctx, int page) { ImageLoader.getInstance().pause(); mSearchTask = new SearchGroupTask(mQueryString); mSearchTask.addTaskDoneListener(mSearchTaskDoneListener); mSearchTask.execute(page); } }