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}