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