summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/data/UserPresetsManager.java
blob: 114cd3ebcc02b9e7ac8d42a4e2d0cf9ed631681c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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<FilterUserPresetRepresentation> 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<FilterUserPresetRepresentation> 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<FilterUserPresetRepresentation> list = mUserPresets.getAllUserPresets();
        Message msg = mResultHandler.obtainMessage(LOAD_RESULT);
        msg.obj = list;
        mResultHandler.sendMessage(msg);
    }

    private void resultLoad(Message msg) {
        mRepresentations =
                (ArrayList<FilterUserPresetRepresentation>) 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();
    }

}