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