176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk/* 276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * Copyright (C) 2013 The Android Open Source Project 376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * 476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * Licensed under the Apache License, Version 2.0 (the "License"); 576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * you may not use this file except in compliance with the License. 676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * You may obtain a copy of the License at 776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * 876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * http://www.apache.org/licenses/LICENSE-2.0 976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * 1076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * Unless required by applicable law or agreed to in writing, software 1176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * distributed under the License is distributed on an "AS IS" BASIS, 1276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * See the License for the specific language governing permissions and 1476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk * limitations under the License. 1576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk */ 1676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 1776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunkpackage com.android.gallery3d.filtershow.filters; 1876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 1976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunkimport android.util.JsonReader; 2076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunkimport android.util.JsonWriter; 2176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunkimport android.util.Log; 2276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 2376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunkimport com.android.gallery3d.R; 2476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunkimport com.android.gallery3d.filtershow.editors.EditorStraighten; 2576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 2676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunkimport java.io.IOException; 2776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 2876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunkpublic class FilterStraightenRepresentation extends FilterRepresentation { 2976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public static final String SERIALIZATION_NAME = "STRAIGHTEN"; 3076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public static final String SERIALIZATION_STRAIGHTEN_VALUE = "value"; 3176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk private static final String TAG = FilterStraightenRepresentation.class.getSimpleName(); 32b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk public static final int MAX_STRAIGHTEN_ANGLE = 45; 33b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk public static final int MIN_STRAIGHTEN_ANGLE = -45; 3476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 3576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk float mStraighten; 3676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 3776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public FilterStraightenRepresentation(float straighten) { 383bc6e6f3b5ac0bb989c5e2f1580bdb40ead5dc25nicolasroard super(SERIALIZATION_NAME); 3976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setSerializationName(SERIALIZATION_NAME); 4076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setShowParameterValue(true); 4176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setFilterClass(FilterStraightenRepresentation.class); 4276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setFilterType(FilterRepresentation.TYPE_GEOMETRY); 43430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard setSupportsPartialRendering(true); 4476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setTextId(R.string.straighten); 4576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setEditorId(EditorStraighten.ID); 4676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setStraighten(straighten); 4776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 4876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 4976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public FilterStraightenRepresentation(FilterStraightenRepresentation s) { 5076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk this(s.getStraighten()); 513bc6e6f3b5ac0bb989c5e2f1580bdb40ead5dc25nicolasroard setName(s.getName()); 5276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 5376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 5476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public FilterStraightenRepresentation() { 55b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk this(getNil()); 5676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 5776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 5876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public void set(FilterStraightenRepresentation r) { 5976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk mStraighten = r.mStraighten; 6076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 6176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 628f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard @Override 638f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard public boolean equals(FilterRepresentation rep) { 648f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard if (!(rep instanceof FilterStraightenRepresentation)) { 658f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard return false; 668f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard } 678f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard FilterStraightenRepresentation straighten = (FilterStraightenRepresentation) rep; 688f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard if (straighten.mStraighten != mStraighten) { 698f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard return false; 708f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard } 718f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard return true; 728f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard } 738f442fae60e0154867d2a6927eb9a35bcb7014e6nicolasroard 7476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public float getStraighten() { 7576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk return mStraighten; 7676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 7776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 7876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public void setStraighten(float straighten) { 7976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk if (!rangeCheck(straighten)) { 80b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk straighten = Math.min(Math.max(straighten, MIN_STRAIGHTEN_ANGLE), MAX_STRAIGHTEN_ANGLE); 8176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 8276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk mStraighten = straighten; 8376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 8476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 8576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk @Override 8676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public boolean allowsSingleInstanceOnly() { 8776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk return true; 8876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 8976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 9076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk @Override 9176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public FilterRepresentation copy() { 9276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk return new FilterStraightenRepresentation(this); 9376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 9476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 9576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk @Override 9676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk protected void copyAllParameters(FilterRepresentation representation) { 9776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk if (!(representation instanceof FilterStraightenRepresentation)) { 9876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk throw new IllegalArgumentException("calling copyAllParameters with incompatible types!"); 9976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 10076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk super.copyAllParameters(representation); 10176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk representation.useParametersFrom(this); 10276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 10376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 10476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk @Override 10576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public void useParametersFrom(FilterRepresentation a) { 10676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk if (!(a instanceof FilterStraightenRepresentation)) { 10776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk throw new IllegalArgumentException("calling useParametersFrom with incompatible types!"); 10876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 10976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setStraighten(((FilterStraightenRepresentation) a).getStraighten()); 11076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 11176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 11276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk @Override 11376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public boolean isNil() { 114b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk return mStraighten == getNil(); 115b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk } 116b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk 117b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk public static float getNil() { 118b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk return 0; 11976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 12076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 12176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk @Override 12276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public void serializeRepresentation(JsonWriter writer) throws IOException { 12376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk writer.beginObject(); 12476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk writer.name(SERIALIZATION_STRAIGHTEN_VALUE).value(mStraighten); 12576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk writer.endObject(); 12676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 12776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 12876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk @Override 12976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk public void deSerializeRepresentation(JsonReader reader) throws IOException { 13076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk boolean unset = true; 13176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk reader.beginObject(); 13276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk while (reader.hasNext()) { 13376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk String name = reader.nextName(); 13476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk if (SERIALIZATION_STRAIGHTEN_VALUE.equals(name)) { 135b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk float s = (float) reader.nextDouble(); 13676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk if (rangeCheck(s)) { 13776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk setStraighten(s); 13876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk unset = false; 13976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 14076a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } else { 14176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk reader.skipValue(); 14276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 14376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 14476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk if (unset) { 14576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk Log.w(TAG, "WARNING: bad value when deserializing " + SERIALIZATION_NAME); 14676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 14776a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk reader.endObject(); 14876a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 14976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk 150b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk private boolean rangeCheck(double s) { 15176a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk if (s < -45 || s > 45) { 15276a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk return false; 15376a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 15476a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk return true; 15576a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk } 15676a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk} 157