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