ShadowHelper.java revision dfd01bbadc107b6b3b2081ddb0236128c425f380
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.content.Context; 17import android.os.Build; 18import android.view.ViewGroup; 19 20 21/** 22 * Helper for shadow. 23 */ 24final class ShadowHelper { 25 26 final static ShadowHelper sInstance = new ShadowHelper(); 27 boolean mSupportsShadow; 28 ShadowHelperVersionImpl mImpl; 29 30 /** 31 * Interface implemented by classes that support Shadow. 32 */ 33 static interface ShadowHelperVersionImpl { 34 35 public void prepareParent(ViewGroup parent); 36 37 public Object addShadow(ViewGroup shadowContainer); 38 39 public void setShadowFocusLevel(Object impl, float level); 40 41 } 42 43 /** 44 * Interface used when we do not support Shadow animations. 45 */ 46 private static final class ShadowHelperStubImpl implements ShadowHelperVersionImpl { 47 48 @Override 49 public void prepareParent(ViewGroup parent) { 50 // do nothing 51 } 52 53 @Override 54 public Object addShadow(ViewGroup shadowContainer) { 55 // do nothing 56 return null; 57 } 58 59 @Override 60 public void setShadowFocusLevel(Object impl, float level) { 61 // do nothing 62 } 63 64 } 65 66 /** 67 * Implementation used on JBMR2 (and above). 68 */ 69 private static final class ShadowHelperJbmr2Impl implements ShadowHelperVersionImpl { 70 71 @Override 72 public void prepareParent(ViewGroup parent) { 73 ShadowHelperJbmr2.prepareParent(parent); 74 } 75 76 @Override 77 public Object addShadow(ViewGroup shadowContainer) { 78 return ShadowHelperJbmr2.addShadow(shadowContainer); 79 } 80 81 @Override 82 public void setShadowFocusLevel(Object impl, float level) { 83 ShadowHelperJbmr2.setShadowFocusLevel(impl, level); 84 } 85 86 } 87 88 /** 89 * Returns the ShadowHelper. 90 */ 91 private ShadowHelper() { 92 if (Build.VERSION.SDK_INT >= 18) { 93 mSupportsShadow = true; 94 mImpl = new ShadowHelperJbmr2Impl(); 95 } else { 96 mSupportsShadow = false; 97 mImpl = new ShadowHelperStubImpl(); 98 } 99 } 100 101 public static ShadowHelper getInstance() { 102 return sInstance; 103 } 104 105 public boolean supportsShadow() { 106 return mSupportsShadow; 107 } 108 109 public void prepareParent(ViewGroup parent) { 110 mImpl.prepareParent(parent); 111 } 112 113 public Object addShadow(ViewGroup shadowContainer) { 114 return mImpl.addShadow(shadowContainer); 115 } 116 117 public void setShadowFocusLevel(Object impl, float level) { 118 mImpl.setShadowFocusLevel(impl, level); 119 } 120} 121