OSDN Git Service

Revert "Revert "Make Gallery2 use platform RenderScript""
[android-x86/packages-apps-Gallery2.git] / src / com / android / gallery3d / filtershow / data / FilterStackSource.java
1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.gallery3d.filtershow.data;
17
18 import android.content.ContentValues;
19 import android.content.Context;
20 import android.database.Cursor;
21 import android.database.sqlite.SQLiteDatabase;
22 import android.database.sqlite.SQLiteException;
23 import android.util.Log;
24 import android.util.Pair;
25
26 import com.android.gallery3d.filtershow.data.FilterStackDBHelper.FilterStack;
27 import com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation;
28 import com.android.gallery3d.filtershow.pipeline.ImagePreset;
29
30 import java.util.ArrayList;
31 import java.util.List;
32
33 public class FilterStackSource {
34     private static final String LOGTAG = "FilterStackSource";
35
36     private SQLiteDatabase database = null;
37     private final FilterStackDBHelper dbHelper;
38
39     public FilterStackSource(Context context) {
40         dbHelper = new FilterStackDBHelper(context);
41     }
42
43     public void open() {
44         try {
45             database = dbHelper.getWritableDatabase();
46         } catch (SQLiteException e) {
47             Log.w(LOGTAG, "could not open database", e);
48         }
49     }
50
51     public void close() {
52         database = null;
53         dbHelper.close();
54     }
55
56     public boolean insertStack(String stackName, byte[] stackBlob) {
57         boolean ret = true;
58         ContentValues val = new ContentValues();
59         val.put(FilterStack.STACK_ID, stackName);
60         val.put(FilterStack.FILTER_STACK, stackBlob);
61         database.beginTransaction();
62         try {
63             ret = (-1 != database.insert(FilterStack.TABLE, null, val));
64             database.setTransactionSuccessful();
65         } finally {
66             database.endTransaction();
67         }
68         return ret;
69     }
70
71     public void updateStackName(int id, String stackName) {
72         ContentValues val = new ContentValues();
73         val.put(FilterStack.STACK_ID, stackName);
74         database.beginTransaction();
75         try {
76             database.update(FilterStack.TABLE, val, FilterStack._ID + " = ?",
77                     new String[] { "" + id});
78             database.setTransactionSuccessful();
79         } finally {
80             database.endTransaction();
81         }
82     }
83
84     public boolean removeStack(int id) {
85         boolean ret = true;
86         database.beginTransaction();
87         try {
88             ret = (0 != database.delete(FilterStack.TABLE, FilterStack._ID + " = ?",
89                     new String[] { "" + id }));
90             database.setTransactionSuccessful();
91         } finally {
92             database.endTransaction();
93         }
94         return ret;
95     }
96
97     public void removeAllStacks() {
98         database.beginTransaction();
99         try {
100             database.delete(FilterStack.TABLE, null, null);
101             database.setTransactionSuccessful();
102         } finally {
103             database.endTransaction();
104         }
105     }
106
107     public byte[] getStack(String stackName) {
108         byte[] ret = null;
109         Cursor c = null;
110         database.beginTransaction();
111         try {
112             c = database.query(FilterStack.TABLE,
113                     new String[] { FilterStack.FILTER_STACK },
114                     FilterStack.STACK_ID + " = ?",
115                     new String[] { stackName }, null, null, null, null);
116             if (c != null && c.moveToFirst() && !c.isNull(0)) {
117                 ret = c.getBlob(0);
118             }
119             database.setTransactionSuccessful();
120         } finally {
121             if (c != null) {
122                 c.close();
123             }
124             database.endTransaction();
125         }
126         return ret;
127     }
128
129     public ArrayList<FilterUserPresetRepresentation> getAllUserPresets() {
130         ArrayList<FilterUserPresetRepresentation> ret =
131                 new ArrayList<FilterUserPresetRepresentation>();
132
133         Cursor c = null;
134         database.beginTransaction();
135         try {
136             c = database.query(FilterStack.TABLE,
137                     new String[] { FilterStack._ID,
138                             FilterStack.STACK_ID,
139                             FilterStack.FILTER_STACK },
140                     null, null, null, null, null, null);
141             if (c != null) {
142                 boolean loopCheck = c.moveToFirst();
143                 while (loopCheck) {
144                     int id = c.getInt(0);
145                     String name = (c.isNull(1)) ?  null : c.getString(1);
146                     byte[] b = (c.isNull(2)) ? null : c.getBlob(2);
147                     String json = new String(b);
148
149                     ImagePreset preset = new ImagePreset();
150                     preset.readJsonFromString(json);
151                     FilterUserPresetRepresentation representation =
152                             new FilterUserPresetRepresentation(name, preset, id);
153                     ret.add(representation);
154                     loopCheck = c.moveToNext();
155                 }
156             }
157             database.setTransactionSuccessful();
158         } finally {
159             if (c != null) {
160                 c.close();
161             }
162             database.endTransaction();
163         }
164
165         return ret;
166     }
167
168     public List<Pair<String, byte[]>> getAllStacks() {
169         List<Pair<String, byte[]>> ret = new ArrayList<Pair<String, byte[]>>();
170         Cursor c = null;
171         database.beginTransaction();
172         try {
173             c = database.query(FilterStack.TABLE,
174                     new String[] { FilterStack.STACK_ID, FilterStack.FILTER_STACK },
175                     null, null, null, null, null, null);
176             if (c != null) {
177                 boolean loopCheck = c.moveToFirst();
178                 while (loopCheck) {
179                     String name = (c.isNull(0)) ?  null : c.getString(0);
180                     byte[] b = (c.isNull(1)) ? null : c.getBlob(1);
181                     ret.add(new Pair<String, byte[]>(name, b));
182                     loopCheck = c.moveToNext();
183                 }
184             }
185             database.setTransactionSuccessful();
186         } finally {
187             if (c != null) {
188                 c.close();
189             }
190             database.endTransaction();
191         }
192         if (ret.size() <= 0) {
193             return null;
194         }
195         return ret;
196     }
197 }