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