192e387187a872b3b0986b378954eb611aa83fdeanicolasroard/*
292e387187a872b3b0986b378954eb611aa83fdeanicolasroard * Copyright (C) 2013 The Android Open Source Project
392e387187a872b3b0986b378954eb611aa83fdeanicolasroard *
492e387187a872b3b0986b378954eb611aa83fdeanicolasroard * Licensed under the Apache License, Version 2.0 (the "License");
592e387187a872b3b0986b378954eb611aa83fdeanicolasroard * you may not use this file except in compliance with the License.
692e387187a872b3b0986b378954eb611aa83fdeanicolasroard * You may obtain a copy of the License at
792e387187a872b3b0986b378954eb611aa83fdeanicolasroard *
892e387187a872b3b0986b378954eb611aa83fdeanicolasroard *      http://www.apache.org/licenses/LICENSE-2.0
992e387187a872b3b0986b378954eb611aa83fdeanicolasroard *
1092e387187a872b3b0986b378954eb611aa83fdeanicolasroard * Unless required by applicable law or agreed to in writing, software
1192e387187a872b3b0986b378954eb611aa83fdeanicolasroard * distributed under the License is distributed on an "AS IS" BASIS,
1292e387187a872b3b0986b378954eb611aa83fdeanicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1392e387187a872b3b0986b378954eb611aa83fdeanicolasroard * See the License for the specific language governing permissions and
1492e387187a872b3b0986b378954eb611aa83fdeanicolasroard * limitations under the License.
1592e387187a872b3b0986b378954eb611aa83fdeanicolasroard */
1692e387187a872b3b0986b378954eb611aa83fdeanicolasroard
1792e387187a872b3b0986b378954eb611aa83fdeanicolasroardpackage com.android.gallery3d.filtershow.filters;
1892e387187a872b3b0986b378954eb611aa83fdeanicolasroard
1949798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordimport android.graphics.Color;
20655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroardimport android.util.JsonReader;
21655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroardimport android.util.JsonWriter;
2249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford
236900cad45d240c9a54b92991538b6a33652e766cnicolasroardimport com.android.gallery3d.R;
2449798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordimport com.android.gallery3d.filtershow.controller.BasicParameterInt;
2549798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordimport com.android.gallery3d.filtershow.controller.Parameter;
2649798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordimport com.android.gallery3d.filtershow.controller.ParameterColor;
2749798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordimport com.android.gallery3d.filtershow.editors.EditorColorBorder;
286900cad45d240c9a54b92991538b6a33652e766cnicolasroard
29655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroardimport java.io.IOException;
30655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard
3192e387187a872b3b0986b378954eb611aa83fdeanicolasroardpublic class FilterColorBorderRepresentation extends FilterRepresentation {
3249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    private static final String LOGTAG = "FilterColorBorderRepresentation";
3349798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    private static final String SERIALIZATION_NAME = "COLORBORDER";
3449798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford
3549798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public static final int PARAM_SIZE = 0;
3649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public static final int PARAM_RADIUS = 1;
3749798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public static final int PARAM_COLOR = 2;
3849798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public static int DEFAULT_MENU_COLOR1 = Color.WHITE;
3949798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public static int DEFAULT_MENU_COLOR2 = Color.BLACK;
4049798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public static int DEFAULT_MENU_COLOR3 = Color.GRAY;
4149798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public static int DEFAULT_MENU_COLOR4 = 0xFFFFCCAA;
4249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public static int DEFAULT_MENU_COLOR5 = 0xFFAAAAAA;
43ae068f80895d7d075064a5ded59069425b72271fJohn Hoford    private BasicParameterInt mParamSize = new BasicParameterInt(PARAM_SIZE, 3, 2, 30);
44ae068f80895d7d075064a5ded59069425b72271fJohn Hoford    private BasicParameterInt mParamRadius = new BasicParameterInt(PARAM_RADIUS, 2, 0, 100);
4549798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    private ParameterColor mParamColor = new ParameterColor(PARAM_COLOR, DEFAULT_MENU_COLOR1);
4649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford
4749798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    private Parameter[] mAllParam = {
4849798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford            mParamSize,
4949798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford            mParamRadius,
5049798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford            mParamColor
5149798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    };
5249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    private int mPramMode;
5392e387187a872b3b0986b378954eb611aa83fdeanicolasroard
5492e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public FilterColorBorderRepresentation(int color, int size, int radius) {
5592e387187a872b3b0986b378954eb611aa83fdeanicolasroard        super("ColorBorder");
5649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        setSerializationName(SERIALIZATION_NAME);
573cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk        setFilterType(FilterRepresentation.TYPE_BORDER);
586900cad45d240c9a54b92991538b6a33652e766cnicolasroard        setTextId(R.string.borders);
5949798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        setEditorId(EditorColorBorder.ID);
606900cad45d240c9a54b92991538b6a33652e766cnicolasroard        setShowParameterValue(false);
6149798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        setFilterClass(ImageFilterColorBorder.class);
6249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        mParamColor.setValue(color);
6349798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        mParamSize.setValue(size);
64655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        mParamRadius.setValue(radius);
65ae068f80895d7d075064a5ded59069425b72271fJohn Hoford        mParamColor.setColorpalette(new int[]{
66ae068f80895d7d075064a5ded59069425b72271fJohn Hoford                DEFAULT_MENU_COLOR1,
67ae068f80895d7d075064a5ded59069425b72271fJohn Hoford                DEFAULT_MENU_COLOR2,
68ae068f80895d7d075064a5ded59069425b72271fJohn Hoford                DEFAULT_MENU_COLOR3,
69ae068f80895d7d075064a5ded59069425b72271fJohn Hoford                DEFAULT_MENU_COLOR4,
70ae068f80895d7d075064a5ded59069425b72271fJohn Hoford                DEFAULT_MENU_COLOR5});
7192e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
7292e387187a872b3b0986b378954eb611aa83fdeanicolasroard
7392e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public String toString() {
7492e387187a872b3b0986b378954eb611aa83fdeanicolasroard        return "FilterBorder: " + getName();
7592e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
7692e387187a872b3b0986b378954eb611aa83fdeanicolasroard
7792e387187a872b3b0986b378954eb611aa83fdeanicolasroard    @Override
783f0034140c165b86fbaf5c0369f39431548308e9John Hoford    public FilterRepresentation copy() {
7949798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        FilterColorBorderRepresentation representation =
8049798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford                new FilterColorBorderRepresentation(0, 0, 0);
813f0034140c165b86fbaf5c0369f39431548308e9John Hoford        copyAllParameters(representation);
8292e387187a872b3b0986b378954eb611aa83fdeanicolasroard        return representation;
8392e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
8492e387187a872b3b0986b378954eb611aa83fdeanicolasroard
853f0034140c165b86fbaf5c0369f39431548308e9John Hoford    @Override
863f0034140c165b86fbaf5c0369f39431548308e9John Hoford    protected void copyAllParameters(FilterRepresentation representation) {
873f0034140c165b86fbaf5c0369f39431548308e9John Hoford        super.copyAllParameters(representation);
883f0034140c165b86fbaf5c0369f39431548308e9John Hoford        representation.useParametersFrom(this);
893f0034140c165b86fbaf5c0369f39431548308e9John Hoford    }
903f0034140c165b86fbaf5c0369f39431548308e9John Hoford
9192e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public void useParametersFrom(FilterRepresentation a) {
9292e387187a872b3b0986b378954eb611aa83fdeanicolasroard        if (a instanceof FilterColorBorderRepresentation) {
9392e387187a872b3b0986b378954eb611aa83fdeanicolasroard            FilterColorBorderRepresentation representation = (FilterColorBorderRepresentation) a;
9492e387187a872b3b0986b378954eb611aa83fdeanicolasroard            setName(representation.getName());
9592e387187a872b3b0986b378954eb611aa83fdeanicolasroard            setColor(representation.getColor());
96ae068f80895d7d075064a5ded59069425b72271fJohn Hoford            mParamColor.copyPalletFrom(representation.mParamColor);
9792e387187a872b3b0986b378954eb611aa83fdeanicolasroard            setBorderSize(representation.getBorderSize());
9892e387187a872b3b0986b378954eb611aa83fdeanicolasroard            setBorderRadius(representation.getBorderRadius());
9992e387187a872b3b0986b378954eb611aa83fdeanicolasroard        }
10092e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
10192e387187a872b3b0986b378954eb611aa83fdeanicolasroard
10292e387187a872b3b0986b378954eb611aa83fdeanicolasroard    @Override
10392e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public boolean equals(FilterRepresentation representation) {
10492e387187a872b3b0986b378954eb611aa83fdeanicolasroard        if (!super.equals(representation)) {
10592e387187a872b3b0986b378954eb611aa83fdeanicolasroard            return false;
10692e387187a872b3b0986b378954eb611aa83fdeanicolasroard        }
10792e387187a872b3b0986b378954eb611aa83fdeanicolasroard        if (representation instanceof FilterColorBorderRepresentation) {
10892e387187a872b3b0986b378954eb611aa83fdeanicolasroard            FilterColorBorderRepresentation border = (FilterColorBorderRepresentation) representation;
10949798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford            if (border.mParamColor.getValue() == mParamColor.getValue()
11049798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford                    && border.mParamRadius.getValue() == mParamRadius.getValue()
11149798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford                    && border.mParamSize.getValue() == mParamSize.getValue()) {
11249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford
11392e387187a872b3b0986b378954eb611aa83fdeanicolasroard                return true;
11492e387187a872b3b0986b378954eb611aa83fdeanicolasroard            }
11592e387187a872b3b0986b378954eb611aa83fdeanicolasroard        }
11692e387187a872b3b0986b378954eb611aa83fdeanicolasroard        return false;
11792e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
11892e387187a872b3b0986b378954eb611aa83fdeanicolasroard
119c9ca6d1eb85a71b7667f4c25d879e78cce16ac4cztenghui    public boolean allowsSingleInstanceOnly() {
12092e387187a872b3b0986b378954eb611aa83fdeanicolasroard        return true;
12192e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
12292e387187a872b3b0986b378954eb611aa83fdeanicolasroard
12349798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public Parameter getParam(int mode) {
12449798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        return mAllParam[mode];
12549798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    }
12649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford
1276900cad45d240c9a54b92991538b6a33652e766cnicolasroard    @Override
1286900cad45d240c9a54b92991538b6a33652e766cnicolasroard    public int getTextId() {
129521e94c88a371981142312c777a9842a55338901nicolasroard        if (super.getTextId() == 0) {
130521e94c88a371981142312c777a9842a55338901nicolasroard            return R.string.borders;
131521e94c88a371981142312c777a9842a55338901nicolasroard        }
132521e94c88a371981142312c777a9842a55338901nicolasroard        return super.getTextId();
1336900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
1346900cad45d240c9a54b92991538b6a33652e766cnicolasroard
13592e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public int getColor() {
13649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        return mParamColor.getValue();
13792e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
13892e387187a872b3b0986b378954eb611aa83fdeanicolasroard
13992e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public void setColor(int color) {
14049798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        mParamColor.setValue(color);
14192e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
14292e387187a872b3b0986b378954eb611aa83fdeanicolasroard
14392e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public int getBorderSize() {
14449798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        return mParamSize.getValue();
14592e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
14692e387187a872b3b0986b378954eb611aa83fdeanicolasroard
14792e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public void setBorderSize(int borderSize) {
14849798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        mParamSize.setValue(borderSize);
14992e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
15092e387187a872b3b0986b378954eb611aa83fdeanicolasroard
15192e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public int getBorderRadius() {
15249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        return mParamRadius.getValue();
15392e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
15492e387187a872b3b0986b378954eb611aa83fdeanicolasroard
15592e387187a872b3b0986b378954eb611aa83fdeanicolasroard    public void setBorderRadius(int borderRadius) {
15649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        mParamRadius.setValue(borderRadius);
15749798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    }
15849798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford
15949798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public void setPramMode(int pramMode) {
16049798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        this.mPramMode = pramMode;
16149798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    }
16249798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford
16349798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public Parameter getCurrentParam() {
16449798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        return mAllParam[mPramMode];
16549798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    }
16649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford
16749798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford    public String getValueString() {
16849798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford        return "";
16992e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
170655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard
171655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard    // Serialization...
172655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard
173655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard    public void serializeRepresentation(JsonWriter writer) throws IOException {
174655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        writer.beginObject();
175655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        {
176655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            writer.name("size");
177655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            writer.value(mParamSize.getValue());
178655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            writer.name("radius");
179655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            writer.value(mParamRadius.getValue());
180655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            writer.name("color");
181655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            writer.value(mParamColor.getValue());
182655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        }
183655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        writer.endObject();
184655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard    }
185655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard
186655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard    public void deSerializeRepresentation(JsonReader reader) throws IOException {
187655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        reader.beginObject();
188655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        while (reader.hasNext()) {
189655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            String name = reader.nextName();
190655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            if (name.equalsIgnoreCase("size")) {
191655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard                mParamSize.setValue(reader.nextInt());
192655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            } else if (name.equalsIgnoreCase("radius")) {
193655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard                mParamRadius.setValue(reader.nextInt());
194655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            } else if (name.equalsIgnoreCase("color")) {
195655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard                mParamColor.setValue(reader.nextInt());
196655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            } else {
197655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard                reader.skipValue();
198655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard            }
199655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        }
200655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard        reader.endObject();
201655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard    }
20292e387187a872b3b0986b378954eb611aa83fdeanicolasroard}
203