188ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu/*
288ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * Copyright (C) 2014 The Android Open Source Project
388ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu *
488ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * Licensed under the Apache License, Version 2.0 (the "License");
588ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * you may not use this file except in compliance with the License.
688ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * You may obtain a copy of the License at
788ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu *
888ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu *      http://www.apache.org/licenses/LICENSE-2.0
988ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu *
1088ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * Unless required by applicable law or agreed to in writing, software
1188ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * distributed under the License is distributed on an "AS IS" BASIS,
1288ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1388ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * See the License for the specific language governing permissions and
1488ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * limitations under the License.
1588ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu */
1688ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu
1788ea520053c1911e013ba675136be7dfa28c6c3bDoris Liupackage com.android.camera.ui;
1888ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu
1988ea520053c1911e013ba675136be7dfa28c6c3bDoris Liuimport android.content.Context;
2028a2950939614a0c1c83787960ce1a218fb69a5eDoris Liuimport android.graphics.RectF;
2188ea520053c1911e013ba675136be7dfa28c6c3bDoris Liuimport android.util.AttributeSet;
2288ea520053c1911e013ba675136be7dfa28c6c3bDoris Liuimport android.view.View;
2388ea520053c1911e013ba675136be7dfa28c6c3bDoris Liuimport android.widget.FrameLayout;
2488ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu
2528a2950939614a0c1c83787960ce1a218fb69a5eDoris Liuimport com.android.camera.CaptureLayoutHelper;
2628a2950939614a0c1c83787960ce1a218fb69a5eDoris Liuimport com.android.camera.debug.Log;
2788ea520053c1911e013ba675136be7dfa28c6c3bDoris Liuimport com.android.camera2.R;
2888ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu
2988ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu/**
3088ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * The goal of this class is to ensure mode options is always laid out to
3188ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * the left of or above bottom bar in landscape or portrait respectively.
3288ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * All the other children in this view group can be expected to be laid out
3388ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu * the same way as they are in a normal FrameLayout.
3488ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu */
3588ea520053c1911e013ba675136be7dfa28c6c3bDoris Liupublic class BottomBarModeOptionsWrapper extends FrameLayout {
3688ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu
3728a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu    private final static Log.Tag TAG = new Log.Tag("BottomBarWrapper");
3888ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    private View mModeOptionsOverlay;
3988ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    private View mBottomBar;
4028a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu    private CaptureLayoutHelper mCaptureLayoutHelper = null;
4188ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu
4288ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    public BottomBarModeOptionsWrapper(Context context, AttributeSet attrs) {
4388ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu        super(context, attrs);
4488ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    }
4588ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu
4688ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    @Override
4788ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    public void onFinishInflate() {
4888ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu        mModeOptionsOverlay = findViewById(R.id.mode_options_overlay);
4988ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu        mBottomBar = findViewById(R.id.bottom_bar);
5088ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    }
5188ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu
5228a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu    /**
5328a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu     * Sets a capture layout helper to query layout rect from.
5428a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu     */
5528a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu    public void setCaptureLayoutHelper(CaptureLayoutHelper helper) {
5628a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu        mCaptureLayoutHelper = helper;
5728a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu    }
5828a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu
5988ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    @Override
6088ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
6128a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu        if (mCaptureLayoutHelper == null) {
6228a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu            Log.e(TAG, "Capture layout helper needs to be set first.");
6328a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu            return;
6488ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu        }
6528a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu        RectF uncoveredPreviewRect = mCaptureLayoutHelper.getUncoveredPreviewRect();
6628a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu        RectF bottomBarRect = mCaptureLayoutHelper.getBottomBarRect();
6728a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu
6828a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu        mModeOptionsOverlay.layout((int) uncoveredPreviewRect.left, (int) uncoveredPreviewRect.top,
6928a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu                (int) uncoveredPreviewRect.right, (int) uncoveredPreviewRect.bottom);
7028a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu        mBottomBar.layout((int) bottomBarRect.left, (int) bottomBarRect.top,
7128a2950939614a0c1c83787960ce1a218fb69a5eDoris Liu                (int) bottomBarRect.right, (int) bottomBarRect.bottom);
7288ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu    }
7388ea520053c1911e013ba675136be7dfa28c6c3bDoris Liu}