1fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardpackage com.android.gallery3d.filtershow.data;
2fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
3fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.os.Handler;
4fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.os.HandlerThread;
5fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.os.Message;
6fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.R;
7fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.FilterShowActivity;
8fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation;
9fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.pipeline.ImagePreset;
10fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
11fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport java.util.ArrayList;
12fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
13fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardpublic class UserPresetsManager implements Handler.Callback {
14fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
15fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private static final String LOGTAG = "UserPresetsManager";
16fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
17fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private FilterShowActivity mActivity;
18fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private HandlerThread mHandlerThread = null;
19fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private Handler mProcessingHandler = null;
20fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private FilterStackSource mUserPresets;
21fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
22fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private static final int LOAD = 1;
23fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private static final int LOAD_RESULT = 2;
24fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private static final int SAVE = 3;
25fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private static final int DELETE = 4;
26fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private static final int UPDATE = 5;
27fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
28fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private ArrayList<FilterUserPresetRepresentation> mRepresentations;
29fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
30fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private final Handler mResultHandler = new Handler() {
31fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        @Override
32fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        public void handleMessage(Message msg) {
33fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            switch (msg.what) {
34fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                case LOAD_RESULT:
35fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                    resultLoad(msg);
36fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                    break;
37fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            }
38fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
39fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    };
40fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
41fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    @Override
42fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public boolean handleMessage(Message msg) {
43fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        switch (msg.what) {
44fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            case LOAD:
45fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                processLoad();
46fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                return true;
47fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            case SAVE:
48fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                processSave(msg);
49fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                return true;
50fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            case DELETE:
51fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                processDelete(msg);
52fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                return true;
53fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            case UPDATE:
54fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                processUpdate(msg);
55fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                return true;
56fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
57fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        return false;
58fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
59fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
60fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public UserPresetsManager(FilterShowActivity context) {
61fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mActivity = context;
62fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mHandlerThread = new HandlerThread(LOGTAG,
63fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                android.os.Process.THREAD_PRIORITY_BACKGROUND);
64fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mHandlerThread.start();
65fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mProcessingHandler = new Handler(mHandlerThread.getLooper(), this);
66fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mUserPresets = new FilterStackSource(mActivity);
67fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mUserPresets.open();
68fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
69fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
70fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public ArrayList<FilterUserPresetRepresentation> getRepresentations() {
71fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        return mRepresentations;
72fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
73fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
74fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void load() {
75fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        Message msg = mProcessingHandler.obtainMessage(LOAD);
76fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mProcessingHandler.sendMessage(msg);
77fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
78fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
79fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void close() {
80fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mUserPresets.close();
81fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mHandlerThread.quit();
82fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
83fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
84fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    static class SaveOperation {
85fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        String json;
86fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        String name;
87fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
88fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
890a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard    public void save(ImagePreset preset, String name) {
90fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        Message msg = mProcessingHandler.obtainMessage(SAVE);
91fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        SaveOperation op = new SaveOperation();
928a0072e519157b976d7d1fd34ca2aa1c849a983bJohn Hoford        op.json = preset.getJsonString(ImagePreset.JASON_SAVED);
930a24e52185c4e88dd52b8e072cf7cd1d04f74b0anicolasroard        op.name = name;
94fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        msg.obj = op;
95fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mProcessingHandler.sendMessage(msg);
96fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
97fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
98fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void delete(int id) {
99fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        Message msg = mProcessingHandler.obtainMessage(DELETE);
100fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        msg.arg1 = id;
101fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mProcessingHandler.sendMessage(msg);
102fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
103fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
104fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    static class UpdateOperation {
105fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        int id;
106fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        String name;
107fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
108fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
109fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void update(FilterUserPresetRepresentation representation) {
110fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        Message msg = mProcessingHandler.obtainMessage(UPDATE);
111fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        UpdateOperation op = new UpdateOperation();
112fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        op.id = representation.getId();
113fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        op.name = representation.getName();
114fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        msg.obj = op;
115fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mProcessingHandler.sendMessage(msg);
116fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
117fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
118fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private void processLoad() {
119fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        ArrayList<FilterUserPresetRepresentation> list = mUserPresets.getAllUserPresets();
120fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        Message msg = mResultHandler.obtainMessage(LOAD_RESULT);
121fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        msg.obj = list;
122fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mResultHandler.sendMessage(msg);
123fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
124fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
125fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private void resultLoad(Message msg) {
126fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mRepresentations =
127fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                (ArrayList<FilterUserPresetRepresentation>) msg.obj;
128fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mActivity.updateUserPresetsFromManager();
129fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
130fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
131fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private void processSave(Message msg) {
132fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        SaveOperation op = (SaveOperation) msg.obj;
133fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mUserPresets.insertStack(op.name, op.json.getBytes());
134fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        processLoad();
135fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
136fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
137fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private void processDelete(Message msg) {
138fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        int id = msg.arg1;
139fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mUserPresets.removeStack(id);
140fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        processLoad();
141fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
142fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
143fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private void processUpdate(Message msg) {
144fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        UpdateOperation op = (UpdateOperation) msg.obj;
145fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mUserPresets.updateStackName(op.id, op.name);
146fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        processLoad();
147fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
148fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
149fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard}
150