/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.service; import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.database.DatabaseUtils; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; import android.widget.Toast; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsProvider; /** * * @author sihai * */ public class CircleMembershipManager { private static String sAccountName; private static ConcurrentHashMap sCompletedRequests = new ConcurrentHashMap(); private static Handler sHandler; private static ConcurrentHashMap sPendingRequests = new ConcurrentHashMap(); private static boolean sPeopleListVisible; private static void checkAccount(EsAccount esaccount) { if(!TextUtils.equals(sAccountName, esaccount.getName())) { sPendingRequests.clear(); sAccountName = esaccount.getName(); } } public static boolean isCircleMembershipRequestPending(String s) { return sPendingRequests.containsKey(s); } public static void onPeopleListVisibilityChange(boolean flag) { if(sPeopleListVisible != flag) { sPeopleListVisible = flag; if(flag) sCompletedRequests.clear(); } } public static void onStartAddToCircleRequest(Context context, EsAccount esaccount, String s) { checkAccount(esaccount); sPendingRequests.put(s, ""); context.getContentResolver().notifyChange(EsProvider.CONTACTS_URI, null); } public static void setCircleMembershipResult(Context context, EsAccount esaccount, String s, String s1, boolean flag) { checkAccount(esaccount); sCompletedRequests.put(s, ""); sPendingRequests.remove(s); if(!flag) { AndroidNotification.showCircleAddFailedNotification(context, esaccount, s, s1); context.getContentResolver().notifyChange(EsProvider.CONTACTS_URI, null); } } public static void showToastIfNeeded(final Context context, EsAccount esaccount) { if(sPeopleListVisible || sPendingRequests.size() > 0) { return; } Cursor cursor = null; int i; boolean flag = false; StringBuilder stringbuilder = new StringBuilder(); stringbuilder.append("in_my_circles!= 0 AND person_id IN ("); for(Iterator iterator = sCompletedRequests.keySet().iterator(); iterator.hasNext();) { DatabaseUtils.appendEscapedSQLString(stringbuilder, (String)iterator.next()); stringbuilder.append(','); flag = true; } sCompletedRequests.clear(); if(flag) stringbuilder.setLength(-1 + stringbuilder.length()); stringbuilder.append(")"); try { cursor = context.getContentResolver().query(EsProvider.appendAccountParameter(EsProvider.CONTACTS_URI, esaccount), new String[] { "person_id" }, stringbuilder.toString(), null, null); i = 0; if(null != cursor && cursor.getCount() != 0) { Resources resources = context.getResources(); int j = R.plurals.added_to_circle_notification_message; Object aobj[] = new Object[1]; aobj[0] = Integer.valueOf(i); final String s = resources.getQuantityString(j, i, aobj); if(sHandler == null) sHandler = new Handler(Looper.getMainLooper()); sHandler.post(new Runnable() { public final void run() { Toast.makeText(context, s, 0).show(); } }); } } finally { if(null != cursor) { cursor.close(); } } } }