1e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong/*
2e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * Copyright (C) 2013 The Android Open Source Project
3e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong *
4e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * Licensed under the Apache License, Version 2.0 (the "License");
5e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * you may not use this file except in compliance with the License.
6e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * You may obtain a copy of the License at
7e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong *
8e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong *      http://www.apache.org/licenses/LICENSE-2.0
9e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong *
10e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * Unless required by applicable law or agreed to in writing, software
11e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * distributed under the License is distributed on an "AS IS" BASIS,
12e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * See the License for the specific language governing permissions and
14e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * limitations under the License.
15e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong */
16e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
17e0aff89f3e05eb6008651b290ba79d484de55970Angus Kongpackage com.android.camera.app;
18e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
193c56192fac54644a301251aae8d1e33c8d60c3e5Spike Spragueimport android.animation.Animator;
203c56192fac54644a301251aae8d1e33c8d60c3e5Spike Spragueimport android.animation.AnimatorListenerAdapter;
213c56192fac54644a301251aae8d1e33c8d60c3e5Spike Spragueimport android.animation.ObjectAnimator;
22e0aff89f3e05eb6008651b290ba79d484de55970Angus Kongimport android.view.View;
23597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberlingimport android.view.View.OnClickListener;
24e0aff89f3e05eb6008651b290ba79d484de55970Angus Kongimport android.view.ViewGroup;
25e0aff89f3e05eb6008651b290ba79d484de55970Angus Kongimport android.widget.ImageButton;
267ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kongimport android.widget.ProgressBar;
277ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kongimport android.widget.TextView;
28e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
29ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Spragueimport com.android.camera.util.Gusterpolator;
30e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liuimport com.android.camera.widget.Cling;
317933feb7d1bbb0342061584f623bb239266f5d91Doris Liuimport com.android.camera.widget.ExternalViewerButton;
32e0aff89f3e05eb6008651b290ba79d484de55970Angus Kongimport com.android.camera2.R;
33e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
34e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong/**
35e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * Shows controls at the bottom of the screen for editing, viewing a photo
36e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong * sphere image and creating a tiny planet from a photo sphere image.
37e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong */
387ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kongclass FilmstripBottomPanel implements CameraAppUI.BottomPanel {
39ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Sprague    private static final int ANIM_DURATION = 150;
40e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
41e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling    private final AppController mController;
42e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling    private final ViewGroup mLayout;
43e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    private Listener mListener;
44597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    private final View mControlLayout;
45e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    private ImageButton mEditButton;
467933feb7d1bbb0342061584f623bb239266f5d91Doris Liu    private ExternalViewerButton mViewButton;
47e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    private ImageButton mDeleteButton;
48e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    private ImageButton mShareButton;
49e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling    private final View mMiddleFiller;
507ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    private View mProgressLayout;
517ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    private TextView mProgressText;
52597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    private View mProgressErrorLayout;
53597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    private TextView mProgressErrorText;
547ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    private ProgressBar mProgressBar;
55e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling    private boolean mTinyPlanetEnabled;
56e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
577ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    public FilmstripBottomPanel(AppController controller, ViewGroup bottomControlsLayout) {
58e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling        mController = controller;
59e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mLayout = bottomControlsLayout;
60b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        mMiddleFiller = mLayout.findViewById(R.id.filmstrip_bottom_control_middle_filler);
617ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mControlLayout = mLayout.findViewById(R.id.bottom_control_panel);
62e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        setupEditButton();
63e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        setupViewButton();
64e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        setupDeleteButton();
65e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        setupShareButton();
667ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        setupProgressUi();
67e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
68e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
69e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    @Override
70e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    public void setListener(Listener listener) {
71e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mListener = listener;
72e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
73e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
74e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    @Override
75e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    public void setClingForViewer(int viewerType, Cling cling) {
767933feb7d1bbb0342061584f623bb239266f5d91Doris Liu        mViewButton.setClingForViewer(viewerType, cling);
77e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    }
78e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu
79e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    @Override
80e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    public void clearClingForViewer(int viewerType) {
817933feb7d1bbb0342061584f623bb239266f5d91Doris Liu        mViewButton.clearClingForViewer(viewerType);
82e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    }
83e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu
84e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    @Override
85e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    public Cling getClingForViewer(int viewerType) {
867933feb7d1bbb0342061584f623bb239266f5d91Doris Liu        return mViewButton.getClingForViewer(viewerType);
87e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    }
88e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu
89e7d7b9ef5e09ba464306565c6c62302a4d9bbe5eDoris Liu    @Override
90e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    public void setVisible(boolean visible) {
91e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        if (visible) {
92e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            mLayout.setVisibility(View.VISIBLE);
93e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        } else {
94e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            mLayout.setVisibility(View.INVISIBLE);
95e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        }
96e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
97e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
98e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    @Override
99e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    public void setEditButtonVisibility(boolean visible) {
100b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        mEditButton.setVisibility(visible ? View.VISIBLE : View.GONE);
101b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        updateMiddleFillerLayoutVisibility();
102e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
103e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
104e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    @Override
105e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    public void setEditEnabled(boolean enabled) {
106e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong        mEditButton.setEnabled(enabled);
107e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    }
108e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong
109e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    @Override
11000b3371ca5c3340a81174ea5443443a9176d5130Angus Kong    public void setViewerButtonVisibility(int state) {
1117933feb7d1bbb0342061584f623bb239266f5d91Doris Liu        mViewButton.setState(state);
112b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        updateMiddleFillerLayoutVisibility();
113e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
114e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
115e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    @Override
116e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    public void setViewEnabled(boolean enabled) {
117e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong        mViewButton.setEnabled(enabled);
118e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    }
119e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong
120e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    @Override
121e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    public void setTinyPlanetEnabled(boolean enabled) {
122e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling        mTinyPlanetEnabled = enabled;
123e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    }
124e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong
125e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    @Override
126e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    public void setDeleteButtonVisibility(boolean visible) {
127b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        mDeleteButton.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
128e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
129e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
130e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    @Override
131e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    public void setDeleteEnabled(boolean enabled) {
132e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong        mDeleteButton.setEnabled(enabled);
133e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    }
134e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong
135e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    @Override
136e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    public void setShareButtonVisibility(boolean visible) {
137b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        mShareButton.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
138e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
139e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
140e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    @Override
141e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    public void setShareEnabled(boolean enabled) {
142e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong        mShareButton.setEnabled(enabled);
143e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong    }
144e4002f3a703a1835dce30d74ccfc22e00956e13fAngus Kong
1457ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    @Override
1467ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    public void setProgressText(CharSequence text) {
1477ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mProgressText.setText(text);
1487ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    }
1497ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong
1507ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    @Override
1517ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    public void setProgress(int progress) {
1527ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mProgressBar.setProgress(progress);
1537ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    }
1547ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong
1557ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    @Override
156597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    public void showProgressError(CharSequence message) {
157597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        hideControls();
158597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        hideProgress();
159597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        mProgressErrorLayout.setVisibility(View.VISIBLE);
160597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        mProgressErrorText.setText(message);
161597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    }
162597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling
163597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    @Override
164597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    public void hideProgressError() {
165597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        mProgressErrorLayout.setVisibility(View.INVISIBLE);
166597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    }
167597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling
168597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling    @Override
1697ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    public void showProgress() {
1707ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mProgressLayout.setVisibility(View.VISIBLE);
171597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        hideProgressError();
172001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong    }
173001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong
174001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong    @Override
175001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong    public void hideProgress() {
176001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong        mProgressLayout.setVisibility(View.INVISIBLE);
1777ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    }
1787ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong
1797ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    @Override
1807ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    public void showControls() {
1817ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mControlLayout.setVisibility(View.VISIBLE);
182001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong    }
183001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong
184001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong    @Override
185001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong    public void hideControls() {
186001dc31f0b6e78b70db83c6d9b8cc7872e540965Angus Kong        mControlLayout.setVisibility(View.INVISIBLE);
1877ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    }
1887ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong
189e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    private void setupEditButton() {
190e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mEditButton = (ImageButton) mLayout.findViewById(R.id.filmstrip_bottom_control_edit);
191e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mEditButton.setOnClickListener(new View.OnClickListener() {
192e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            @Override
193e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            public void onClick(View view) {
194e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling                if (mTinyPlanetEnabled) {
195e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling                    mController.openContextMenu(mEditButton);
196e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling                } else if (mListener != null) {
197e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                    mListener.onEdit();
198e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                }
199e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            }
200e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        });
201e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling        mController.registerForContextMenu(mEditButton);
202e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling        mEditButton.setLongClickable(false);
203e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
204e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
205e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    private void setupViewButton() {
2067933feb7d1bbb0342061584f623bb239266f5d91Doris Liu        mViewButton = (ExternalViewerButton) mLayout.findViewById(
2077933feb7d1bbb0342061584f623bb239266f5d91Doris Liu                R.id.filmstrip_bottom_control_view);
208e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mViewButton.setOnClickListener(new View.OnClickListener() {
209e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            @Override
210e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            public void onClick(View view) {
211e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                if (mListener != null) {
2128a2350a3d557465b53445685db0f9ac838cf90c5Angus Kong                    mListener.onExternalViewer();
213e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                }
214e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            }
215e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        });
216e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
217e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
218e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    private void setupDeleteButton() {
219e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mDeleteButton = (ImageButton) mLayout.findViewById(R.id.filmstrip_bottom_control_delete);
220e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mDeleteButton.setOnClickListener(new View.OnClickListener() {
221e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            @Override
222e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            public void onClick(View view) {
223e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                if (mListener != null) {
224e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                    mListener.onDelete();
225e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                }
226e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            }
227e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        });
228e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
229e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong
230e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    private void setupShareButton() {
231e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mShareButton = (ImageButton) mLayout.findViewById(R.id.filmstrip_bottom_control_share);
232e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        mShareButton.setOnClickListener(new View.OnClickListener() {
233e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            @Override
234e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            public void onClick(View view) {
235e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                if (mListener != null) {
236e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                    mListener.onShare();
237e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong                }
238e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong            }
239e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong        });
240e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong    }
241b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong
2427ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    private void setupProgressUi() {
2437ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mProgressLayout = mLayout.findViewById(R.id.bottom_progress_panel);
2447ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mProgressText = (TextView) mLayout.findViewById(R.id.bottom_session_progress_text);
2457ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mProgressBar = (ProgressBar) mLayout.findViewById(R.id.bottom_session_progress_bar);
2467ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mProgressBar.setMax(100);
2477ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong        mProgressLayout.setVisibility(View.INVISIBLE);
248597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        mProgressErrorText = (TextView) mLayout.findViewById(R.id.bottom_progress_error_text);
249597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        mProgressErrorLayout = mLayout.findViewById(R.id.bottom_progress_error_panel);
250597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        mProgressErrorLayout.setOnClickListener(new OnClickListener() {
251597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling            @Override
252597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling            public void onClick(View v) {
253597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling                if (mListener != null) {
254597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling                    mListener.onProgressErrorClicked();
255597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling                }
256597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling            }
257597c1a093f840af3c42e00af05da01ef124dc846Sascha Haeberling        });
2587ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong    }
2597ae25c21fefd8b7fd4c4e1c207631f751167cb0aAngus Kong
260b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong    /**
261e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling     * Updates the visibility of the middle filler view in the center. The
262e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling     * middle filler view should be visible when edit button and viewer buttons
263e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling     * are both visible.
264b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong     */
265b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong    private void updateMiddleFillerLayoutVisibility() {
266b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        if (mEditButton.getVisibility() == View.VISIBLE &&
267e8959e7a72cd6f057ac4cd8bd47075272700e62eSascha Haeberling                mViewButton.getVisibility() == View.VISIBLE) {
268b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong            mMiddleFiller.setVisibility(View.INVISIBLE);
269b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        } else {
270b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong            mMiddleFiller.setVisibility(View.GONE);
271b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong        }
272b9c4232ca171ac5ae659e0bcac177bedfc8b4e8aAngus Kong    }
273ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Sprague
274ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Sprague    public void show() {
2753c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague        ObjectAnimator animator = ObjectAnimator
2763c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague                .ofFloat(mLayout, "translationY", mLayout.getHeight(), 0.0f);
2773c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague        animator.setDuration(ANIM_DURATION);
2783c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague        animator.setInterpolator(Gusterpolator.INSTANCE);
2793c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague        animator.addListener(new AnimatorListenerAdapter() {
2803c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague            @Override
2813c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague            public void onAnimationEnd(Animator animation) {
2823c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague                mViewButton.updateClingVisibility();
2833c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague            }
2843c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague        });
2853c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague        mViewButton.hideClings();
2863c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague        animator.start();
287ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Sprague    }
288ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Sprague
289ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Sprague    public void hide() {
290ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Sprague        int offset = mLayout.getHeight();
291af984b23a3140a16e5b0433dbb9693a076cfcf04Spike Sprague        if (mLayout.getTranslationY() < offset) {
2923c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague            ObjectAnimator animator = ObjectAnimator
2933c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague                    .ofFloat(mLayout, "translationY", mLayout.getTranslationY(), offset);
2943c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague            animator.setDuration(ANIM_DURATION);
2953c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague            animator.setInterpolator(Gusterpolator.INSTANCE);
2963c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague            mViewButton.hideClings();
2973c56192fac54644a301251aae8d1e33c8d60c3e5Spike Sprague            animator.start();
298af984b23a3140a16e5b0433dbb9693a076cfcf04Spike Sprague        }
299ba97d192b63ea81edf2dd6ca5cfbf6646a1f25a2Spike Sprague    }
300e0aff89f3e05eb6008651b290ba79d484de55970Angus Kong}
301