183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar/*
283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * Copyright (C) 2014 The Android Open Source Project
383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *
483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * you may not use this file except in compliance with the License.
683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * You may obtain a copy of the License at
783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *
883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar *
1083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * Unless required by applicable law or agreed to in writing, software
1183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
1283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * See the License for the specific language governing permissions and
1483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar * limitations under the License.
1583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar */
1683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarpackage android.support.v7.widget;
1783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
1883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.content.Context;
1983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarimport android.view.View;
2083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
2183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyarclass CardViewApi21 implements CardViewImpl {
2283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
2383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    @Override
2483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public void initialize(CardViewDelegate cardView, Context context, int backgroundColor,
25bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar            float radius, float elevation, float maxElevation) {
26bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        final RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, radius);
27bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        cardView.setBackgroundDrawable(backgroundDrawable);
2883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        View view = (View) cardView;
2983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        view.setClipToOutline(true);
3018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        view.setElevation(elevation);
31bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        setMaxElevation(cardView, maxElevation);
3283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
3383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
3483b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    @Override
3583b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public void setRadius(CardViewDelegate cardView, float radius) {
3683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        ((RoundRectDrawable) (cardView.getBackground())).setRadius(radius);
3783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
3883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
3983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    @Override
4083b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public void initStatic() {
4183b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
4283b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
4383b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    @Override
4418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public void setMaxElevation(CardViewDelegate cardView, float maxElevation) {
45bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        ((RoundRectDrawable) (cardView.getBackground())).setPadding(maxElevation,
46c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar                cardView.getUseCompatPadding(), cardView.getPreventCornerOverlap());
47bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        updatePadding(cardView);
4818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
4918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
5018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    @Override
5118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public float getMaxElevation(CardViewDelegate cardView) {
52bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        return ((RoundRectDrawable) (cardView.getBackground())).getPadding();
5318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
5418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
5518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    @Override
5618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public float getMinWidth(CardViewDelegate cardView) {
5718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        return getRadius(cardView) * 2;
5818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
5918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
6018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    @Override
6118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public float getMinHeight(CardViewDelegate cardView) {
6218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        return getRadius(cardView) * 2;
6318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
6418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
6518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    @Override
6683b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    public float getRadius(CardViewDelegate cardView) {
6783b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar        return ((RoundRectDrawable) (cardView.getBackground())).getRadius();
6883b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar    }
6983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar
7018ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    @Override
7118ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public void setElevation(CardViewDelegate cardView, float elevation) {
7218ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        ((View) cardView).setElevation(elevation);
7318ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
7418ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
7518ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    @Override
7618ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    public float getElevation(CardViewDelegate cardView) {
7718ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar        return ((View) cardView).getElevation();
7818ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar    }
7918ef68d444a1c059041bf5b683eb612ffed22ea9Yigit Boyar
80bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar    @Override
81bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar    public void updatePadding(CardViewDelegate cardView) {
82c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar        if (!cardView.getUseCompatPadding()) {
83bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar            cardView.setShadowPadding(0, 0, 0, 0);
84bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar            return;
85bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        }
86bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        float elevation = getMaxElevation(cardView);
87bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        final float radius = getRadius(cardView);
88bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        int hPadding = (int) Math.ceil(RoundRectDrawableWithShadow
89c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar                .calculateHorizontalPadding(elevation, radius, cardView.getPreventCornerOverlap()));
90bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        int vPadding = (int) Math.ceil(RoundRectDrawableWithShadow
91c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar                .calculateVerticalPadding(elevation, radius, cardView.getPreventCornerOverlap()));
92bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        cardView.setShadowPadding(hPadding, vPadding, hPadding, vPadding);
93bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar    }
94bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar
95bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar    @Override
96bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar    public void onCompatPaddingChanged(CardViewDelegate cardView) {
97bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar        setMaxElevation(cardView, getMaxElevation(cardView));
98bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar    }
99bdb07a1802c017efa64a5cfd8ab5a7ff4c4926b0Yigit Boyar
100c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar    @Override
101c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar    public void onPreventCornerOverlapChanged(CardViewDelegate cardView) {
102c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar        setMaxElevation(cardView, getMaxElevation(cardView));
103c42ba8c000d1e6ce85e152dfc17089a0a69e739fYigit Boyar    }
1044eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar
1054eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar    @Override
1064eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar    public void setBackgroundColor(CardViewDelegate cardView, int color) {
1074eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar        ((RoundRectDrawable) (cardView.getBackground())).setColor(color);
1084eb77f0ed24a9d300f7d12959de8cf7efd837e2fYigit Boyar    }
10983b8526436ba2e564dff99ec4c6cf46fabfdf22eYigit Boyar}