package net.coding.program.common; import android.content.Context; import android.view.View; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.JsonHttpResponseHandler; import com.readystatesoftware.viewbadger.BadgeView; import net.coding.program.MyApp; import net.coding.program.common.network.MyAsyncHttpClient; import org.apache.http.Header; import org.json.JSONObject; import java.lang.ref.WeakReference; import java.util.ArrayList; /** * Created by chaochen on 14-9-27. */ public class UnreadNotify { public static void update(Context context) { final MyApp myApp = (MyApp) context.getApplicationContext(); AsyncHttpClient client = MyAsyncHttpClient.createClient(context); client.get(Global.HOST_API + "/user/unread-count", new JsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { try { if (response.getInt("code") == 0) { JSONObject json = response.getJSONObject("data"); Unread unread = new Unread(json); MyApp.sUnread = unread; UnreadNotifySubject.getInstance().notifyObserver(); } } catch (Exception e) { Global.errorLog(e); } } }); } public static void displayNotify(BadgeView badgeView, String messageCount) { if (messageCount.isEmpty()) { badgeView.setVisibility(View.INVISIBLE); } else { badgeView.setText(messageCount); badgeView.setVisibility(View.VISIBLE); } } public interface UnreadNotifyObserver { void update(); } public static class UnreadNotifySubject { private static UnreadNotifySubject sInstance; private ArrayList<WeakReference<UnreadNotifyObserver>> mArray = new ArrayList<>(); private UnreadNotifySubject() { } public static UnreadNotifySubject getInstance() { if (sInstance == null) { sInstance = new UnreadNotifySubject(); } return sInstance; } public void registerObserver(UnreadNotifyObserver observer) { for (WeakReference<UnreadNotifyObserver> item : mArray) { if (item.get() == observer) { return; } } mArray.add(new WeakReference<>(observer)); } public void unregisterObserver(UnreadNotifyObserver observer) { for (int i = 0; i < mArray.size(); ++i) { if (mArray.get(i).get() == observer) { mArray.remove(i); break; } } } public void notifyObserver() { for (int i = 0; i < mArray.size(); ++i) { UnreadNotifyObserver observer = mArray.get(i).get(); if (observer != null) { observer.update(); } } } } }