/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.fragments; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.database.Cursor; import android.database.DataSetObservable; import android.database.DataSetObserver; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.text.TextUtils; import com.galaxy.meetup.client.android.content.EsAccount; /** * * @author sihai * */ public class CircleNameResolver implements LoaderCallbacks { private final EsAccount mAccount; private Map mCircleNames; private final Context mContext; private final DataSetObservable mDataSetObservable; private boolean mLoaded; private final int mLoaderId; private final LoaderManager mLoaderManager; private final StringBuilder mStringBuilder; public CircleNameResolver(Context context, LoaderManager loadermanager, EsAccount esaccount) { this(context, loadermanager, esaccount, 0); } public CircleNameResolver(Context context, LoaderManager loadermanager, EsAccount esaccount, int i) { mDataSetObservable = new DataSetObservable(); mStringBuilder = new StringBuilder(); mContext = context; mLoaderManager = loadermanager; mAccount = esaccount; mLoaderId = i + 2048; } public final synchronized List getCircleNameListForPackedIds(String s) { List arraylist = new ArrayList(); if(mLoaded && !TextUtils.isEmpty(s)) { int i = 0; int j; for(;;) { if(i >= s.length()) { break; } j = s.indexOf('|', i); if(j == -1) j = s.length(); String s1 = (String)mCircleNames.get(s.substring(i, j)); if(s1 != null) arraylist.add(s1); i = j + 1; } } return arraylist; } public final synchronized CharSequence getCircleNamesForPackedIds(String s) { if(mLoaded && !TextUtils.isEmpty(s)) { mStringBuilder.setLength(0); int j; for(int i = 0; i < s.length(); i = j + 1) { j = s.indexOf('|', i); if(j == -1) j = s.length(); String s3 = (String)mCircleNames.get(s.substring(i, j)); if(s3 != null) { if(mStringBuilder.length() != 0) mStringBuilder.append(", "); mStringBuilder.append(s3); } } return mStringBuilder.toString(); } else { return ""; } } public final void initLoader() { mLoaderManager.initLoader(mLoaderId, null, this); } public final boolean isLoaded() { return mLoaded; } public final Loader onCreateLoader(int i, Bundle bundle) { return new CircleListLoader(mContext, mAccount, 0, new String[] { "circle_id", "circle_name" }); } public final void onLoadFinished(Loader loader, Object obj) { Cursor cursor = (Cursor)obj; HashMap hashmap = new HashMap(); if(cursor != null && cursor.moveToFirst()) do hashmap.put(cursor.getString(0), cursor.getString(1)); while(cursor.moveToNext()); mCircleNames = hashmap; mLoaded = true; mDataSetObservable.notifyChanged(); } public final void onLoaderReset(Loader loader) { mDataSetObservable.notifyInvalidated(); } public final void registerObserver(DataSetObserver datasetobserver) { mDataSetObservable.registerObserver(datasetobserver); } }