15ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren/* 25ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * Copyright (C) 2013 The Android Open Source Project 35ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * 45ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * Licensed under the Apache License, Version 2.0 (the "License"); 55ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * you may not use this file except in compliance with the License. 65ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * You may obtain a copy of the License at 75ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * 85ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * http://www.apache.org/licenses/LICENSE-2.0 95ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * 105ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * Unless required by applicable law or agreed to in writing, software 115ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * distributed under the License is distributed on an "AS IS" BASIS, 125ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * See the License for the specific language governing permissions and 145ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * limitations under the License. 155ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren */ 165ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren 175ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgrenpackage com.android.camera.ui; 185ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren 195ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgrenimport android.content.Context; 205ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgrenimport android.graphics.Canvas; 2190286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgrenimport android.graphics.RectF; 225ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgrenimport android.util.AttributeSet; 2304ebcbbab90b1ccb263247c39b45ade232de7b0aSpike Spragueimport android.view.View; 2404ebcbbab90b1ccb263247c39b45ade232de7b0aSpike Spragueimport android.widget.FrameLayout; 255ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren 265ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren/** 275ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * ProgressOverlay is a view that sits under the PreviewOverlay. 285ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * It does not respond to touch events, and only serves to show a 295ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * centered progress bar. 305ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren */ 315ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgrenpublic class ProgressOverlay extends View { 325ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren private final ProgressRenderer mProgressRenderer; 335ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren private int mCenterX; 345ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren private int mCenterY; 355ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren 365ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren /** 375ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * Intialize a new ProgressOverlay with a ProgressRenderer. 385ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren */ 395ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren public ProgressOverlay(Context context, AttributeSet attrs) { 405ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren super(context, attrs); 415ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren mProgressRenderer = new ProgressRenderer(context, this); 425ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren } 435ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren 445ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren @Override 455ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren public void onLayout(boolean changed, int left, int top, int right, int bottom) { 465ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren super.onLayout(changed, left, top, right, bottom); 475ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren if (changed) { 485ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren mCenterX = (right - left) / 2; 495ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren mCenterY = (bottom - top) / 2; 505ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren } 515ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren } 525ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren 5390286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren /** 5490286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren * Reposition the view within a given set of bounds, defined by a 5590286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren * {@link android.graphics.RectF}. 5690286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren */ 5790286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren public void setBounds(RectF area) { 5890286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren if (area.width() > 0 && area.height() > 0) { 5904ebcbbab90b1ccb263247c39b45ade232de7b0aSpike Sprague FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) getLayoutParams(); 6090286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren params.width = (int) area.width(); 6190286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren params.height= (int) area.height(); 6204ebcbbab90b1ccb263247c39b45ade232de7b0aSpike Sprague params.setMargins((int) area.left, (int) area.top, 0, 0); 6390286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren setLayoutParams(params); 6490286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren } 6590286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren } 6690286f00664262de977ca1e9291abc1b4868ecdaErin Dahlgren 675ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren @Override 685ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren public void onDraw(Canvas canvas) { 695ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren mProgressRenderer.onDraw(canvas, mCenterX, mCenterY); 705ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren } 715ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren 725ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren /** 735ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren * Set the progress state as a percent from 0-100. 745ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren */ 755ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren public void setProgress(int percent) { 765ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren mProgressRenderer.setProgress(percent); 775ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren } 785ce035e98ca289b0b0ca884c4d2bb2fd43d8c187Erin Dahlgren}