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