package com.android.gallery3d.filtershow.data; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import com.android.gallery3d.R; import com.android.gallery3d.filtershow.FilterShowActivity; import com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation; import com.android.gallery3d.filtershow.pipeline.ImagePreset; import java.util.ArrayList; public class UserPresetsManager implements Handler.Callback { private static final String LOGTAG = "UserPresetsManager"; private FilterShowActivity mActivity; private HandlerThread mHandlerThread = null; private Handler mProcessingHandler = null; private FilterStackSource mUserPresets; private static final int LOAD = 1; private static final int LOAD_RESULT = 2; private static final int SAVE = 3; private static final int DELETE = 4; private static final int UPDATE = 5; private ArrayList mRepresentations; private final Handler mResultHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case LOAD_RESULT: resultLoad(msg); break; } } }; @Override public boolean handleMessage(Message msg) { switch (msg.what) { case LOAD: processLoad(); return true; case SAVE: processSave(msg); return true; case DELETE: processDelete(msg); return true; case UPDATE: processUpdate(msg); return true; } return false; } public UserPresetsManager(FilterShowActivity context) { mActivity = context; mHandlerThread = new HandlerThread(LOGTAG, android.os.Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start(); mProcessingHandler = new Handler(mHandlerThread.getLooper(), this); mUserPresets = new FilterStackSource(mActivity); mUserPresets.open(); } public ArrayList getRepresentations() { return mRepresentations; } public void load() { Message msg = mProcessingHandler.obtainMessage(LOAD); mProcessingHandler.sendMessage(msg); } public void close() { mUserPresets.close(); mHandlerThread.quit(); } static class SaveOperation { String json; String name; } public void save(ImagePreset preset) { Message msg = mProcessingHandler.obtainMessage(SAVE); SaveOperation op = new SaveOperation(); op.json = preset.getJsonString(mActivity.getString(R.string.saved)); op.name= mActivity.getString(R.string.filtershow_new_preset); msg.obj = op; mProcessingHandler.sendMessage(msg); } public void delete(int id) { Message msg = mProcessingHandler.obtainMessage(DELETE); msg.arg1 = id; mProcessingHandler.sendMessage(msg); } static class UpdateOperation { int id; String name; } public void update(FilterUserPresetRepresentation representation) { Message msg = mProcessingHandler.obtainMessage(UPDATE); UpdateOperation op = new UpdateOperation(); op.id = representation.getId(); op.name = representation.getName(); msg.obj = op; mProcessingHandler.sendMessage(msg); } private void processLoad() { ArrayList list = mUserPresets.getAllUserPresets(); Message msg = mResultHandler.obtainMessage(LOAD_RESULT); msg.obj = list; mResultHandler.sendMessage(msg); } private void resultLoad(Message msg) { mRepresentations = (ArrayList) msg.obj; mActivity.updateUserPresetsFromManager(); } private void processSave(Message msg) { SaveOperation op = (SaveOperation) msg.obj; mUserPresets.insertStack(op.name, op.json.getBytes()); processLoad(); } private void processDelete(Message msg) { int id = msg.arg1; mUserPresets.removeStack(id); processLoad(); } private void processUpdate(Message msg) { UpdateOperation op = (UpdateOperation) msg.obj; mUserPresets.updateStackName(op.id, op.name); processLoad(); } }