/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; import android.util.Log; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsEventData; import com.galaxy.meetup.client.android.content.EsProvider; import com.galaxy.meetup.client.android.ui.fragments.HostedEventFragment; /** * * @author sihai * */ public class PhotoCursorLoader extends EsCursorLoader implements Pageable { private final EsAccount mAccount; private final String mAlbumId; private final String mAuthkey; private int mCircleOffset; private boolean mDataSourceIsLoading; private final String mEventId; private String mEventResumeToken; Handler mHandler; private boolean mHasMore; private final int mInitialPageCount; private boolean mIsLoadingMore; private int mLoadLimit; private boolean mNetworkRequestMade; private final android.support.v4.content.Loader.ForceLoadContentObserver mObserver = new android.support.v4.content.Loader.ForceLoadContentObserver(); private boolean mObserverRegistered; private final String mOwnerGaiaId; private boolean mPageable; Pageable.LoadingListener mPageableLoadingListener; private final boolean mPaging; private final String mPhotoOfUserGaiaId; private final String mPhotoUrl; private final String mStreamId; public PhotoCursorLoader(Context context, EsAccount esaccount, String s, String s1, String s2, String s3, String s4, String s5, boolean flag, int i, String s6) { super(context, getNotificationUri(s, s1, s2, s3, s4, s5)); int j = -1; mHandler = new Handler(Looper.getMainLooper()); mLoadLimit = 16; mAccount = esaccount; mAuthkey = s6; mOwnerGaiaId = s; mAlbumId = s1; mEventId = s4; mPhotoOfUserGaiaId = s2; mStreamId = s3; mPhotoUrl = s5; mPaging = flag; mPageable = flag; mInitialPageCount = i; if(mPageable && i != j) j = i * 16; mLoadLimit = j; } private void doNetworkRequest() { // TODO } private static Uri getNotificationUri(String s, String s1, String s2, String s3, String s4, String s5) { // TODO return null; } private void invokeLoadingListener(final boolean isActive) { mHandler.post(new Runnable() { public final void run() { mDataSourceIsLoading = isActive; if(mPageableLoadingListener != null) mPageableLoadingListener.onDataSourceLoading(isActive); } }); } private void updateEventResumeToken() { Cursor cursor = EsEventData.getEvent(getContext(), mAccount, mEventId, HostedEventFragment.DetailsQuery.PROJECTION); if(cursor != null && cursor.moveToFirst()) mEventResumeToken = cursor.getString(3); } public Cursor esLoadInBackground() { if(null == getUri()) { Object obj; Log.w("PhotoCursorLoader", "load NULL URI; return empty cursor"); return new EsMatrixCursor(getProjection()); } boolean flag = true; Object obj; String s2; int i; boolean flag1; String s; StringBuilder stringbuilder; if(mEventId != null) if(mIsLoadingMore && !TextUtils.isEmpty(mEventResumeToken)) doNetworkRequest(); else updateEventResumeToken(); i = mLoadLimit; if(mPageable && mLoadLimit != -1) flag1 = flag; else flag1 = false; s = getSortOrder(); if(s != null) { int j; boolean flag2; boolean flag3; if(flag1) { String s1 = getSortOrder(); stringbuilder = new StringBuilder(); if(s1 == null) s1 = ""; setSortOrder(stringbuilder.append(s1).append(" LIMIT 0, ").append(i).toString()); } obj = super.esLoadInBackground(); if(obj != null) j = ((Cursor) (obj)).getCount(); else j = 0; if(j == i) flag2 = flag; else flag2 = false; if(mPageable && (flag2 || !TextUtils.isEmpty(mEventResumeToken))) flag3 = flag; else flag3 = false; mHasMore = flag3; mIsLoadingMore = false; if(j == 0) { ((Cursor) (obj)).close(); obj = null; } if(obj == null) { mCircleOffset = j; doNetworkRequest(); obj = super.esLoadInBackground(); int k; boolean flag4; boolean flag5; if(obj != null) k = ((Cursor) (obj)).getCount(); else k = 0; if(k == i) flag4 = flag; else flag4 = false; if(k != mCircleOffset || !TextUtils.isEmpty(mEventResumeToken)) flag5 = flag; else flag5 = false; mPageable = flag5; if(!mPageable || !flag4 && TextUtils.isEmpty(mEventResumeToken)) flag = false; mHasMore = flag; } if(flag1) setSortOrder(s); return ((Cursor) (obj)); } else { // TODO return null; } } public final int getCurrentPage() { int i = -1; if(mPageable && mLoadLimit != i) i = mLoadLimit / 16; return i; } final Uri getLoaderUri() { Uri uri = getNotificationUri(mOwnerGaiaId, mAlbumId, mPhotoOfUserGaiaId, mStreamId, mEventId, mPhotoUrl); Uri uri1; if(uri != null) uri1 = EsProvider.appendAccountParameter(uri, mAccount); else uri1 = null; return uri1; } public final boolean hasMore() { boolean flag; if(mPageable && mHasMore) flag = true; else flag = false; return flag; } public final boolean isDataSourceLoading() { return mDataSourceIsLoading; } public final void loadMore() { if(mPageable && mHasMore) { mLoadLimit = 48 + mLoadLimit; mIsLoadingMore = true; onContentChanged(); } } protected final void onAbandon() { if(mObserverRegistered) { getContext().getContentResolver().unregisterContentObserver(mObserver); mObserverRegistered = false; } super.onAbandon(); } protected final void onStartLoading() { if(!mObserverRegistered) { getContext().getContentResolver().registerContentObserver(EsProvider.PHOTO_URI, false, mObserver); mObserverRegistered = true; } super.onStartLoading(); } public final void setLoadingListener(Pageable.LoadingListener loadinglistener) { mPageableLoadingListener = loadinglistener; } }