14f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout/*
24f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Copyright (C) 2014 The Android Open Source Project
34f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout *
44f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
54f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * in compliance with the License. You may obtain a copy of the License at
64f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout *
74f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * http://www.apache.org/licenses/LICENSE-2.0
84f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout *
94f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License
104f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
114f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * or implied. See the License for the specific language governing permissions and limitations under
124f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * the License.
134f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */
144f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutpackage android.support.v17.leanback.widget;
154f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
164f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutimport android.graphics.Color;
174f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutimport android.graphics.drawable.ColorDrawable;
184f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutimport android.os.Build;
194f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutimport android.view.View;
204f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
214f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout/**
224f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Helper for setting rounded rectangle backgrounds on a view.
234f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */
244f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutfinal class RoundedRectHelper {
254f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
264f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    private final static RoundedRectHelper sInstance = new RoundedRectHelper();
274f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    private Impl mImpl;
284f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
294f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    /**
304f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * Returns an instance of the helper.
314f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     */
324f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    public static RoundedRectHelper getInstance() {
334f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        return sInstance;
344f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    }
354f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
364f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    /**
374f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * Sets a rounded rectangle background on the given view, and clips the view to the
384f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * background.  If clipping isn't supported on the android runtime, a simple rectangle
394f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * background is set instead.
404f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     *
414f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * @param view The view to be modified
424f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * @param color The color of the background
434f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     */
444f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    public void setRoundedRectBackground(View view, int color) {
454f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        mImpl.setRoundedRectBackground(view, color);
464f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    }
474f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
484f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    /**
494f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * Clears the background of the view to transparent.
504f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     *
514f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * @param view The view to be modified
524f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     */
534f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    public void clearBackground(View view) {
544f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        mImpl.clearBackground(view);
554f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    }
564f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
574f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    static interface Impl {
584f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        public void setRoundedRectBackground(View view, int color);
594f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        public void clearBackground(View view);
604f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    }
614f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
624f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    /**
634f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * Implementation used prior to L.
644f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     */
654f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    private static final class StubImpl implements Impl {
664f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        @Override
674f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        public void setRoundedRectBackground(View view, int color) {
684f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            // We could set a rounded rect background, but we don't
694f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            // because we can't do setClipToOutline.
704f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            // So just set a regular rectangle.
714f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            view.setBackgroundColor(color);
724f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        }
734f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
744f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        @Override
754f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        public void clearBackground(View view) {
764f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            view.setBackground(null);
774f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        }
784f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    }
794f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
804f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    /**
814f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     * Implementation used on api 21 (and above).
824f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout     */
834f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    private static final class Api21Impl implements Impl {
844f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        @Override
854f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        public void setRoundedRectBackground(View view, int color) {
864f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            RoundedRectHelperApi21.setRoundedRectBackground(view, color);
874f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        }
884f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
894f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        @Override
904f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        public void clearBackground(View view) {
914f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            RoundedRectHelperApi21.clearBackground(view);
924f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        }
934f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    }
944f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout
954f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    private RoundedRectHelper() {
96a52784195525cdb1f2bb4d8dde1b8b314f480957Chet Haase        if (Build.VERSION.SDK_INT >= 21) {
974f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            mImpl = new Api21Impl();
984f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        } else {
994f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout            mImpl = new StubImpl();
1004f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout        }
1014f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout    }
1024f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout}
103