1457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler/* 2457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * Copyright (C) 2016 The Android Open Source Project 3457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * 4457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 5457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * you may not use this file except in compliance with the License. 6457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * You may obtain a copy of the License at 7457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * 8457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * http://www.apache.org/licenses/LICENSE-2.0 9457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * 10457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * Unless required by applicable law or agreed to in writing, software 11457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 12457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * See the License for the specific language governing permissions and 14457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * limitations under the License 15457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler */ 16457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 17457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantlerpackage android.support.v17.internal.widget; 18457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 198e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikasimport static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP; 208e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas 21457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantlerimport android.content.Context; 22457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantlerimport android.graphics.Outline; 238f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viveretteimport android.support.annotation.RequiresApi; 24c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport android.support.annotation.RestrictTo; 25457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantlerimport android.util.AttributeSet; 26457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantlerimport android.view.View; 27457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantlerimport android.view.ViewOutlineProvider; 28457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantlerimport android.widget.FrameLayout; 29457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 30457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler/** 31457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * {@link FrameLayout} subclass that provides an outline only when it has children, so that it does 32457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * not cast a shadow when empty. 33457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * 34457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler * @hide 35457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler */ 368f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette@RequiresApi(21) 378e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas@RestrictTo(LIBRARY_GROUP) 38457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantlerpublic class OutlineOnlyWithChildrenFrameLayout extends FrameLayout { 39457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 40457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler private ViewOutlineProvider mMagicalOutlineProvider; 41457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler private ViewOutlineProvider mInnerOutlineProvider; 42457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 43457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler public OutlineOnlyWithChildrenFrameLayout(Context context) { 44457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler super(context); 45457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 46457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 47457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs) { 48457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler super(context, attrs); 49457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 50457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 51457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs, 52457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler int defStyleAttr) { 53457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler super(context, attrs, defStyleAttr); 54457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 55457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 56457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs, 57457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler int defStyleAttr, int defStyleRes) { 58457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler super(context, attrs, defStyleAttr, defStyleRes); 59457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 60457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 61457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler @Override 62457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 63457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler super.onLayout(changed, left, top, right, bottom); 64457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler invalidateOutline(); 65457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 66457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler 67457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler @Override 68457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler public void setOutlineProvider(ViewOutlineProvider provider) { 69457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler mInnerOutlineProvider = provider; 70457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler if (mMagicalOutlineProvider == null) { 71457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler // Can't initialize this directly because this method is called from the superclass's 72457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler // constructor. 73457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler mMagicalOutlineProvider = new ViewOutlineProvider() { 74457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler @Override 75457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler public void getOutline(View view, Outline outline) { 76457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler if (getChildCount() > 0) { 77457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler mInnerOutlineProvider.getOutline(view, outline); 78457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } else { 79457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler ViewOutlineProvider.BACKGROUND.getOutline(view, outline); 80457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 81457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 82457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler }; 83457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 84457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler super.setOutlineProvider(mMagicalOutlineProvider); 85457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler } 86457c75a3c5942bcd7ad2f6ed48658bd705e31accTony Mantler} 87