1f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout/* 2f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Copyright (C) 2015 The Android Open Source Project 3f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * 4f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Licensed under the Apache License, Version 2.0 (the "License"); 5f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * you may not use this file except in compliance with the License. 6f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * You may obtain a copy of the License at 7f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * 8f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * http://www.apache.org/licenses/LICENSE-2.0 9f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * 10f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Unless required by applicable law or agreed to in writing, software 11f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * distributed under the License is distributed on an "AS IS" BASIS, 12f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * See the License for the specific language governing permissions and 14f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * limitations under the License 15f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 16f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stoutpackage android.support.v17.leanback.widget; 17f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 18f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stoutimport android.os.Build; 19f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stoutimport android.view.ViewGroup; 20f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 21f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 22f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout/** 23f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Helper for static (nine patch) shadows. 24f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 25f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stoutfinal class StaticShadowHelper { 26f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 27f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout final static StaticShadowHelper sInstance = new StaticShadowHelper(); 28f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout boolean mSupportsShadow; 29f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout ShadowHelperVersionImpl mImpl; 30f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 31f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout /** 32f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Interface implemented by classes that support Shadow. 33f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 34f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout static interface ShadowHelperVersionImpl { 35f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void prepareParent(ViewGroup parent); 36254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu public Object addStaticShadow(ViewGroup shadowContainer); 37f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void setShadowFocusLevel(Object impl, float level); 38f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 39f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 40f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout /** 41f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Interface used when we do not support Shadow animations. 42f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 43f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout private static final class ShadowHelperStubImpl implements ShadowHelperVersionImpl { 4499ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas ShadowHelperStubImpl() { 4599ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas } 4699ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas 47f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 48f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void prepareParent(ViewGroup parent) { 49f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout // do nothing 50f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 51f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 52f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 53254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu public Object addStaticShadow(ViewGroup shadowContainer) { 54f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout // do nothing 55f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout return null; 56f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 57f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 58f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 59f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void setShadowFocusLevel(Object impl, float level) { 60f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout // do nothing 61f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 62f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 63f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 64f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout /** 65f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Implementation used on JBMR2 (and above). 66f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 67f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout private static final class ShadowHelperJbmr2Impl implements ShadowHelperVersionImpl { 6899ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas ShadowHelperJbmr2Impl() { 6999ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas } 7099ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas 71f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 72f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void prepareParent(ViewGroup parent) { 73f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout ShadowHelperJbmr2.prepareParent(parent); 74f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 75f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 76f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 77254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu public Object addStaticShadow(ViewGroup shadowContainer) { 78f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout return ShadowHelperJbmr2.addShadow(shadowContainer); 79f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 80f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 81f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 82f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void setShadowFocusLevel(Object impl, float level) { 83f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout ShadowHelperJbmr2.setShadowFocusLevel(impl, level); 84f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 85f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 86f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 87f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout /** 88f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Returns the StaticShadowHelper. 89f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 90f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout private StaticShadowHelper() { 91b7c09c22aa6e2edf28335894e5fff4f2b7a30175Dake Gu if (Build.VERSION.SDK_INT >= 21) { 92f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mSupportsShadow = true; 93f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mImpl = new ShadowHelperJbmr2Impl(); 94f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } else { 95f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mSupportsShadow = false; 96f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mImpl = new ShadowHelperStubImpl(); 97f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 98f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 99f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 100f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public static StaticShadowHelper getInstance() { 101f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout return sInstance; 102f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 103f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 104f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public boolean supportsShadow() { 105f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout return mSupportsShadow; 106f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 107f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 108f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void prepareParent(ViewGroup parent) { 109f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mImpl.prepareParent(parent); 110f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 111f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 112254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu public Object addStaticShadow(ViewGroup shadowContainer) { 113254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu return mImpl.addStaticShadow(shadowContainer); 114f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 115f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 116f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void setShadowFocusLevel(Object impl, float level) { 117f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mImpl.setShadowFocusLevel(impl, level); 118f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 119f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout} 120