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}