/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.fragments;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.galaxy.meetup.client.android.EsMatrixCursor;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.common.EsCompositeCursorAdapter;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.ui.view.ColumnGridView;
import com.galaxy.meetup.client.android.ui.view.SquareListItemView;
import com.galaxy.meetup.client.android.ui.view.SquareListItemView.OnItemClickListener;
/**
*
* @author sihai
*
*/
public class SquareSearchAdapter extends EsCompositeCursorAdapter implements
LoaderCallbacks, OnItemClickListener {
private static int sMinWidth;
protected final EsAccount mAccount;
private boolean mError;
private final Handler mHandler;
private boolean mLandscape;
protected SearchListAdapterListener mListener;
private final LoaderManager mLoaderManager;
private boolean mLoading;
private boolean mNotFound;
protected String mQuery;
private SquareSearchResults mResults;
private boolean mResultsPreserved;
private boolean mShowProgressWhenEmpty;
private final int mSquaresLoaderId;
public SquareSearchAdapter(Context context, FragmentManager fragmentmanager, LoaderManager loadermanager, EsAccount esaccount)
{
this(context, fragmentmanager, loadermanager, esaccount, 0);
}
private SquareSearchAdapter(Context context, FragmentManager fragmentmanager, LoaderManager loadermanager, EsAccount esaccount, int i) {
super(context);
boolean flag = true;
mShowProgressWhenEmpty = flag;
mResults = new SquareSearchResults(HostedSquareListFragment.Query.PROJECTION);
mHandler = new Handler() {
public final void handleMessage(Message message) {
if(0 == message.what) {
showEmptySearchResults();
} else if(1 == message.what) {
mLoading = true;
updateSearchStatus();
if(mListener != null)
mListener.onSearchListAdapterStateChange();
}
}
};
for(int j = 0; j < 2; j++)
addPartition(false, false);
mSquaresLoaderId = 1024;
SearchResultsFragment searchresultsfragment = (SearchResultsFragment)fragmentmanager.findFragmentByTag("square_search_results");
if(searchresultsfragment == null)
{
searchresultsfragment = new SearchResultsFragment();
fragmentmanager.beginTransaction().add(searchresultsfragment, "square_search_results").commitAllowingStateLoss();
} else
{
SquareSearchResults squaresearchresults = searchresultsfragment.getSquareSearchResults();
if(squaresearchresults != null)
{
mResults = squaresearchresults;
mQuery = mResults.getQuery();
mResultsPreserved = flag;
}
}
searchresultsfragment.setSquareSearchResults(mResults);
mLoaderManager = loadermanager;
mAccount = esaccount;
if(context.getResources().getConfiguration().orientation != 2)
flag = false;
mLandscape = flag;
if(sMinWidth == 0)
sMinWidth = context.getResources().getDimensionPixelSize(R.dimen.square_card_min_width);
}
private void updateSearchStatus() {
EsMatrixCursor esmatrixcursor = new EsMatrixCursor(new String[] {
"_id"
});
if(!TextUtils.isEmpty(mQuery) && mQuery.trim().length() >= 2) {
if(mError) {
Object aobj2[] = new Object[1];
aobj2[0] = Integer.valueOf(3);
esmatrixcursor.addRow(aobj2);
} else {
if(mNotFound)
{
Object aobj1[] = new Object[1];
aobj1[0] = Integer.valueOf(2);
esmatrixcursor.addRow(aobj1);
} else
if(mLoading && (mShowProgressWhenEmpty || mResults.getCount() > 0))
{
Object aobj[] = new Object[1];
aobj[0] = Integer.valueOf(1);
esmatrixcursor.addRow(aobj);
}
}
}
if(esmatrixcursor.getCount() != 0)
showEmptySearchResults();
changeCursor(1, esmatrixcursor);
return;
}
protected final void bindView(View view, int i, Cursor cursor, int j) {
byte byte0;
byte byte1;
byte byte2;
int k;
int l;
if(0 == i) {
((SquareListItemView)view).init(cursor, this, true, false);
if(j == -1 + cursor.getCount() && mResults.hasMoreResults())
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
});
} else if(1 == i) {
byte0 = 8;
byte1 = 8;
byte2 = 8;
int value = cursor.getInt(0);
if(1 == value) {
byte0 = 0;
} else if(2 == value) {
byte1 = 0;
} else if(3 == value) {
byte2 = 0;
}
view.findViewById(R.id.loading).setVisibility(byte0);
view.findViewById(R.id.not_found).setVisibility(byte1);
view.findViewById(R.id.error).setVisibility(byte2);
}
if(mLandscape)
k = 1;
else
k = 2;
if(mLandscape)
l = sMinWidth;
else
l = -2;
view.setLayoutParams(new ColumnGridView.LayoutParams(k, l, 1, 1));
return;
}
protected final int getItemViewType(int i, int j)
{
return i;
}
public final int getItemViewTypeCount()
{
return 2;
}
public final boolean isEmpty()
{
return TextUtils.isEmpty(mQuery);
}
protected final View newView(Context context, int partion, Cursor cursor, int position, ViewGroup parent) {
LayoutInflater layoutinflater = LayoutInflater.from(context);
View view = null;
if(1 == partion) {
view = layoutinflater.inflate(R.layout.square_search_status_card, parent, false);
} else {
view = layoutinflater.inflate(R.layout.square_list_item_view, parent, false);
}
return view;
}
public final void onClick(String s)
{
if(mListener != null)
mListener.onSquareSelected(s);
}
public final void onCreate(Bundle bundle)
{
if(bundle != null)
{
bundle.setClassLoader(getClass().getClassLoader());
mQuery = bundle.getString("search_list_adapter.query");
if(bundle.containsKey("search_list_adapter.results") && !mResultsPreserved)
mResults = (SquareSearchResults)bundle.getParcelable("search_list_adapter.results");
}
}
public final Loader onCreateLoader(int i, Bundle bundle)
{
SquareSearchLoader squaresearchloader;
if(i == mSquaresLoaderId)
{
Context context = getContext();
EsAccount esaccount = mAccount;
String[] _tmp = HostedSquareListFragment.Query.PROJECTION;
squaresearchloader = new SquareSearchLoader(context, esaccount, mQuery, 2, mResults.getContinuationToken());
} else
{
squaresearchloader = null;
}
return squaresearchloader;
}
public final void onInvitationDismissed(String s)
{
}
public final void onInviterImageClick(String s)
{
}
public final void onLoadFinished(Loader loader, Object obj)
{
boolean flag = true;
SquareSearchLoaderResults squaresearchloaderresults = (SquareSearchLoaderResults)obj;
if(loader.getId() == mSquaresLoaderId)
{
if(squaresearchloaderresults != SquareSearchLoader.ABORTED)
{
mHandler.removeMessages(1);
boolean flag1;
Cursor cursor;
if(squaresearchloaderresults == null)
flag1 = flag;
else
flag1 = false;
mError = flag1;
if(mError)
mLoading = false;
else
if(TextUtils.equals(squaresearchloaderresults.getToken(), mResults.getContinuationToken()) && (mResults.isEmpty() || mResults.hasMoreResults()))
{
mLoading = false;
String s = squaresearchloaderresults.getNextToken();
mResults.setContinuationToken(s);
SquareSearchResults squaresearchresults = mResults;
boolean flag2;
if(!TextUtils.isEmpty(s))
flag2 = flag;
else
flag2 = false;
squaresearchresults.setHasMoreResults(flag2);
mResults.addResults(squaresearchloaderresults.getResults());
if(mResults.getCount() != 0)
flag = false;
mNotFound = flag;
}
mHandler.removeMessages(0);
cursor = mResults.getCursor();
if(cursor.getCount() == 0)
mHandler.sendEmptyMessageDelayed(0, 500L);
else
changeCursor(0, cursor);
}
updateSearchStatus();
if(mListener != null)
mListener.onSearchListAdapterStateChange();
}
}
public final void onLoaderReset(Loader loader)
{
}
public final void onSaveInstanceState(Bundle bundle)
{
bundle.putString("search_list_adapter.query", mQuery);
if(mResults.isParcelable())
bundle.putParcelable("search_list_adapter.results", mResults);
}
public final void onStart()
{
Bundle bundle = new Bundle();
bundle.putString("query", mQuery);
mLoaderManager.initLoader(mSquaresLoaderId, bundle, this);
updateSearchStatus();
}
public final void onStop()
{
mHandler.removeMessages(0);
}
public final void setListener(SearchListAdapterListener searchlistadapterlistener)
{
mListener = searchlistadapterlistener;
}
public final void setQueryString(String s) {
if(TextUtils.equals(mQuery, s))
return;
mResults.setQueryString(s);
mHandler.removeMessages(0);
mHandler.removeMessages(1);
mQuery = s;
if(TextUtils.isEmpty(s))
{
mLoaderManager.destroyLoader(mSquaresLoaderId);
clearPartitions();
if(mListener != null)
mListener.onSearchListAdapterStateChange();
} else
{
Bundle bundle = new Bundle();
bundle.putString("query", mQuery);
mError = false;
mNotFound = false;
mLoading = false;
mHandler.sendEmptyMessageDelayed(1, 300L);
mLoaderManager.destroyLoader(mSquaresLoaderId);
mLoaderManager.initLoader(mSquaresLoaderId, bundle, this);
updateSearchStatus();
}
}
protected final void showEmptySearchResults()
{
mHandler.removeMessages(0);
Cursor cursor = mResults.getCursor();
if(cursor.getCount() == 0)
changeCursor(0, cursor);
}
//==================================================================================================================
// Inner class
//==================================================================================================================
public interface SearchListAdapterListener
{
public abstract void onSearchListAdapterStateChange();
public abstract void onSquareSelected(String s);
}
public static class SearchResultsFragment extends Fragment {
private SquareSearchResults mResults;
public SearchResultsFragment()
{
setRetainInstance(true);
}
public final SquareSearchResults getSquareSearchResults()
{
return mResults;
}
public final void setSquareSearchResults(SquareSearchResults squaresearchresults)
{
mResults = squaresearchresults;
}
}
}