1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14package android.support.v17.leanback.widget; 15 16import android.support.v17.leanback.R; 17import android.content.res.Resources; 18import android.graphics.Color; 19import android.graphics.Outline; 20import android.graphics.drawable.ColorDrawable; 21import android.graphics.drawable.Drawable; 22import android.view.ViewGroup; 23import android.view.View; 24import android.view.ViewOutlineProvider; 25 26class ShadowHelperApi21 { 27 28 static int sNormalZ = Integer.MIN_VALUE; 29 static int sFocusedZ; 30 static final ViewOutlineProvider sOutlineProvider = new ViewOutlineProvider() { 31 @Override 32 public void getOutline(View view, Outline outline) { 33 outline.setRect(0, 0, view.getWidth(), view.getHeight()); 34 outline.setAlpha(1.0f); 35 } 36 }; 37 38 private static void initializeResources(Resources res) { 39 if (sNormalZ == Integer.MIN_VALUE) { 40 sNormalZ = (int) res.getDimension(R.dimen.lb_material_shadow_normal_z); 41 sFocusedZ = (int) res.getDimension(R.dimen.lb_material_shadow_focused_z); 42 } 43 } 44 45 /* add shadows and return a implementation detail object */ 46 public static Object addShadow(ViewGroup shadowContainer, boolean roundedCorners) { 47 initializeResources(shadowContainer.getResources()); 48 if (roundedCorners) { 49 RoundedRectHelperApi21.setRoundedRectBackground(shadowContainer, 50 Color.TRANSPARENT); 51 } else { 52 shadowContainer.setOutlineProvider(sOutlineProvider); 53 } 54 shadowContainer.setZ(sNormalZ); 55 shadowContainer.setTransitionGroup(true); 56 return shadowContainer; 57 } 58 59 /* set shadow focus level 0 for unfocused 1 for fully focused */ 60 public static void setShadowFocusLevel(Object impl, float level) { 61 ViewGroup shadowContainer = (ViewGroup) impl; 62 shadowContainer.setZ(sNormalZ + level * (sFocusedZ - sNormalZ)); 63 } 64 65 public static void setZ(View view, float z) { 66 view.setZ(z); 67 } 68} 69