1f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard/*
2f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * Copyright (C) 2013 The Android Open Source Project
3f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard *
4f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * Licensed under the Apache License, Version 2.0 (the "License");
5f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * you may not use this file except in compliance with the License.
6f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * You may obtain a copy of the License at
7f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard *
8f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard *      http://www.apache.org/licenses/LICENSE-2.0
9f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard *
10f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * Unless required by applicable law or agreed to in writing, software
11f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * distributed under the License is distributed on an "AS IS" BASIS,
12f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * See the License for the specific language governing permissions and
14f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * limitations under the License.
15f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard */
16f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
17f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardpackage com.android.gallery3d.filtershow.editors;
18f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
19f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.app.Activity;
20f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.os.Bundle;
21f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.support.v4.app.Fragment;
22f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.support.v4.app.FragmentTransaction;
23f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.LayoutInflater;
24f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.View;
25f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.ViewGroup;
26f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.widget.Button;
27f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.widget.ImageButton;
28f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.widget.LinearLayout;
29f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport com.android.gallery3d.R;
30f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport com.android.gallery3d.filtershow.FilterShowActivity;
316a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroardimport com.android.gallery3d.filtershow.history.HistoryManager;
32f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport com.android.gallery3d.filtershow.category.MainPanel;
33f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport com.android.gallery3d.filtershow.imageshow.MasterImage;
34f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport com.android.gallery3d.filtershow.state.StatePanel;
35f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
36f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardpublic class EditorPanel extends Fragment {
37f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
38f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    private static final String LOGTAG = "EditorPanel";
39f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
40f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    private LinearLayout mMainView;
41f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    private Editor mEditor;
42f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    private int mEditorID;
43f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
44f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public void setEditor(int editor) {
45f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        mEditorID = editor;
46f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
47f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
48f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    @Override
49f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public void onAttach(Activity activity) {
50f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        super.onAttach(activity);
51f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        FilterShowActivity filterShowActivity = (FilterShowActivity) activity;
52f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        mEditor = filterShowActivity.getEditor(mEditorID);
53f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
54f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
55f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public void cancelCurrentFilter() {
56f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        MasterImage masterImage = MasterImage.getImage();
576a50273a45cdda757daf9840e9e36a2b60eff1aanicolasroard        HistoryManager adapter = masterImage.getHistory();
58f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
59f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        int position = adapter.undo();
60f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        masterImage.onHistoryItemClick(position);
61f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        ((FilterShowActivity)getActivity()).invalidateViews();
62f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
63f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
64f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    @Override
65f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public View onCreateView(LayoutInflater inflater, ViewGroup container,
66f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                             Bundle savedInstanceState) {
67f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        FilterShowActivity activity = (FilterShowActivity) getActivity();
68f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        if (mMainView != null) {
69f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            if (mMainView.getParent() != null) {
70f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                ViewGroup parent = (ViewGroup) mMainView.getParent();
71f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                parent.removeView(mMainView);
72f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            }
73f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            showImageStatePanel(activity.isShowingImageStatePanel());
74f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            return mMainView;
75f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        }
76f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        mMainView = (LinearLayout) inflater.inflate(R.layout.filtershow_editor_panel, null);
77f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
78f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        View actionControl = mMainView.findViewById(R.id.panelAccessoryViewList);
79f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        View editControl = mMainView.findViewById(R.id.controlArea);
80f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        ImageButton cancelButton = (ImageButton) mMainView.findViewById(R.id.cancelFilter);
81f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        ImageButton applyButton = (ImageButton) mMainView.findViewById(R.id.applyFilter);
82f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        Button editTitle = (Button) mMainView.findViewById(R.id.applyEffect);
83f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        cancelButton.setOnClickListener(new View.OnClickListener() {
84f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            @Override
85f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            public void onClick(View v) {
86f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                cancelCurrentFilter();
87f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                FilterShowActivity activity = (FilterShowActivity) getActivity();
88f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                activity.backToMain();
89f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            }
90f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        });
91f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
92f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        Button toggleState = (Button) mMainView.findViewById(R.id.toggle_state);
93f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        mEditor = activity.getEditor(mEditorID);
94f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        if (mEditor != null) {
95f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            mEditor.setUpEditorUI(actionControl, editControl, editTitle, toggleState);
96f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            mEditor.reflectCurrentFilter();
97f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            if (mEditor.useUtilityPanel()) {
98f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                mEditor.openUtilityPanel((LinearLayout) actionControl);
99f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            }
100f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        }
101b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk        applyButton.setOnClickListener(new View.OnClickListener() {
102b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk            @Override
103b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk            public void onClick(View v) {
104b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk                FilterShowActivity activity = (FilterShowActivity) getActivity();
105b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk                mEditor.finalApplyCalled();
106b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk                activity.backToMain();
107b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk            }
108b0f7a8f7f7d95ae12e92f529fd9a8a37f75b105cRuben Brunk        });
109f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
110f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        showImageStatePanel(activity.isShowingImageStatePanel());
111f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        return mMainView;
112f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
113f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
114f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    @Override
115f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public void onDetach() {
116f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        if (mEditor != null) {
117f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            mEditor.detach();
118f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        }
119f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        super.onDetach();
120f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
121f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
122f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public void showImageStatePanel(boolean show) {
123e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard        View container = mMainView.findViewById(R.id.state_panel_container);
124e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard        FragmentTransaction transaction = null;
125e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard        boolean child = false;
126e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard        if (container == null) {
127e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard            FilterShowActivity activity = (FilterShowActivity) getActivity();
128e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard            container = activity.getMainStatePanelContainer(R.id.state_panel_container);
129e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard        } else {
130e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard            transaction = getChildFragmentManager().beginTransaction();
131e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard            child = true;
132e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard        }
133e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard        if (container == null) {
134f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            return;
135e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard        } else {
136e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard            transaction = getFragmentManager().beginTransaction();
137f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        }
138f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        Fragment panel = getActivity().getSupportFragmentManager().findFragmentByTag(
139f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                MainPanel.FRAGMENT_TAG);
140f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        if (panel == null || panel instanceof MainPanel) {
141f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
142f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        }
143f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        if (show) {
14489c60a9d0be113585799dd903fc005b315251314nicolasroard            container.setVisibility(View.VISIBLE);
145f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            StatePanel statePanel = new StatePanel();
146f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            transaction.replace(R.id.state_panel_container, statePanel, StatePanel.FRAGMENT_TAG);
147f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        } else {
148f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            Fragment statePanel = getChildFragmentManager().findFragmentByTag(StatePanel.FRAGMENT_TAG);
149e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard            if (child) {
150e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard                statePanel = getFragmentManager().findFragmentByTag(StatePanel.FRAGMENT_TAG);
151e799626df47f99e4ba70bcfe787fdbdac64a8cc7nicolasroard            }
152f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            if (statePanel != null) {
153f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard                transaction.remove(statePanel);
154f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            }
155f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        }
156f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        transaction.commit();
157f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
158f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard}
159