1/*
2 * Copyright (C) 2010 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
17package com.android.photoeditor.actions;
18
19import android.view.View;
20import android.view.ViewGroup;
21
22import com.android.photoeditor.FilterStack;
23import com.android.photoeditor.R;
24import com.android.photoeditor.animation.Rotate3DAnimation;
25import com.android.photoeditor.filters.FlipFilter;
26
27/**
28 * An action handling flip effect.
29 */
30public class FlipAction extends FilterAction {
31
32    private static final int ANIMATION_DURATION = 500;
33
34    private boolean flipHorizontal;
35    private boolean flipVertical;
36
37    public FlipAction(FilterStack filterStack, ViewGroup tools) {
38        super(filterStack, tools, R.string.flip_tooltip);
39    }
40
41    @Override
42    public void onBegin() {
43        final FlipFilter filter = new FlipFilter();
44
45        touchView.setSwipeListener(new TouchView.SwipeListener() {
46
47            @Override
48            public void onSwipeDown() {
49                setFlipAnimations(Rotate3DAnimation.Rotate.DOWN);
50                flipFilterVertically(filter);
51            }
52
53            @Override
54            public void onSwipeLeft() {
55                setFlipAnimations(Rotate3DAnimation.Rotate.LEFT);
56                flipFilterHorizontally(filter);
57            }
58
59            @Override
60            public void onSwipeRight() {
61                setFlipAnimations(Rotate3DAnimation.Rotate.RIGHT);
62                flipFilterHorizontally(filter);
63            }
64
65            @Override
66            public void onSwipeUp() {
67                setFlipAnimations(Rotate3DAnimation.Rotate.UP);
68                flipFilterVertically(filter);
69            }
70        });
71        touchView.setVisibility(View.VISIBLE);
72
73        flipHorizontal = false;
74        flipVertical = false;
75        setFlipAnimations(Rotate3DAnimation.Rotate.RIGHT);
76        flipFilterHorizontally(filter);
77    }
78
79    @Override
80    public void onEnd() {
81    }
82
83    private void setFlipAnimations(Rotate3DAnimation.Rotate rotate) {
84        photoView.setTransitionAnimations(
85                Rotate3DAnimation.getFlipAnimations(rotate, ANIMATION_DURATION));
86    }
87
88    private void flipFilterHorizontally(final FlipFilter filter) {
89        flipHorizontal = !flipHorizontal;
90        filter.setFlip(flipHorizontal, flipVertical);
91        notifyFilterChanged(filter, true);
92    }
93
94    private void flipFilterVertically(final FlipFilter filter) {
95        flipVertical = !flipVertical;
96        filter.setFlip(flipHorizontal, flipVertical);
97        notifyFilterChanged(filter, true);
98    }
99}
100