/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.service; import android.content.Context; import android.os.Handler; import android.os.Handler.Callback; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; /** * * @author sihai * */ public class ResourceManager implements Callback { private final Context mContext; private LoaderThread mLoaderThread; private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper(), this); public final Context getContext() { return mContext; } public void onFirstConsumerRegistered(Resource resource) { } public void onLastConsumerUnregistered(Resource resource) { } @Override public boolean handleMessage(Message message) { if(0 == message.what) { Resource resource3 = (Resource)message.obj; resource3.mStatus = message.arg1; resource3.notifyConsumers(); } else if(1 == message.what) { ResourceData resourcedata = (ResourceData)message.obj; Resource resource1 = resourcedata.resource; resource1.mResource = resourcedata.data; resource1.mStatus = message.arg1; resource1.notifyConsumers(); } else if(2 == message.what) { Resource resource2 = (Resource)message.obj; resource2.mStatus = message.arg1; resource2.mHttpStatusCode = message.arg2; resource2.notifyConsumers(); } else if(3 == message.what) { Resource resource = (Resource)message.obj; resource.mResourceType = message.arg1; resource.notifyConsumers(); } else { } return true; } protected ResourceManager(Context context) { mContext = context; } protected final void deliverHttpError(Resource resource, int i, int j) { mMainThreadHandler.sendMessage(mMainThreadHandler.obtainMessage(2, 6, j, resource)); } protected final void deliverResourceContent(Resource resource, int i, Object obj) { mMainThreadHandler.sendMessage(mMainThreadHandler.obtainMessage(1, i, 0, new ResourceData(resource, obj))); } protected final void deliverResourceStatus(Resource resource, int i) { mMainThreadHandler.sendMessage(mMainThreadHandler.obtainMessage(0, i, 0, resource)); } protected final void deliverResourceType(Resource resource, int i) { mMainThreadHandler.sendMessage(mMainThreadHandler.obtainMessage(3, i, 0, resource)); } protected final void loadResource(Resource resource) { if(mLoaderThread == null) { mLoaderThread = new LoaderThread(); mLoaderThread.start(); } mLoaderThread.loadResource(resource); } private static final class LoaderThread extends HandlerThread implements android.os.Handler.Callback { public final boolean handleMessage(Message message) { ((Resource) message.obj).load(); return true; } public final void loadResource(Resource resource) { if (mLoaderThreadHandler == null) mLoaderThreadHandler = new Handler(getLooper(), this); mLoaderThreadHandler.sendMessage(mLoaderThreadHandler .obtainMessage(0, resource)); } public final void run() { android.os.Process.setThreadPriority(10); super.run(); } private Handler mLoaderThreadHandler; public LoaderThread() { super("ImageLoader"); } } private static final class ResourceData { Object data; Resource resource; public ResourceData(Resource resource1, Object obj) { resource = resource1; data = obj; } } }