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.View; 20f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stoutimport android.view.ViewGroup; 21f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 22f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 23f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout/** 24f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Helper for static (nine patch) shadows. 25f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 26f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stoutfinal class StaticShadowHelper { 27f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 28f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout final static StaticShadowHelper sInstance = new StaticShadowHelper(); 29f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout boolean mSupportsShadow; 30f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout ShadowHelperVersionImpl mImpl; 31f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 32f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout /** 33f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Interface implemented by classes that support Shadow. 34f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 35f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout static interface ShadowHelperVersionImpl { 36f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void prepareParent(ViewGroup parent); 37254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu public Object addStaticShadow(ViewGroup shadowContainer); 38f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void setShadowFocusLevel(Object impl, float level); 39f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 40f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 41f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout /** 42f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Interface used when we do not support Shadow animations. 43f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 44f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout private static final class ShadowHelperStubImpl implements ShadowHelperVersionImpl { 4599ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas ShadowHelperStubImpl() { 4699ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas } 4799ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas 48f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 49f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void prepareParent(ViewGroup parent) { 50f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout // do nothing 51f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 52f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 53f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 54254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu public Object addStaticShadow(ViewGroup shadowContainer) { 55f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout // do nothing 56f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout return null; 57f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 58f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 59f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 60f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void setShadowFocusLevel(Object impl, float level) { 61f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout // do nothing 62f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 63f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 64f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 65f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout /** 66f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Implementation used on JBMR2 (and above). 67f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 68f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout private static final class ShadowHelperJbmr2Impl implements ShadowHelperVersionImpl { 6999ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas ShadowHelperJbmr2Impl() { 7099ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas } 7199ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas 72f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 73f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void prepareParent(ViewGroup parent) { 74f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout ShadowHelperJbmr2.prepareParent(parent); 75f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 76f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 77f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 78254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu public Object addStaticShadow(ViewGroup shadowContainer) { 79f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout return ShadowHelperJbmr2.addShadow(shadowContainer); 80f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 81f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 82f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout @Override 83f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void setShadowFocusLevel(Object impl, float level) { 84f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout ShadowHelperJbmr2.setShadowFocusLevel(impl, level); 85f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 86f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 87f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 88f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout /** 89f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout * Returns the StaticShadowHelper. 90f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout */ 91f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout private StaticShadowHelper() { 92b7c09c22aa6e2edf28335894e5fff4f2b7a30175Dake Gu if (Build.VERSION.SDK_INT >= 21) { 93f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mSupportsShadow = true; 94f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mImpl = new ShadowHelperJbmr2Impl(); 95f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } else { 96f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mSupportsShadow = false; 97f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mImpl = new ShadowHelperStubImpl(); 98f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 99f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 100f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 101f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public static StaticShadowHelper getInstance() { 102f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout return sInstance; 103f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 104f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 105f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public boolean supportsShadow() { 106f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout return mSupportsShadow; 107f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 108f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 109f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void prepareParent(ViewGroup parent) { 110f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mImpl.prepareParent(parent); 111f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 112f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 113254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu public Object addStaticShadow(ViewGroup shadowContainer) { 114254b417129de2a8c5612826a152f8a26c8f1d0e8Dake Gu return mImpl.addStaticShadow(shadowContainer); 115f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 116f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout 117f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout public void setShadowFocusLevel(Object impl, float level) { 118f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout mImpl.setShadowFocusLevel(impl, level); 119f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout } 120f4acd3cf076435ce836a6d4a9027b73ec3050defCraig Stout} 121