FilmstripBottomPanel.java revision 001dc31f0b6e78b70db83c6d9b8cc7872e540965
19c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis/*
29c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Copyright (C) 2013 The Android Open Source Project
39c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis *
49c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Licensed under the Apache License, Version 2.0 (the "License");
59c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * you may not use this file except in compliance with the License.
69c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * You may obtain a copy of the License at
79c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis *
89c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis *      http://www.apache.org/licenses/LICENSE-2.0
99c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis *
109c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Unless required by applicable law or agreed to in writing, software
119c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * distributed under the License is distributed on an "AS IS" BASIS,
129c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * See the License for the specific language governing permissions and
149c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * limitations under the License.
159c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis */
169c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
179c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennispackage com.android.camera.app;
189c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
199c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisimport android.view.View;
209c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisimport android.view.ViewGroup;
219c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisimport android.widget.ImageButton;
229c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisimport android.widget.ProgressBar;
239c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisimport android.widget.TextView;
249c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
259c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisimport com.android.camera.util.CameraUtil;
269c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisimport com.android.camera2.R;
279c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
289c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis/**
299c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Shows controls at the bottom of the screen for editing, viewing a photo
309c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * sphere image and creating a tiny planet from a photo sphere image.
319c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis */
329c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass FilmstripBottomPanel implements CameraAppUI.BottomPanel {
339c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
349c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private final AppController mController;
359c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private final ViewGroup mLayout;
369c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private Listener mListener;
379c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private View mControlLayout;
389c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private ImageButton mEditButton;
399c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private ImageButton mViewButton;
409c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private ImageButton mDeleteButton;
419c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private ImageButton mShareButton;
429c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private final View mMiddleFiller;
439c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private View mProgressLayout;
449c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private TextView mProgressText;
459c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private ProgressBar mProgressBar;
469c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    private boolean mTinyPlanetEnabled;
479c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
489c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    public FilmstripBottomPanel(AppController controller, ViewGroup bottomControlsLayout) {
499c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        mController = controller;
509c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        mLayout = bottomControlsLayout;
519c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        mMiddleFiller = mLayout.findViewById(R.id.filmstrip_bottom_control_middle_filler);
529c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        mControlLayout = mLayout.findViewById(R.id.bottom_control_panel);
539c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        setupEditButton();
549c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        setupViewButton();
559c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        setupDeleteButton();
569c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        setupShareButton();
579c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        setupProgressUi();
589c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    }
599c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
609c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    @Override
619c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    public void setListener(Listener listener) {
629c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        mListener = listener;
639c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    }
649c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
659c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    @Override
669c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    public void setVisible(boolean visible) {
679c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        if (visible) {
689c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis            mLayout.setVisibility(View.VISIBLE);
699c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        } else {
709c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis            mLayout.setVisibility(View.INVISIBLE);
719c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis        }
72    }
73
74    @Override
75    public void setEditButtonVisibility(boolean visible) {
76        mEditButton.setVisibility(visible ? View.VISIBLE : View.GONE);
77        updateMiddleFillerLayoutVisibility();
78    }
79
80    @Override
81    public void setEditEnabled(boolean enabled) {
82        mEditButton.setEnabled(enabled);
83    }
84
85    @Override
86    public void setViewerButtonVisibility(int state) {
87        if (state == VIEWER_NONE) {
88            mViewButton.setVisibility(View.GONE);
89        } else {
90            mViewButton.setImageResource(getViewButtonResource(state));
91            mViewButton.setVisibility(View.VISIBLE);
92        }
93        updateMiddleFillerLayoutVisibility();
94    }
95
96    @Override
97    public void setViewEnabled(boolean enabled) {
98        mViewButton.setEnabled(enabled);
99    }
100
101    @Override
102    public void setTinyPlanetEnabled(boolean enabled) {
103        mTinyPlanetEnabled = enabled;
104    }
105
106    @Override
107    public void setDeleteButtonVisibility(boolean visible) {
108        mDeleteButton.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
109    }
110
111    @Override
112    public void setDeleteEnabled(boolean enabled) {
113        mDeleteButton.setEnabled(enabled);
114    }
115
116    @Override
117    public void setShareButtonVisibility(boolean visible) {
118        mShareButton.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
119    }
120
121    @Override
122    public void setShareEnabled(boolean enabled) {
123        mShareButton.setEnabled(enabled);
124    }
125
126    @Override
127    public void setProgressText(CharSequence text) {
128        mProgressText.setText(text);
129    }
130
131    @Override
132    public void setProgress(int progress) {
133        mProgressBar.setProgress(progress);
134    }
135
136    @Override
137    public void showProgress() {
138        mProgressLayout.setVisibility(View.VISIBLE);
139    }
140
141    @Override
142    public void hideProgress() {
143        mProgressLayout.setVisibility(View.INVISIBLE);
144    }
145
146    @Override
147    public void showControls() {
148        mControlLayout.setVisibility(View.VISIBLE);
149    }
150
151    @Override
152    public void hideControls() {
153        mControlLayout.setVisibility(View.INVISIBLE);
154    }
155
156    private int getViewButtonResource(int state) {
157        switch (state) {
158            case VIEWER_REFOCUS:
159                return R.drawable.ic_refocus_normal;
160            case VIEWER_PHOTO_SPHERE:
161                return R.drawable.ic_view_photosphere;
162            default:
163                return R.drawable.ic_control_play;
164        }
165    }
166
167    private void setupEditButton() {
168        mEditButton = (ImageButton) mLayout.findViewById(R.id.filmstrip_bottom_control_edit);
169        mEditButton.setOnClickListener(new View.OnClickListener() {
170            @Override
171            public void onClick(View view) {
172                if (mTinyPlanetEnabled) {
173                    mController.openContextMenu(mEditButton);
174                } else if (mListener != null) {
175                    mListener.onEdit();
176                }
177            }
178        });
179        mController.registerForContextMenu(mEditButton);
180        mEditButton.setLongClickable(false);
181    }
182
183    private void setupViewButton() {
184        mViewButton = (ImageButton) mLayout.findViewById(R.id.filmstrip_bottom_control_view);
185        mViewButton.setOnClickListener(new View.OnClickListener() {
186            @Override
187            public void onClick(View view) {
188                if (mListener != null) {
189                    mListener.onExternalViewer();
190                }
191            }
192        });
193    }
194
195    private void setupDeleteButton() {
196        mDeleteButton = (ImageButton) mLayout.findViewById(R.id.filmstrip_bottom_control_delete);
197        mDeleteButton.setOnClickListener(new View.OnClickListener() {
198            @Override
199            public void onClick(View view) {
200                if (mListener != null) {
201                    mListener.onDelete();
202                }
203            }
204        });
205    }
206
207    private void setupShareButton() {
208        mShareButton = (ImageButton) mLayout.findViewById(R.id.filmstrip_bottom_control_share);
209        mShareButton.setOnClickListener(new View.OnClickListener() {
210            @Override
211            public void onClick(View view) {
212                if (mListener != null) {
213                    mListener.onShare();
214                }
215            }
216        });
217    }
218
219    private void setupProgressUi() {
220        mProgressLayout = mLayout.findViewById(R.id.bottom_progress_panel);
221        mProgressText = (TextView) mLayout.findViewById(R.id.bottom_session_progress_text);
222        mProgressBar = (ProgressBar) mLayout.findViewById(R.id.bottom_session_progress_bar);
223        mProgressBar.setMax(100);
224        mProgressLayout.setVisibility(View.INVISIBLE);
225    }
226
227    /**
228     * Updates the visibility of the middle filler view in the center. The
229     * middle filler view should be visible when edit button and viewer buttons
230     * are both visible.
231     */
232    private void updateMiddleFillerLayoutVisibility() {
233        if (mEditButton.getVisibility() == View.VISIBLE &&
234                mViewButton.getVisibility() == View.VISIBLE) {
235            mMiddleFiller.setVisibility(View.INVISIBLE);
236        } else {
237            mMiddleFiller.setVisibility(View.GONE);
238        }
239    }
240}
241